Word Seitenzahlen für Suchstring ermitteln

Mitglied: goodbytes

goodbytes (Level 2) - Jetzt verbinden

18.03.2016 um 10:51 Uhr, 1855 Aufrufe, 22 Kommentare

Hallo,

Mittels vba möchte ich ein ganzes Word-Dokument nach einem bestimmten String durchsuchen und alle Seitenzahlen wo dieser String auftaucht in eine Variable (Array) schreiben.
Diese Variable nutze ich dann für die weitere Verarbeitung.


Wie bekomme ich an dieser Stelle die Seitenzahl?

Torsten
Mitglied: 114757
114757 (Level 4)
LÖSUNG 18.03.2016, aktualisiert um 11:27 Uhr
Mit einer Collection so
oder auch mit Plain-Array so:
Gruß jodel32
Bitte warten ..
Mitglied: goodbytes
21.03.2016, aktualisiert um 12:35 Uhr
Hallo jodel32,
funktioniert Beides bestens, vielen Dank. :-) face-smile
Zur Info...
Ich benötige es um aus einem Word-Dokument mehrere enthaltene Dokumente, welche jeweils eine unterschiedliche Anzahl an Seiten haben können, einzeln als pdf-Datei zu speichern. Dieser Suchstring steht dabei immer auf der ersten Seite eines Dokuments, so dass ich immer diese erste Seite identifizieren kann.
Hier der komplette Code dazu:
Was mir noch einfällt, ist aber nur so ein Gedanke, wie könnte ich beim Auffinden des Suchstrings eigentlich eine feste Anzahl der nachfolgenden Zeichen (in dem Fall steht die Dokumentennummer immer hinter dem Suchstring) in ein zweites Array schreiben? Dann hätte ich gleich diese Information für den Dateinamen zur Verfügung...

Gruß
Torsten
Bitte warten ..
Mitglied: 114757
114757 (Level 4)
LÖSUNG 21.03.2016 um 13:03 Uhr
Zitat von @goodbytes:
Was mir noch einfällt, ist aber nur so ein Gedanke, wie könnte ich beim Auffinden des Suchstrings eigentlich eine feste Anzahl der nachfolgenden Zeichen (in dem Fall steht die Dokumentennummer immer hinter dem Suchstring) in ein zweites Array schreiben?
Geht einfach, deklariere am Anfang ein zweites Array
Dann in der Suchschleife das Array entsprechend erweitern
Für das Hinzufügen einer festen länge an Zeichen hinter dem Suchstring machst du so (Beispiel für 4 Zeichen):
Gruß jodel32
Bitte warten ..
Mitglied: goodbytes
22.03.2016 um 10:35 Uhr
Hallo jodel32,
seltsam, vba meint zu Range "Sub oder Function nicht definiert". :-| face-plain

Gruß
Torsten
Bitte warten ..
Mitglied: 114757
114757 (Level 4)
LÖSUNG 22.03.2016, aktualisiert um 10:42 Uhr
Dann steht dein Code in einem Modul und nicht im ActiveDocument Abschnitt, dann musst du stattdessen vorne noch das Dokument mit angeben...ActiveDocument.Content.Range(.......)

Geht ansonsten einwandfrei, hier getestet.
Bitte warten ..
Mitglied: goodbytes
22.03.2016 um 11:58 Uhr
Stimmt, dann geht es natürlich sofort... ;-) face-wink
Danke !!! :-) face-smile
Bitte warten ..
Mitglied: goodbytes
23.03.2016 um 13:42 Uhr
Na prima, ein neues Problem tat sich auf... Nie bleibt es dabei wie es ist... Grrrr... :-| face-plain
Nun steckt der String künftig ausschließlich in der Kopfzeile. Also müsste das Makro alle Kopfzeilen durchlaufen um die Arrays zu befüllen.
Wie kann ich das realisieren?

Muss ich dafür eine extra Schleife drumherum machen oder geht es auch eleganter?

Gruß goodbytes
Bitte warten ..
Mitglied: 114757
114757 (Level 4)
23.03.2016, aktualisiert um 15:03 Uhr
Muss ich dafür eine extra Schleife drumherum machen
Jupp, wenn er nur noch in den Headern steckt ja.

Wenn du komplett alles durchsuchen willst kannst du auch die StoryRanges Auflistung hernehmen:

