Makros


Toolbar von MS Word
Toolbar von MS Word

texManager unterstützt die volle Visual Basic Makrofunktionalität von Microsoft Word. Eine riesige Funktionsbibliothek, die keine Wünsche offenlässt. Mit eigener Programmieroberfläche, Editoren und einem Makro- Rekorder. Von personalisierten Anreden bis zur automatisierten Dokumentengenerierung und Datenbankenzugriffen ist alles möglich. Darüber gibt es jede Menge frei verfügbare Literatur im Internet oder in der Word-Dokumentation. Mit Hilfe von Makros lässt sich der Funktionsumfang des texManagers individuell erweitern.

Jedem Textbaustein kann ein eigenes Makro zugeordnet werden. Der Bezeichnung ist frei wählbar.  Der in MS Word integrierte Makro-Rekorder kann benutzt werden, um eigene Makros kinderleicht zu erstellen. Einfach die Mausbewegungen und Eingaben aufzeichnen und den Makronamen in das Feld <Makro> in den Textbaustein-Stammdaten des entsprechenden Bausteins einfügen. Fertig! 

 

Der Makrorecorder erstellt einen VBA-Programmcode, der auf Wunsch nachbearbeitet und erweitert werden kann. Hier steht der komplette Funktionsumfang der mächtigen Programmiersprache Visual Basic for Application zur Verfügung. Textbausteineinträge mit hinterlegtem Makro bekommen ein rotes Symbol.
Der Makro-Code selbst bleibt in Word gespeichert, zum Beispiel in einer globalen Wordvorlage. Im texManger wird nur die Bezeichnung des Makros abgelegt.

Textbaustein-Stammdaten
Textbaustein-Stammdaten

Makrovorlagen / Globale Vorlagen

Damit das Makro immer verfügbar ist, sollte man dieses in einer globalen Wordvorlage speichern. Wordvorlagen haben immer die Endung DOTM (Z.B. MyMacros.dotm). Diese globale Vorlage muss in den StartUp-Ordner von Microsoft kopiert werden. Z.B. C:\Users\<Benutzername>\AppData\Roaming\Microsoft\Word\STARTUP.

Hierdurch wird sichergestellt, dass die Makros in der Vorlage automatisch nach dem Start von Word, als Add-In, zur Verfügung stehen.

 

Alternativ kann die Wordvorlage, auch über einen entsprechenden VBA-Code, bei Bedarf nachgeladen werden. Z.B.:  "AddIns("C:\Users\Meier001\MyTemplates\MyMacros.dotm") .Installed = True".

texManager API

Es besteht zusätzlich die Möglichkeit aus dem VBA Code heraus die API des texManagers direkt anzusprechen, um eine nahtlose Integration in eigenen Programmcodes zu ermöglichen. Diese VBA-Makros können nicht nur jedem Textbaustein, sondern auch komplette Textbausteinlisten (Kombinationstexte) aufrufen.

 

Das Makro muss in der aktuellen bzw. einer globalen Dokumentenvorlage oder in der Normal.dotm von Word gespeichert werden. Wenn ein Textbaustein mit einem hinterlegten Makro in Word eingefügt wird, sucht der texManager nach dem entsprechenden Makro und führt es aus.

 

Der texManager wir mit ein paar vordefinierten Makros ausgeliefert z.B.:

 

tm_Placeholder():
Ersetzt einen Platzhalter mit einem Textbaustein. Diese Makro wird für die Verkettung von Textphrasen genutzt.

 

tm_Skip_End():

Platziert den Cursor an das Ende des Dokuments.

 

tm_UpdateSource():

Aktualisiert bei verknüpften Objekten im Text die Quelldatei mit den entsprechenden geänderten Inhalten.

 

tm_Cut_Fields():

Entfernt die Verknüpfung von Objekten wie z.B. Felder. Änderungen in der verbundenen Datenquelle werden nicht mehr an die Felder im Text übertragen.


tm_Cut_MM_Fields():

