[VBA Word] Auslesen einer Tabelle

Hallo,

ich habe ein Makro geschrieben, mit dem wir diverse (teilweise mit
RegExpr) Suchen&Ersetzen-Läufe in Word realisieren. Dazu habe ich
eine Word-Datei angelegt, in der in einer Tabelle alle nötigen
Informationen (Suchtext, Ersetzentext, MustersucheJaNein usw.)
stehen, die für die Läufe benötigt werden.
Diese Tabelle lese ich mittles Makro Zelle um Zelle in ein Array ein
und nutze dies, den S+E-Algorythmus zu füttern.
Warum ein Word-Dokument und eine Tabelle? Weil die Benutzer das
verändern müssen und sich mit Text-Encodings und Makros usw. usf.
nicht herumschlagen können.

Jetzt habe ich ein Problem. Die Tabelle ist mittlerweile so groß,
dass alleine das Einlesen der Tabelle ins Array unglaublich lange
dauert. Ich bin jetzt auf der Suche nach einer alternativen
Vorgehensweise/Ablageweise.

Kann mir da jemand helfen/wertvolle Tipps geben?

Dafür schon mal herzlichen Dank!
Tobias

(Word 2004 für Mac - aber schreibt ruhig auch Lösungen für PC-Word -
das finde ich schon irgendwie raus, wie ich das übersetzen kann.)

Hallo,

auf einem Windows Rechner würde ich die Daten über OLEDB/ADO/DAO in ein Recordset lesen und dann verarbeiten. Wenn Du den Cursor für das Recordset richtig „konfigurierst“ ist die Verarbeitung bei großen Datenmengen bestimmt schneller als die Verwendung eines Array, da nicht alle Daten auf einmal eingelesen werden.

Sind die „Tabelle“ und das Word Dokument zwei getrennte Dateien ?

Warum kannst Du denn zur Laufzeit nicht schrittweise vorgehen ? Wenn Du die Daten aus den entspr. Zellen abarbeitest, kannst Du die Werte doch auch direkt einer Funktion übergeben (zeilenweise), statt zuvor das Arry zu füllen und dieses zu durchlaufen ?!

Nach jedem Zeilendurchlauf z.B.:

public function FktErsetzen (strSeek as string, strReplace as string, blMuster as boolen, usw. usw.) as long

'Übergabeparameter zusamensetzen und „Ersetzenfunktion“ ausführen

end function

Gruß Andreas

Hi,

Sind die „Tabelle“ und das Word Dokument zwei getrennte
Dateien ?

Ja, immer. Es sind Dateien, die wir extern geliefert bekommen und
dann sofort durch das Makro laufen.

Warum kannst Du denn zur Laufzeit nicht schrittweise vorgehen?

Das ist ein guter Hinweis. Da werde ich mal die Zeitunterschiede
messen.

Wie sind denn die Möglichkeiten, vielleicht statt einer Word-Datei
mit Tabelle evtl. eine XML-Datei in VBA als Vorlage zu verwenden? Im
Netz ist da irgendwie nicht viel zu finden…

Gruß
Tobias

Warum kannst Du denn zur Laufzeit nicht schrittweise vorgehen?

Sorry, mir ist wieder eingefallen, warum ich das in ein Array
gefüttert habe (das Skript läuft jetzt schon seit einem Jahr
unverändert… mein Gedächtnis… :o)):
Es ist so geschrieben, dass ich so viele Word-Dokumente abarbeite,
wie geöffnet sind und nicht nur eins. Wenn ich also zur Laufzeit
schrittweise vorangehe, ist das vielleicht bei einem Dokument
vorteilhaft, bei mehreren muss ich dann aber auch die »INI«-Datei
mehrfach neu einlesen.
Oder vielleicht beim ersten Einlesen sowohl ins Array schreiben und
gleichzeitig den ersten Lauf machen? Dann müsste ich aber immer
zwischen den Dokumenten hin- und herwechseln.

Hm. Das muss ich mir nochmal genauer überlegen…

Aber ich schätze, dass ein »simples« Text-File (oder XML?) sicherlich
schneller einlaufen wird, als dieses Word-Tabellen-Konstrukt.

Grübelnde Grüße
Tobias

So hab ich’s jetzt gemacht
Falls es jemanden interessiert:
Ich habe die (»Präferenzen«-)Tabelle jetzt einfach anders
verarbeitet.

  1. Wandle Tablle in Tabulator getrennten Text um
  2. Lese diesen Text komplett in Variable
  3. Benutze die wunderbare Split()-Funktion*
  4. und füttere damit das Array.

Geschwindigkeitszuwachs ist von (alt) 180 sek. auf (neu) 39 sek.,
also ungefähr 4,6 mal so schnell - herrlich :o))

Tobias

*von Chris Rae’s VBA Code Archive -
http://chrisrae.com/vba/routines.html