Bitte warten ..
Mitglied: goodbytes
23.03.2016, aktualisiert um 17:31 Uhr
Also irgendwie komm ich mit den StoryRanges nicht klar.
Dieser Code erzeugt mir eine Endlosschleife...
Wie nutze ich die StoryRanges in meinem Code richtig?
Bitte warten ..
Mitglied: 114757
114757 (Level 4)
24.03.2016, aktualisiert um 08:06 Uhr
nicht im Objekt der Story suchen sondern wie ich es oben gemacht habe den Range der Story selektieren und dann mit dem Selection-Objekt arbeiten.
Bitte warten ..
Mitglied: goodbytes
24.03.2016 um 15:32 Uhr
Ach, hab jetzt hin und her versucht, bekomm es nicht hin mit den StoryRanges.
Im Prinzip muss ich jetzt nur noch in den Kopfzeilen suchen, daher versuchte ich es mit:
Aber das klappt nicht. :-( face-sad Der Fehler steckt sicher in der zweiten Zeile, oder?
Bitte warten ..
Mitglied: 114757
114757 (Level 4)
24.03.2016, aktualisiert um 15:44 Uhr
Es gibt auch noch wdHeaderFooterPrimary für die Kopfzeilen, deine verwendete Kopfzeile existiert nur wenn die erste Seite eine andere Kopfzeile hat wie die folgenden, Seiten der Section, deswegen musst du beide durchsuchen wenn du jeweils beide verwendest.

Bitte warten ..
Mitglied: goodbytes
30.03.2016 um 15:55 Uhr
Ok, mir reicht da schon "wdHeaderFooterFirstPage", da ich damit immer die erste Kopfzeile eines Unter-Dokumentes bekomme. Wenn der nächste Treffer kommt einfach Seitenzahl minus 1 und ich hab alle Seitenzahlen des Unter-Dokumentes.
Allerdings bekomme ich beim Finden des Strings nicht die aktuelle Seitenzahl des gesamten Dokumentes, sondern nur innerhalb der Section.
Wie komme ich da an die aktuelle Seitenzahl des Gesamt-Dokumentes?
Bitte warten ..
Mitglied: 114757
114757 (Level 4)
30.03.2016, aktualisiert um 20:47 Uhr
Sorry, dafür habe ich im Moment keine Lösung. Die Info gibt, wenn sich die Selection innerhalb des Headers befindet dort immer die erste Seite der jeweiligen Section aus, egal auf welcher Seite der Section das Suchwort gefunden wurde. Ich habe es auch mit Goto-Sprüngen in die Main-Story der Seite versucht, leider ergebnislos.

Du könntest alternativ ein nicht unsichtbares Seitenzahlenfeld in den Header einbauen, das könnte man dann auslesen und verwenden.
Bitte warten ..
Mitglied: goodbytes
02.04.2016 um 08:49 Uhr
Mmm, schade. Mal schauen wie ich es dann mache.
Danke auf jeden Fall für die viele Hilfe, es war auf jeden Fall sehr lehrreich für mich! :-) face-smile

Schönes Wochenende!
Torsten
Bitte warten ..
Mitglied: goodbytes
04.04.2016 um 08:35 Uhr
Hallo jodel32,
im Prinzip habe ich ja in den Kopfzeilen der Unter-Dokumente ebenfalls eine Seitenangabe. In der selben Zeile mit dem Suchstring steht am Ende immer z.B. Seite 1 von 3, je nach Seitenanzahl. Kann man meinen Code so umbasteln, dass er einfach immer beim Finden von Seite 1 von alle Seiten des aktuellen Unterdokument als pdf ausgibt (wie in meinem Post vom 21.03.)?
In dem Fall brauche ich natürlich die Arrays nicht, da nach der pdf-Erstellung zum nächsten Unter-Dokument mit Seite 1 von übergegangen wird.
Wäre das vielleicht irgendwie möglich?

Gruß goodbytes
Bitte warten ..
Mitglied: goodbytes
06.04.2016, aktualisiert um 17:10 Uhr
Mir ist aufgefallen, dass Word die einzelnen Dokumente ja als "Abschnitt 1", "Abschnitt 2", usw. bezeichnet.
Zum Drucken beispielsweise kann ich also Pages="S3" angeben, was dem 2. Unter-Dokument entspricht.
Allerdings ist das nicht beim Export als PDF möglich. Kann ich vielleicht für jeden Abschnitt die Seitenzahlen von-bis ermitteln? Dann käme ich auch dahin...
Bitte warten ..
Mitglied: goodbytes
07.04.2016 um 16:51 Uhr
So, mit diesem Ansatz geht es:


Bitte warten ..
Mitglied: 114757
114757 (Level 4)
07.04.2016, aktualisiert um 17:26 Uhr
Naja das listet ja nur alle Sections hintereinander auf. Aber wenn dir das reicht...

Den aktuellen Section-Bereich für die aktuelle Selection bekommst du so