Entfernt alle Verknüpfungen zu Seriendruck-Feldern.

 

tm_Update_Fields():

Aktualisiert verknüpfte Objekte im Text mit den Inhalten der Quelle, wie z.B. bei Feldern oder passiven Excel-Verlinkungen.

 

tm_FeldFktAn():

Zeigt die Feldfunktionen im Text an.

 

tm_FeldFktAus():

Versteckt die Feldfunktionen im Text.

 

SendToOutlook():

Kopiert den Inhalt eines geöffneten Dokuments in eine geöffnete Outlook-E-Mail und schließt dann dieses.

 

tmInsertOutlook() (ab Version 6.x)

Den Text aus einem aktuell geöffnetten Word-Dokument eine offene Outlook-Task übergeben (E-Mail/ Aufgabe / Kalender).

 

tmInsertOutlook2() (ab Version 6.x)

Genauso wie tmInsertOutlook(), nur das zusätzlich das Word-Dokument automatisch geschlossen wird.

 

NoCr():

Entfernt einen Zeilenumbruch.

 

NoCrLF():

Fügt den Inhalt der Zwischenablage (Textbaustein) ein und entfernt einen Zeilenumbruch.

 

tm_Skip_End():
Diese Makro sorgt dafür, dass der Cursor an das Ende des aktuellen Dokuments springt.

 

tm_UpdateToc():

Das Inhaltsverzeichnis des aktuellen Dokuments wird aktualisiert

 

tm_NewHeader

Neue Kopfzeile einfügen

 

tm_NewHeader2

Neue Kopfzeile einfügen und Verbindung zur vorherigen Kopfzeilen löschen

 

 

 

tm_HeaderSwitchLS

Abschnittswechsel mit Seitenausrichtung Hochformat.

 

tm_HeaderSwitchPT

Abschnittswechsel mit Seitenausrichtung Querformat.

 

 

Hinweis:

Wenn einem Textbaustein ein Formular zugeordnet wurde, wird kein Makro ausgeführt!

Wichtig:
Die Makroausführung aus dem texManager heraus kann wie folgt beeinflusst werden:
Wenn beim Makronamen kein Vorzeichen angegeben wird (Standardeinstellung z.B. MyMakro), wird zuerst der Textbaustein eingefügt und danach das Makro ausgeführt. Wenn zuerst ein Pluszeichen (+) am Anfang des Makronamens erscheint z.B. "+MyMakro", wird erst das Makro ausgeführt und anschließend der Text eingefügt. Wenn vor dem Makronamen ein Minuszeichen ( -) eingeben wird, z.B. "-MyMakro", dann wird kein Text eingefügt, sondern nur das Makro ausgeführt.

Makros mit Parametern

Mit der Textbausteinverwaltung und auch mit dem Dokumentengenerator können VBA-Makros mit Parametern aufgerufen werden. So können spezifische Informationen vom texManager an die Makros übergeben und der Ablauf individuell gesteuert werden.

Einfach hinter dem Makronamen in Klammern die Parameter angeben. Es können bis zu 4 Parameter übergeben werden. Dabei ist der erste Parameter standardmäßig für die Bezeichnugen des Textbausteins reserviert.

Zum Beispiel: MYMakro(TBNAME,tmPreise,TC4556,true)


Sub MYMakro(textBlock, textMarkePreis, Typ, NS)
   lok = Selection.GoTo(wdGoToBookmark, textMarkePreis)

   If lok Then
       Selection.TypeText (Typ)
   
       If textBlock = "F:\TMP\Intro.docx" Then
          Selection.InsertFile FileName:=textBlock, Range:="", _
          ConfirmConversions:=False, Link:=False, Attachment:=False
       End If

   End If
 
   If NS = "true" Then
      Selection.InsertBreak Type:=wdPageBreak
   End If
   
End Sub

Makro-Code

Beispiel-Makro: Daten aus einer Access Datenbank abrufen:
Dieser Code wurde automatisch mit dem Makro-Recorder von Microsoft-Word erstellt.

