Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: -> 16. Juni: Office-Treffen in Düsseldorf <-
Multiple Indices
zurück: Kombinationsfeld weiter: email aus Formular mit Button Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback
Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
lugra
Einsteiger


Verfasst am:
22. Jun 2009, 15:18
Rufname:
Wohnort: Basel

Multiple Indices - Multiple Indices

Nach oben
       Version: Office 2007

Hallo,

ich möchte gerne in einem längeren Worddokument mehrere Indices eintragen. Ausgangslage ist ein 300-seitiges Word 2007 Dokument mit farblich beleuchteten Wörtern/Begriffen:

türkis beleuchtet = Personenverzeichnis
rot beleuchtet = Ortsverzeichnis
gelb beleuchtet = Sachverzeichnis
-> mit "beleuchtet" meine ich die Texthervorhebungsfarbe

Da ich bisher keine befriedigende Lösung finden konnte, versuchte ich mich selber in VBA-Programmierung -- mein erstes Projekt. Leider bricht mein Skript mit Laufzeitfehler 5850 ab:

Code:

Sub MultipleIndices()

'Makro zur Erstellung von mehrere (z.Z. 3) Indices
'Die Einträge müssen farblich markiert sein


'Farbdefinitionen
'****************

Const wdRot = wdColorRed
Const wdTurkis = 3
Const wdGelb = 6
Const wdKeinhighlight = 0


'zugehörige Indextypen
'*********************

Const TypRot = "Ortsverzeichnis"
Const TypTurkis = "Personenverzeichnis"
Const TypGelb = "Sachverzeichnis"


'Word-Dokument
'*************

Const Pfad = "H:\VBA\"
Const Datei = "Lorem"
Const Endung = ".docx"


'Variablen
'*********

Dim Eintrag     As String
Dim AnzRot      As Integer
Dim AnzTurkis   As Integer
Dim AnzGelb     As Integer


'Öffnen des Dokumentes
'*********************

Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Open(Pfad & Datei & Endung)
Set objRange = objDoc.Range

'Suchen der Markierten Wörter
'****************************

objRange.Find.Highlight = True
objRange.Find.Forward = True
AnzRot = 0
AnzTurkis = 0
AnzGelb = 0

'Do While objRange.Find.Execute
'    If objRange.HighlightColorIndex = wdRot Then
'        objRange.HighlightColorIndex = wdKeinhighlight
'
'        Eintrag = objRange
'
'        objDoc.Indexes.MarkEntry Range:=Selection.Range, Entry:= _
'            TypRot & ":" & Eintrag, EntryAutoText:=TypRot & ":" & Eintrag, _
'            CrossReference:="", CrossReferenceAutoText:="", BookmarkName:="", Bold:= _
'            False, Italic:=False
'
'        AnzTurkis = AnzRot + 1
'
'    End If
'    intPosition = objRange.End
'    objRange.Start = intPosition
'Loop

Do While objRange.Find.Execute
    If objRange.HighlightColorIndex = wdTurkis Then
        objRange.HighlightColorIndex = wdKeinhighlight
       
        Eintrag = objRange
       
        objDoc.Indexes.MarkEntry Range:=Selection.Range, Entry:= _
            TypTurkis & ":" & Eintrag, EntryAutoText:=TypTurkis & ":" & Eintrag, _
            CrossReference:="", CrossReferenceAutoText:="", BookmarkName:="", Bold:= _
            False, Italic:=False
           
        AnzTurkis = AnzTurkis + 1

    End If
    intPosition = objRange.End
    objRange.Start = intPosition
Loop

'Do While objRange.Find.Execute
'    If objRange.HighlightColorIndex = wdGelb Then
'        objRange.HighlightColorIndex = wdKeinhighlight
'
'        Eintrag = objRange
'
'        objDoc.Indexes.MarkEntry Range:=Selection.Range, Entry:= _
'            TypGelb & ":" & Eintrag, EntryAutoText:=TypGelb & ":" & Eintrag, _
'            CrossReference:="", CrossReferenceAutoText:="", BookmarkName:="", Bold:= _
'            False, Italic:=False
'
'        AnzTurkis = AnzGelb + 1
'
'    End If
''    intPosition = objRange.End
'    objRange.Start = intPosition
'Loop


'Ausgabebox mit Informationen
'****************************

MsgBox Prompt:="Es wurden " & AnzTurkis & " Einträge ins Personenverzeichnis, " & AnzRot & " Einträge ins Ortsverzeichnis und " & AnzGelb & " Einträge ins Sachverzeichnis eingefügt.", Title:="LugraSkript", Buttons:=vbInformation

'Speichern und schliessen
'************************

objDoc.SaveAs FileName:=Pfad & Datei & "mitIndices" & Endung
objDoc.Close

End Sub


