Aktuelle Seite:
/vba/vbalesezeichen.htm
Letzte Änderung: 24.06.2006

Getestet unter Word97Getestet unter Word2000  
Makro/Datei speichern
Print

In der VBA-IDE gibt es die praktischen Lesezeichen, zum schnelleren Navigieren zwischen verschiedenen Zeilen. Diese Lesezeichen sind besonders bei umfangreichen Makros/Projekten hilfreich, wenn z.B. verschiedene Stellen verglichen werden sollen.

Setzen&Entfernen/Nächstes/Vorheriges/Alle Löschen

In Word existieren diese Lesezeichen nicht direkt und der Umweg über manuelle Textmarken ist nicht wirklich praktisch. Mit Hilfe einiger Makros lässt sich diese Funktionalität aber auch in Word-Dokumente einbinden.
Die verwendeten Makros arbeiten dabei folgendermaßen:

  • Prüfen, ob in der aktuellen Zeile bereits ein Lesezeichen gesetzt ist,
  • Ist bereits ein Lesezeichen gesetzt, wird dieses gelöscht,
  • Neues Lesezeichen setzen, dazu
    • Bild über den Text liegend einfügen
    • Bild mit der aktuellen Zeile verankern
    • Textmarke zusammen mit Seitenzahl und Zeilenzahl generieren
    • Textmarke einfügen
  • Navigation zwischen den Lesezeichen:
    • Range-Bereich von der aktuellen Position bis zum Textende/Textanfang festlegen
    • Range-Bereich auf Textmarken prüfen
    • Nächste Textmarke auf Aufbau prüfen
    • ggf. zur Textmarke springen
  • Alle Lesezeichen löschen:
    • Alle Textmarken auf Aufbau prüfen und ggf. löschen
    • Zum Lesezeichen gehörendes Bild löschen

Der folgende Auszug aus dem zur Verfügung stehenden Modul setzt ein neues Lesezeichen, sofern noch kein Lesezeichen vorhanden ist.
Wichtig dabei ist, dass der Pfad zum Lesezeichen-Symbol im Makro korrekt gesetzt ist!

Sub MarkeSetzen()  
Dim i, j As Integer 
Dim sFilename, sTMName As String 
On Error GoTo ende
' Bereits eine Marke vorhanden?  
If Not MarkeLoeschen Then 
' Pfad zum Lesezeichen-Symbol. Ggf. anpassen
  ChangeFileOpenDirectory "D:\Lesezeichen\"
  sFilename = "D:\Lesezeichen\set.gif"
  Set shp = ActiveDocument.Shapes.AddPicture(FileName:=sFilename, _
    LinkToFile:=False, SaveWithDocument:=True, Anchor:=Selection.Range)
  'Bild positionieren  
  PositionierenMarke
  'Textmarke und Bild setzen  
  If Len(Selection.Range.Text) > 0 Then 
    Selection.Range.Collapse Direction:=wdCollapseEnd 
  End If 
  sTMName = "_TM_" & Selection.Information(wdActiveEndAdjustedPageNumber) & _
    Selection.Information(wdFirstCharacterLineNumber)
  Selection.Bookmarks.Add Name:=sTMName, Range:=Selection.Range
End If 
ende:
End Sub 

Mit dem Funktionaufruf  MarkeLoeschen wird geprüft, ob an der aktuellen Position bereits ein Lesezeichen gesetzt ist. Ist dieses der Fall, wird das vorhandene Lesezeichen gelöscht und die Funktion liefert als Ergebnis TRUE zurück. Dieser Rückgabewert wird ausgewertet und nur für den Fall, dass er den Wert FALSE besitzt, wird das Lesezeichen gesetzt.

Function MarkeLoeschen() As Boolean  
Dim i, j, sLine, bLine As Integer
Dim sTrange As Range
Dim myMarke As Bookmark 
Dim sName As String 
MarkeLoeschen = False 
  ActiveDocument.Bookmarks.ShowHidden = True 
  ActiveDocument.Bookmarks.DefaultSorting = wdSortByLocation 
  If Selection.Bookmarks.Count > 0 Then 
    Set sTrange = Selection.Paragraphs(1).Range
      sLine = Selection.Information(wdFirstCharacterLineNumber)
      For Each myMarke In Selection.Bookmarks
        bLine = myMarke.Range.Information(wdFirstCharacterLineNumber)
        sName = myMarke.Name
        If (sName Like "_TM*") And (sLine = bLine) Then 
          Set shp = sTrange.ShapeRange(1)
          ActiveDocument.Bookmarks(sName).Delete
          shp.Delete
          MarkeLoeschen = True 
          Exit For 
        End If 
      Next myMarke
  End If 
End Function 

Das vollständige Modul mit allen Makros und den Symbolen befindet sich in der Download-Datei. In dem Modul ist auch ein Installationsmakro (SymInstall) zur Erstellung der Symbolleiste. Bei der Installation muss der Pfad zu den mitgelieferten Symbolen angegeben werden.


 www.chf-online.de/vba/vbalesezeichen.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)