DlgListenfeldDatenfeld austricksen

Ich verwende unter Word 6.0 ein Makro, in dem ich mit der Anweisung DlgListenfeldDatenfeld eine Auswahlliste mit Daten fⁿllen will. Die Daten stelle ich im Laufe des Makros als Zeichenkette zusammen. Leider akzeptiert die Anweisung meine Zeichenkette nicht als Parameter. Wie lΣ▀t sich dieses Problem umgehen?

Die Ursache Ihres Problems liegt in der Struktur des Datenfelds. Die Funktion DlgListenfeldDatenfeld erwartet als Parameter ein Array. Dabei handelt es sich um eine Art Zeichenkette, die aber bewu▀t in bestimmte Abschnitte unterteilt ist. Sie k÷nnen die einzelnen Abschnitte durch Angabe eines Index ansprechen. Beispielsweise greift Array$ (0) auf das erste Element des Arrays zu. Eine recht einfache L÷sung des Problems ist es deshalb, die Teilzeichenketten fⁿr die zusammengesetzte Zeichenkette gleich in einen Array zu schreiben. Das k÷nnte dann etwa folgenderma▀en aussehen:

MyArray$(0)=ôErster Wertô
MyArray$(1)=ôZweiter Wertô
Da Sie jedoch nichts ⁿber das Zustandekommen Ihrer Zeichenkette mitgeteilt haben, kann eine so allgemeine L÷sung eventuell zu Problemen fⁿhren. Deshalb stellt WIN Ihnen eine Art Add-on mit einer Routine zum ▄berfⁿhren der Zeichenkette in einen Array vor. Bei diesem Vorgehen sind lediglich minimale ─nderungen an Ihrem Programm n÷tig. Sie brauchen nur einige Funktionsaufrufe zwischen dem Erzeugen der Zeichenkette und der Definition des Dialogs zu ergΣnzen. Um erst einmal die notwendigen Variablen zu erzeugen, ergΣnzen Sie Ihr Makro in der ersten Zeile um die folgende Anweisung:
Dim Shared MyArray$(10), MyString$
Damit legen Sie einen Array und eine Zeichenkette an, die fⁿr alle Routinen verfⁿgbar sind. Dies ist die absolut simpelste Art, Daten zwischen Prozeduren zu teilen. Die Gr÷▀e des Arrays ist im Beispiel auf zehn Elemente begrenzt. Bitte passen Sie die Gr÷▀e an Ihre Aufgabenstellung an. Die Zeichenkette bezeichnen Sie mit dem vorhandenen Namen. Wenn Sie die alte Kette innerhalb einer eigenen Routine ausdrⁿcklich deklarieren, entfernen Sie diese Deklarationen, da es sonst zu Problemen kommen kann. An das Ende Ihres Listings fⁿgen Sie die Prozedur aus dem Listing-Kasten unten ein oder kopieren sie aus der Datei DATFELD.TXT von der WIN-Monats-CD. Solange in Ihrer Zeichenkette noch Zeichen vorhanden sind, durchlΣuft Word diese Schleife. Dabei prⁿft die Schleife zunΣchst die Zeichenkette auf ein zuvor beim Anlegen verwendetes Trennzeichen. Wenn Sie kein Komma verwenden, ersetzen Sie es bitte durch Ihr Trennzeichen. Wenn das Programm ein Trennzeichen findet, gibt es die Position des Zeichens, andernfalls eine Null an die Variable Pos zurⁿck. Dann schreibt Word die Zeichen zwischen dem linken Rand der Zeichenkette und dem Trennzeichen in den Array. Die folgende Anweisung verkⁿrzt die Zeichenkette um den soeben ausgelesenen Teil. Um beim nΣchsten Durchlauf ein neues Array-Feld beschreiben zu k÷nnen, ist noch die ZΣhlvariable i um den Wert Eins zu erh÷hen. Sobald keine Trennzeichen mehr aufzufinden sind, schreibt der Else-Zweig den Rest der Zeichenkette in das aktuelle Array-Feld. Anschlie▀end l÷scht er die Zeichenkette komplett. Um die Prozedur aufzurufen, fⁿgen Sie den Prozedurnamen zwischen der Erzeugungsroutine fⁿr die Zeichenkette und der Neudefinition des Datenfelds ein. Fⁿr die Anweisung DlgListenfeldDatenfeld verwenden Sie die Variable MyArray$() als Parameter. Damit sollte das automatische Auffⁿllen des Listenfelds keine Probleme mehr bereiten.
Listing: Zeichenketten in Arrays umwandeln
Sub CnvtStringToArray
i = 0
While Len (MyString$) > 0
Pos = InStr (1, MyString$, ô,ô)
If Pos <> 0 Then
MyArray$(i) = Left$(MyString$, Pos - 1)
MyString$ = Right$(MyString$, Len (MyString$) - Pos)
Else
MyArray$(i) = MyString$
MyString$ = ôô
EndIf
i = i + 1
Wend
End Sub