Weitere Informationen zur VBA-Programmiersprache finden Sie in der entsprechenden Word-Dokumentation oder fragen Sie uns.

 

Sub Demo_Database_Zugriff()
Dim cDemoDatabase As String

 

Speicherort der Datenbank:

 cDemoDatabase = "C:\texManagerDemo\texManager\Example\Angebote.mdb"
 

Zugriff auf die Datenbank mit SQL Befehl:
 ActiveDocument.MailMerge.OpenDataSource Name:=cDemoDatabase, _

 ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
 PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
 WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
 Connection:= _
 "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source= cDemoDatabase;Mode=Read;

 Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine 

 Type=6;Jet OLEDB:Database Locking Mode=0;Jet " _

 , SQLStatement:="SELECT * FROM `Office Address List`", SQLStatement1:="", _

 SubType:=wdMergeSubTypeOAL
  

Anzeige der gefundenen Datensätze:    
Application.Dialogs(wdDialogMailMergeRecipients).Show

 

Inhalt der Platzhalter (Seriendruck-Felder) im Text mit den Daten füllen:

ActiveDocument.MailMerge.ViewMailMergeFieldCodes = False
ActiveDocument.MailMerge.MainDocumentType = wdNotAMergeDocument

Application.Run ("tm_Cut_MM_Fields")

 

End Sub

 

API - COM-Schnittstelle des texManagers

tmWord Klasse


Methoden:

Suche(<cTbKurz>)
Argumente:
cTbKurz = Textbaustein-Kurzbezeichnung

Eigenschaften:
nFound = 1 // Gefunden, Textbaustein wird in die Zwischenablage kopiert
nFound = 2 // Gefunden, verknüpfter Baustein oder Kombinationstext werden eingefügt
nFound = 0 // Nicht gefunden

Zweck:
Textbaustein über die Kurzbezeichnung suchen und in die Zwischenablage kopieren oder bei verknüpften Textbausteinen und Kombinationstexten diese an die aktuelle Cursorposition einfügen.
Es wird die aktuell im texManager geladene Textbaustein-Datenbank genutzt.

 

InsertTextbl(cSuche,cDatenbank,[oDokument])

Argumente:
cSuche = Textbaustein-Kurzbezeichnung

cDatenbank = Textbaustein-Datenbankname (ohne Pfad)
oDokument = aktuelles Dokumentenobject (z.B. ActiveDocument)

 

Eigenschaften:
nFound = 1 // Gefunden, Textbaustein wird in die Zwischenablage kopiert
nFound = 2 // Gefunden, verknüpfter Baustein oder Kombinationstext werden eingefügt
nFound = 0 // Nicht gefunden

 

Zweck:
Textbaustein in der Datenbank <cDatenbank> über die Kurzbezeichnung suchen und in die Zwischenablage kopieren oder bei verknüpften Textbausteinen und Kombinationstexten diese an die aktuelle Cursorposition einfügen.

 

tbListe(<cTbKurz>)
Argumente:
cTbKurz = Textbaustein-Kurzbezeichnung

Eigenschaften:
nFound = 1 // Gefunden, Textbaustein wird in die Zwischenablage kopiert
nFound = 2 // Gefunden, verknüpfter Baustein oder Kombinationstext werden eingefügt
nFound = 0 // Nicht gefunden

Zweck:
Kombinationsliste über die Kurzbezeichnung suchen und in die Zwischenablage kopieren oder bei verknüpften Textbausteinen und Kombinationstexten diese an die aktuelle Cursorposition einfügen.

AddText()
Argumente:
Keine

Eigenschaften:
lOk = true // Neuer Textbaustein wurde erfolgreich angelegt
lOk = false // Neuanlage ist fehlgeschlagen

Zweck:
Markierten Text als Textbaustein abspeichern. Die Auswahl der Datenbank und Position wird über einen Dialog gesteuert.

Ende()
Argumente:
Keine

Eigenschaften:
Keine

Zweck:
Automationsserver beenden

 