Der Fehler tritt in der Zeile mit
Code:
objDoc.Indexes.MarkEntry
auf. Ich denke, dass die Anwendung auf das aktuelle Dokument objDoc nicht auf diese Weise gemacht werden kann. Kann mir da jemand einen Tipp geben?

Vielen Dank!
- Lukas
lugra
Einsteiger


Verfasst am:
24. Jun 2009, 08:44
Rufname:
Wohnort: Basel


AW: Multiple Indices - AW: Multiple Indices

Nach oben
       Version: Office 2007

Eine kleine Ergänzung zu meiner ursprünglichen Frage: Ersetze ich die Zeile
Code:
Set objDoc = objWord.Documents.Open(Pfad & Datei & Endung)
durch
Code:
Set objDoc = ActiveDocument
so läuft das VBA ohne Laufzeitfehler durch, wenn auch mit dem Nachteil, dass ich damit das Makro in das zu bearbeitende Dokument kopieren muss. Allerdings ist noch ein Fehler im Programm: Die Indexeinträge werden nicht nach jedem markierten Wort/Ausdruck eingefügt, sondern alle genau dort, wo sich zu Beginn der Cursor befand, also beispielsweise am Anfang des Dokumentes. Kann mir diesbezüglich jemand weiterhelfen?

- Lukas
lugra
Einsteiger


Verfasst am:
26. Jun 2009, 08:38
Rufname:
Wohnort: Basel

AW: Multiple Indices - AW: Multiple Indices

Nach oben
       Version: Office 2007

Hmm, hat mir gar niemand einen Vorschlag? Wahrscheinlich ist die Frage zu schwierig, zu einfach oder einfach zu langweilig... Confused

- Lukas
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
26. Jun 2009, 22:21
Rufname:
Wohnort: Leipzig

AW: Multiple Indices - AW: Multiple Indices

Nach oben
       Version: Office 2007

Hallo Lukas,

Du kannst ActiveDocument auch verwenden, ohne das Makro in das Dokument zu kopieren. Speicher das Makro in einer Dokumentvorlage, die Dokumentvorlage natürlich im Vorlagenverzeichnis von Word abspeichern.
Dann weise dem Dokument diese Dokumentvorlage explizit zu. Danach hat das Dokument Zugriff auf die in der Dokumentvorlage vorhandenen Makros, ActiveDocument liefert dann einen Zeiger auf das Dokument (nicht auf die Dokumentvorlage), ohne dass das Dokument selbst irgendwelchen Code enthalten muss. Das ist übrigens die Standardvorgehensweise in Word.

(Nur nebenbei: Will man in dieser Konstellation explizit die Vorlage ansprechen, müsste man ThisDocument verwenden.)

Gruß
Lisa
lugra
Einsteiger


Verfasst am:
27. Jun 2009, 11:45
Rufname:
Wohnort: Basel

AW: Multiple Indices - AW: Multiple Indices

Nach oben
       Version: Office 2007

Hallo Lisa,

vielen Dank für den Tipp. Das funktioniert ausgezeichnet. Ich war mir nicht bewusst, dass dies die Standardvorgehensweise ist. (Ich dachte, dass ich mir eher eine separate *.docm-Datei mit all meinen Makros anlegen sollte.)

Das Skript läuft nun grundsätzlich, macht aber eines noch falsch: Alle Indexeinträge erfolgen an der Stelle, wo gerade der Cursor stand, als das Skript aufgerufen wurde. Stattdessen sollten sie natürlich jeweils gerade nach dem indizierten Wort/Ausdruck erfolgen. Da habe ich wohl noch einen Überlegungsfehler gemacht...?

Vielen Dank & Grüsse,
Lukas
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
27. Jun 2009, 13:23
Rufname:
Wohnort: Leipzig

AW: Multiple Indices - AW: Multiple Indices

Nach oben
       Version: Office 2007

Hallo Lukas,

ja, das ist klar. Die Quelle des Indexeintrags wird mit der Range-Eigenschaft festgelegt:
Code:
objDoc.Indexes.MarkEntry Range:=Selection.Range, Entry:= _
            TypTurkis & ":" & Eintrag, EntryAutoText:=TypTurkis & ":" & Eintrag, _
            CrossReference:="", CrossReferenceAutoText:="", BookmarkName:="", Bold:= _
            False, Italic:=False

Bei Dir steht immer:
Code:
Range:=Selection.Range

Das ist die Stelle, an der die aktuelle Markierung zu Beginn stand (die Selection). Dort sollte etwa stehen:
Code:
Range:=Eintrag

damit es sich wirklich auf den gefundenen Ort bezieht.

Ansonsten vielleicht noch zur Erläuterung: Jedes Dokument, das einen Verweis auf eine Dokumentvorlage erhält, kann auf alle in der Dokumentvorlage gespeicherten Makros, Schnellbausteine, Formatvorlagen usw. zugreifen. Die "Standardvorgehensweise" bezieht sich darauf, dass man ein neues Dokument gleich aus der Vorlage erstellt (über Datei - Neu und Auswahl der Vorlage). Damit hat man bereits den Verweis, hat ein sauberes Dokument ohne Code und natürlich auch mit allem statischen Text, der evtl. in der Dokumentvorlage hinterlegt ist.

