Nur ein fauler Programmierer ist ein guter Programmierer. (Anonymous)
“BASIC” ist die Abkürzung von “Beginner’s All-purpose Symbolic Instruction Code”. In Microsoft’s Office kann man Macros mit VisualBasic, kurz VB, erstellen. Der Name ist anders, der Prinzip dasselbe. Was kann man mit dieser Anfänger-Sprache anstellen? Ein kleines Helferlein in Word programmieren. Ein Beispiel.
Ich habe beschrieben, wie man von Daten in einer Tabelle über die Seriendruck-Funktion zu LotusNotes’ “Structured Text” gelangt. Unabdingbar dazu ist eine Word-Vorlage, die entsprechende Platzhalter hat. In “Hilfe, Seriendruck” habe ich zwei Platzhalter gezeigt, “Name” und “Vorname”. Stell’ Dir vor, da müssen 100 Platzhalter hin. Will ich deren Bezeichner von Hand eintippen? Nein, denn das ist a) fehlerträchtig und b) langweilig. Also schnell etwas Code gezaubert, der das erledigt.
Vorgehen:
Ich habe eine Textdatei. In jeder Zeile steht nichts ausser einem Bezeichner. Ziel ist, nach dem Bezeichner einen Doppelpunkt, ein Leerzeichen und einen Platzhalter gleichen Namens zu ergänzen. Das erledigt das folgende Makro, wenn der Cursor vor dem Makro-Aufruf oben links im Dokument steht.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Sub hinzufuegenMergeFieldJeAbsatz () ' Verweis auf MSForm c:\win\sys32\fm20.dll muss bestehen, damit ' Zugriff auf Zwischenablage möglich. ' Dim doc as Document Dim para as Paragraph Dim k as Integer Set doc = ActiveDocument For k = 1 to doc.Paragraphs.Count ' Absatz markieren doc.Paragraphs(k).Range.Select ' Absatzschaltung demarkieren Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend ' Markiertes in die Zwischenablage kopieren Selection.Copy ' Cursor hinter die Markierung stellen, implizit Markierung aufheben Selection.MoveRight Unit:=wdWord ' Feld-Wert-Trennzeichen einfügen Selection.TypeText ": " ' Name des MergeField steht in der Zwischenablage ' DataObject ist in MSForms Dim oData as New DataObject oData.getFromClipboard myString = oData.GetText Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _ Text:="MERGEFIELD " + myString, PreserveFormatting:=True Next k End Sub |
Das charmante an VB ist, dass man keine Ahnung von VB haben muss, um in VB zu programmieren. Es reicht aus, eine echte Programmiersprache zu beherrschen. Anfänger sollten C oder C++ oder Java lernen.