SearchTbSql(cSuch, cDatenbank, cSuchfeld)

Argumente:
cSuche = Textbaustein-Kurzbezeichnung

cDatenbank = Textbaustein-Datenbankname (ohne Pfad)

cSuchFeld = Datenbank-Feldname

- <NAME> = Textbausteinbezeichnung, <SNAME> =Textbausteinkurzbezeichnung

Rückgabe: Zweidimensionales Array mit Textbaustein-Kurzbezeichnung und Textbaustein-Bezeichnung

Hinweis: Nur ein Joker (*) im Suchfeld  sorgt dafür, dass alle Textbausteinnamen zurückgegeben werden.

 

GetTbFileNames(cSuch, cDatenbank, cSuchfeld) (ab Version 6.x)

Argumente:
cSuche = Textbaustein-Kurzbezeichnung

cDatenbank = Textbaustein-Datenbankname (ohne Pfad)

cSuchFeld = Datenbank-Feldname

- <NAME> = Textbausteinbezeichnung, <SNAME> =Textbausteinkurzbezeichnung

Rückgabe: Eindimensionales Array mit Textbaustein-Dateinamen inkl. Pfad

gilt nur für veknüpfte Textbausteine

 
Beispiele (VBA):

Sub tmSuche  // Textbaustein suchen und einfügen
Dim cSuche
Dim tmWord As Object
Dim nSeek As Byte

Set tmWord = CreateObject("tmWord.Server")
tmWord.Suche (cSuche)
nSeek = tmWord.nFound

If nSeek = 1 Then
    Selection.Paste
End If

End Sub


Sub tmAddTB()  // Textbaustein anlegen
Dim tmWord As Object
Dim lOk As Boolean
On Error Resume Next

 

If Len(Selection.Text) < 2 Then
   MsgBox ("Bitte zuerst den Text markieren")
   Exit Sub
End If

 

Selection.Copy
Set tmWord = CreateObject("tmWord.Server")
tmWord.AddText
lOk = tmWord.lOk

If lOk Then
    Selection.MoveDown Unit:=wdLine, Count:=1
Else
    lOk = MsgBox("Der Text konnte nicht gespeichert werden!", vbCritical, "Achtung")
End If

End Sub

 

Sub GetTextblockNames()
Dim tmWord As Object
Dim aSearch() As Variant
Dim cFileName As String
Dim nHits As Integer

Set tmWord = CreateObject("tmWord.Server")
aSearch = tmWord.GetTbFileNames("bau*", "Construction", "NAME")

If aSearch(1) = "" Then
    Exit Sub
End If

nHits = UBound(aSearch) - LBound(aSearch) + 1

For nX = 1 To nHits
    cFileName = aSearch(nX)

    Selection.InsertFile FileName:=cFileName, Range:="", _
    ConfirmConversions:=False, Link:=False, Attachment:=False
Next nX

End Sub

 

 

Sub Textbausteinliste()
Dim i As Integer
Dim cBausteinBez As String
Dim cBausteinKurzBez As String
Dim cAusgabe As String

Set tmWord = CreateObject("tmWord.Server")
aSearch = tmWord.SearchTbSql("*", "ExampleDb", "NAME") ' Alle Textbausteine
Rem aSearch = tmWord.SearchTbSql("Beispiel*", "ExampleDb", "NAME") `Alle Bausteine die mit "Beispiel" beginnen

If aSearch(1, 2) = "" Then
   Exit Sub
End If

nHits = UBound(aSearch) - LBound(aSearch) + 1

For i = 1 To nHits
    
    cBausteinKurzBez = aSearch(i, 1)
    cBausteinBez = aSearch(i, 2)
    
    cAusgabe = RTrim(cBausteinBez) + " / " + RTrim(cBausteinKurzBez) & vbNewLine
    Selection.InsertAfter (cAusgabe)
Next i
End Sub

 

Auf Wunsch erweitern wir die texManager API um weitere Funktionen. Sprechen Sie uns an!