Weiter gibt es noch sogenannte globale AddIns. Ein globales AddIn ist auch eine Dokumentvorlage, die jedoch nicht im Vorlagenverzeichnis von Word, sondern im AutoStart-Verzeichnis (Startup-Verzeichnis) gespeichert wird. Mit diesem Speicherort wird sichergestellt, dass dieses AddIn (Vorlage) beim Start von Word geladen wird. Seine Schnellbausteine und Makros stehen allen Word-Dokumenten in der aktuellen Sitzung zur Verfügung. Ein AddIn kann also so etwas wie eine Code-Bibliothek sein. Das ist durchaus auch sinnvoll.

Ich habe für mich da durchaus eine Struktur. Es gibt ein globales AddIn, das den Code, Userforms und Autotexte enthält, die ich IMMER zur Verfügung haben will. Zusätzlich gibt es einzelne Dokumentvorlagen, die nur den Code/Bausteine enthalten, der nur in den Dokumenten benötigt wird, die aus dieser Dok-Vorlage erzeugt werden. Es lohnt sich durchaus, darüber nachzudenken, wo welcher Code wirklich benötigt wird.

Und zur Vollständigkeit: Es gibt außerdem noch COM-AddIns, die nicht in Word erzeugt werden, sondern mit Fremdanwendungen (etwa VSTO), diese enthalten dann kompilierten Code, der nur benutzt werden kann.

Gruß
Lisa
lugra
Einsteiger


Verfasst am:
29. Jun 2009, 09:11
Rufname:
Wohnort: Basel


AW: Multiple Indices - AW: Multiple Indices

Nach oben
       Version: Office 2007

Hallo Lisa,

vielen Dank für alle Erklärungen, auch jene über die AddIns (klingt praktisch!).

Du hast den Fehler genau gefunden. Allerdings muss es nicht Range:=Eintrag sondern
Code:
Range:=objRange
heissen. An einem kleinen Textdokument konnte ich es bereits überprüfen und es funktioniert ausgzeichnet! Heute steht nun der Test am Buch mit 300 Seiten mit insgesamt über 3000 Indexeinträgen bevor.

Mit den Farbdefinitionen stehe ich noch ein wenig auf Kriegsfuss, aber das bekomme ich noch hin. Sobald das Skript dann ganz perfekt funktioniert, poste ich es nochmals komplett hier ins Forum, damit alle etwas davon haben.

Danke für Deine Hilfe & viele Grüsse,
Lukas
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Word Gestaltungselemente: Zwei Indices mit 2 verschiedenen Formatvorlagen? 0 aporo 67 09. Feb 2012, 19:03
aporo Zwei Indices mit 2 verschiedenen Formatvorlagen?
Keine neuen Beiträge Word Hilfe: csv Liste für Multiple Choice per reguläre Ausdrücke aufbere 1 officmania 209 27. Dez 2011, 20:44
CaBe csv Liste für Multiple Choice per reguläre Ausdrücke aufbere
Keine neuen Beiträge Word Hilfe: Multiple Word 2007 Dokumente zusammenfassen 4 pschwimmer 665 11. Okt 2011, 23:27
MarkMH_K Multiple Word 2007 Dokumente zusammenfassen
Keine neuen Beiträge Word Gestaltungselemente: Formeleditor und Indices?! 3 Houser01 9357 18. Jun 2010, 19:56
Gast Formeleditor und Indices?!
Keine neuen Beiträge Word Serienbriefe: Karteikarten erstellen für Multiple Choice 4 officmania 2623 22. Apr 2010, 22:15
officmania Karteikarten erstellen für Multiple Choice
Keine neuen Beiträge Word Gestaltungselemente: 2 Indices mittels Referenzdatei 2 holgpadd 646 30. Mai 2008, 15:47
holgpadd 2 Indices mittels Referenzdatei
Keine neuen Beiträge Word Gestaltungselemente: Indices erstellen in Word 2002 2 PCwut 2067 02. Mai 2007, 09:06
PCwut Indices erstellen in Word 2002
Keine neuen Beiträge Word Gestaltungselemente: Multiple Joice in Word! 1 Der liebe gute Sven 1167 26. März 2007, 17:22
Chris1969 Multiple Joice in Word!
Keine neuen Beiträge Word VBA Programmierung (Makros): Office 2000 - Makro - Multiple Choice - Textfeld einfügen 3 MCYo1 3031 03. Feb 2005, 13:02
MCYo1 Office 2000 - Makro - Multiple Choice - Textfeld einfügen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Dreamweaver Forum