Bitte warten ..
Mitglied: goodbytes
12.04.2016, aktualisiert um 16:26 Uhr
Hallo jodel32,
vielleicht kannst du mir nochmal helfen, irgendwie hab ich mich verhaspelt.
Die Seitenzahlen bekomme ich auch so. Nun möchte ich in der Kopfzeile jeder Section, in der ich mich gerade befinde, nach dem Suchstring suchen und die folgenden Zeichen (wie oben schon) in der Variable speichern. Ich hab die Suche jetzt in eine Function gepackt, glaub so ist es übersichtlicher.


Wo liegt da nun noch mein Fehler?
Danke schon mal im voraus! :-) face-smile
Bitte warten ..
Mitglied: goodbytes
18.04.2016 um 11:16 Uhr
Mit den Collections komme ich an der Stelle nicht mehr weiter. Die Seitenzahlen für die pdf-Erstellung bekomme ich nun korrekt, mittels der Funktion "StringSearch" möchte ich nun aus der Kopfzeile der ersten Seite dieser Section den SuchString ziehen, da ich ihn für den Dateiname brauche. Aber irgendwie steckt da noch ein Fehler drin. Was mache ich da falsch?

Gruß Torsten
Bitte warten ..
Mitglied: goodbytes
25.04.2016, aktualisiert um 17:29 Uhr
So kann ich ja den Suchstring in den Kopfzeilen finden.

Ich habe aber hier in der "Do While"-Schleife nicht die Möglichkeit bestimmte Zeichen (von-bis) nach dem Suchstring in eine Variable zu speichern, da hier irgendwas in der Art: Range(Selection.End + 1, Selection.End + 13).Text nicht funktioniert, da ich mich hier nicht an der Position des gefunden Suchstrings befindet, sondern in der gesamten Selection, also der Kopfzeile.

Wie komme ich hier an den Text nach dem gefundenen Suchstring? "Select" usw. gibt es hier nicht.
Bitte warten ..
Heiß diskutierte Inhalte
Windows 10
Windows 10 Geschwindigkeitprobleme trotz viel mehr Gb Ram
Matthes88Vor 13 StundenFrageWindows 1036 Kommentare

Hallo ihr lieben aaaalso : Da mein neuer Arbeitsspeicher (32gb) von meiner alten Windows 7 version (max mit 8gb kompatibel) nicht angenommen wurde, habe ...

Off Topic
Realistische Gehaltsvorstellung für eine "IT-Allroundkraft"
gelöst JiggyLeeVor 8 StundenFrageOff Topic16 Kommentare

Hallo an alle, ich hege momentan den Wunsch mich von der alten verstaubten Behörden Bürokratie und langweiliger Aufgaben los zu lösen und in einem ...

Windows Userverwaltung
Account Aktivierung über VPN
Phill93Vor 1 TagFrageWindows Userverwaltung3 Kommentare

Hallo, ich muss mir für eine RDP Umgebung für einen Verein eine Lösung für die Account Aktivierung ausdenken. Meine Idee ist die folgende: 1. ...

Switche und Hubs
Suche Deutsche Sprachdatei für D-Link DGS-1210-24 D1 Switch
gelöst Oggy01Vor 1 TagFrageSwitche und Hubs8 Kommentare

Hallo, ich habe einen D-Link DGS-1210-24 Vers. D1 Switch bekommen und suche für diesen eine Deutsche Sprachdatei. Die Firmware ist auf dem aktuellen Stand ...

Humor (lol)
Tipp: Dinge, die man besser nicht klaut
altmetallerVor 9 StundenTippHumor (lol)8 Kommentare

Hallo, so wurde meiner Hündin z.B. heute der (eingeschaltete) GPS-Tracker mit Mobilfunkanbindung quasi "direkt vom Halsband weggefunden". Akku hatte noch 60% :-P Und ich ...

Video & Streaming
Videoaufnahme funktioniert nur bis zum ersten Reboot (0x80040217)
IllusionFACTORYVor 1 TagFrageVideo & Streaming10 Kommentare

Ich nehme über eine Video-Software von einem USB-Hardware-Encoder Video auf. Das funktioniert exakt bis zum ersten Reboot - danach bekomme ich beim Starten der ...

Windows Server
GPU Passthrough HYPER-V 2019
bintesVor 1 TagFrageWindows Server7 Kommentare

Hallo, ich habe ein ein Problem mit der Bereitstellung einer Grafikkarte an eine virtuelle Maschine. Hardware: - HPE ProLiant DL380 Gen9 V4 Rack Server ...

Windows Server
Windows Admin Center DC
maximidVor 1 TagFrageWindows Server3 Kommentare

Hallo, ich hätte mal eine Frage zu Windows Admin Center und zwar schaue ich es mir aktuell etwas an da mir die zentrale Verwaltung ...