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.
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".
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.
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
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
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