Visual Basic 6 Nachschlagewerk Pirmin Steiner
![]()
Basierend auf Winword 2000, 2010, 2016 und 2021
Autor: Pirmin Steiner
Aktualisiert: Montag, 24. November 2025
Inhaltsverzeichnis:
Visual Basic 6 Nachschlagewerk Pirmin Steiner
Dokument schliessen ohne
Speichern:
Dokument drucken und
schliessen ohne Speichern:
Markierter Text aus
Dokument in MsgBox ausgeben (markierung):
Markierung von Textmarke
zu Textmarke:
Organisierendialogbox
anzeigen:
Text suchen und wenn
gefunden MsgBox anzeigen:
Textteil aus Variable
lesen und verändern
Ist die Textmarke
vorhanden, dann auf diese springen:
Textmarken aus einem
Dokument lesen und in die Variable strMarksVork speichern:
Textmarken u. DokName
einfügen wenn es diese im aktuellen Dokument nicht gibt:
Alle Textmarken in eine
Variable speichern:
Tabelleninhalte lesen und
in Variable speichern:
Vergleichen von zwei
Variablen:
Bedingungsschleife 2 Bedingung am Schluss der Schlaufe
Feststellen auf welcher
Seite der Cursor sich befindet.
Dokumenteigenschaften mit
Loop ausgeben (ActiveDocument.BuiltInDocumentProperties)
Dokumenteigenschaften
auslesen ohne das Dokument zu öffnen
Benutzerdefinierte
Einstellungen erhalten
Datei mit fortlaufender
Nummer speichern
Datei mit fortlaufender
Nummer speichern 2
In INI-File schreiben und
wieder daraus lesen
OptionenAnsicht in ein
INI-File schreiben und wieder daraus lesen:
Public Sub
OptionenAnsichtLesen()
Public Sub
OptionenAnsichtSchreiben()
Public Sub
OptionenAnsichtEinstellung()
Im Add-Ins überprüfen ob
das generali.dot installiert ist.
Suchen ob es das Wort im
Dokument gibt
Abfragen ob eine Frage mit
Ja oder nein beantwortet wurde.
Subrutine aus einer
Prozedur aufrufen.
Word Assistent aufrufen
mit Text
Default Printer einstellen
und abrufen:
Anhängen und oder Abhängen
der AddIn
Auf welcher Seite steht
der Coursor
Makro nach einer Gewissen
Zeit laufen lassen
Ist ein Dokument im Word
offen?
DokumentNamen / oder
Variable auf count Anzahl erweitern
Dateien in einem Ordner
alle Löschen
Windows Tips holen in eine Variable
Office Assistent Sichtbar
und Animieren
Word Ausblenden oder
Einblenden
Zu einem Datum 3 Jahr dazu
rechnen Neu
Ende Vormonat von einem
Datum Neu
Von einem Datum 3 Jahre
dazu und Ende des Vormonates Neu
Ein Teil von einer
Variable abfragen (Left, Mid, Right)
Ein Dialogbox nur 9
Sekunden anzeigen
MsgBox für 3 Sekunden
einblenden
UserForm nur eine gewisse
Zeit am Bildschirm anzeigen
Beginn- und Endpunkt
definieren u. ohne Markieren formatieren
Inhalt einer Textmarke
ausgeben
Textmarken Inhalt in eine
Variable füllen, mit Zähler
Autotext Name und Inhalt
ausgeben einer Druckvorlage
Suchen Ersetzten im ganzen
Dokument 1
Suchen Ersetzten im ganzen
Dokument 2
Suchen Ersetzten im ganzen
Dokument 3
Variable für andere
Prozeduren und Module mit dem Inhalt verfügbar machen
Mit Loop alle Autotexte
ausgeben
Abhängen der
Sprachabhängigen Autotextvorlage nach dem Editieren
Alle Verwendeten
Formatvorlagen
Alle Formatvorlagen in
einem Dokument
Tabulatoren löschen und
neue setzten
Abfragen Seitenrand und
neu setzen
Suchen Ersetzen mit
Hochkomma "
Fenster "Alle Fenster
in der Taskbar anzeigen" umschalten
Word Warnungen
ausgeschalte und wieder einschalten
Briefdatum auf den Briefen
mit x Tagen erhöhen
Die 2 letzten Editierten
Dokumentnamen in einer ini-Datei ablegen
~Dateien der Add-Ins von
Word löschen
Alle Hyperlinks in einem Dokument entfernen
Hyperlink in Variable laden und bearbeiten
Projektnamen ermitteln und setzen
Variable abfragen ob diese einen bestimmten Wert enthält
Neue Formatvorlage basieren auf der vorherigen erstellen
Ist ein Autotext im
Dokument vorhanden?
AutoText in aktive Dokumentvolage aufnehmen
AutoText aus eignem Template ausgeben
Aus einem Sting die einzelnen Werte auslesen
Prüfen ob ein Ordner existiert
Prüfen ob ein Ordner vorhanden ist und ob er leer ist oder nicht
Ordner erstellen, wenn dieser nicht schon vorhanden ist
Liefert den Pfadseparator vom Pfad (z.B. / oder \)
Vertikales und Horizontales Lineal im Winword wieder anzeigen lassen
Nummerisch oder handelt es sich um ein Datum
Datei ohne Extension (z.B. .doc oder .dot) in eine Variable packen InStr-Funktion
Dateiendung einer Datei
ermitteln
Active Directory
Informationen des angemeldeten Benutzers lesen
Datei Move / Datei verschieben
Welche Position hat eine Textmarke (Nummerierung nach Position im
Dokument)
Abfragen ob ein Laufwerk besteht
Wörter suchen (Rückgabe die Anzahl wie viele mal das gesuchte Wort
vorkommt)
Zeichen aus Inhalt einer Veriable entfernen
Textmarken neu füllen und dabei erhalten
Feldfunktion lesbar darstellen
Aus einem String letztes
Zeichen enfernen und TM mit neuem Inhalt wieder setzen
Text aus Variablen-Inhalt
entfernen
Word Hidden (unsichtbar)
setzen und wieder aufheben
WordPositionAendern (Alle Fenster gleich anordnen in Position
Normal)
Sprache der Installierten
Office Version abfragen und auch sonstig.
Link aufrufen, je nach
Sprache.
Diverse Infos über PC und
User ... alles was in Dos-Eingabeaufforderung unter Set aufgeführt ist.
Alle Vorlagen in einem
Verzeichnis von .dot in .dotx abspeichern
Pfad zu Dateiname in
Fenstertitel von Word anzeigen.
Verweise des aktuellen
Projektes ermitteln
Ist ein Modul Vorhanden /
Löschen / Importieren / Umbenennen
Datei Suchen und Anzahl
der Seiten auflisten und zusammenzählen
Code für Dokumente in
einem Verzeichnis alle bearbeiten
Kopfzeilen und Fusszeilen
löschen
Alle Felder in Kopfzeilen
und Fusszeilen Aktualisieren
Felder Sperren und wieder
Freigeben (Feldsperre)
Abfragen ob Felder im
Dokument gesperrt sind
Autotext aus aktivem
Template löschen
Text suchen und markieren
im Dokument
Feldfunktion welche in
Textmarke eingepackt ist. Update / Unlink
Abfrage ob das Dokument
schon mit der letzten Änderung gespeichert wurde
Dokumente von der
RecentFiles-Auflistung öffnen
Feststellen, ob ein
Dokument geöffnet ist
Nur die 2 letzten
Dokumente im ini-File ablegen
Löschen von Dateien welche
Schreibgeschützt, Verseteckt unw. sind
Registry ändern für im
Explorer alle Dateien anzeigen.
Öffent den Pfad des
aktuellen Files und markiert das betroffene File
Liestet alle Zeichen des
CHR() auf
Auf ganzem Verzeichnis
alle Druckvorlagen den Drucker Einzugs-Schacht mittels TM festlegen
Auf ganzem Verzeichnis
alle Druckvorlagen mit einem anderen Drucker Einzugs-Schacht versehen
Text in MsgBox rechts
ausrichten
Dataset (Daten in einer
Variable in einzelne Teile aufteilen)
Dataset (Daten aus String
und Unterstring in einzelne Teile aufteilen)
Wie viel Zeichen Hat der
String
Alle Drucker auslesen
(nicht getestet)
Ganzes Dokument in Range
nehmen
Offenes Dokument in E-Mail
setzen inkl. Empfänger
Datum oder Zahl prüfen ob
diese grösser oder kleiner ist 'iif' (Ergebnis in Variable)
Verweise im Projekt
hinzufügen
Modul in Normal.dotm importieren
Modul von einer anderen
Vorlage ins Normal.dotm kopieren
Abfragen ob die Variable
eine Zahl oder Datum enthält
Einzelne Zeichen eines
Strings ersetzen
Inhalt einer Textdatei in
eine Variable speichern
Absatzmarke in markiertem
Text ersetzen
Text aus TXT-Dateien in
einem Dokument auflisten
Wörter Zählen in einem
Dokument
Wörter Zählen von einer
Markierung im Dokument
Texdatei Erstellen und
etwas reinschreiben
Dokumente in den Formaten
.doc, .docx, .docm erstellen
Word Datei als PDF-Datei
abspeichern
Funktion aufrufen und
Variablenwerte mitgeben
Datum in Longdatum
umwandeln nach Sprache
Anzahl Wochen im Jahr mit
VBA errechnen
Anzal Wochen seit einem
Datum ermitteln (DateDiff-Funktion)
Datei kopieren auch wenn
sie geöffnet ist
Excel Mehrere Zellen
markieren mittels Wert in Variable
Dateien von einem
Verzeichnis verarbeiten
Dateien in einem
Verzeichnis sortieren, Liste erstellen, und wenn gewünscht ausdrucken
Add-In in
"Dokumentvorlagen und Add-Ins" suchen und wenn vorhanden löschen
Wörter und Zeichen vom
Dokument zählen
ZeichenZaehlen Absatzmarken zählen
Dateiname aus einem Pfad
extrahieren
Feldfunktion in VBA
erstellen (Fields.Add-Methode)
Nicht verwendete
Formatvorlagen im Dokument löschen
Namen der
benutzerdefinierten Formatvorlagen im Direktfenster ausgeben.
Dokument als Objekt
deklarieren
On Resume Next wieder aufheben
Dokumentvariable in einem
Dokument definieren
Langes Datum in den
verschiedenen Sprachen anhand kurzem Datum erstellen
Abfragen der Speicherorte
für Dateien
Alle AutoTexte in ein Array lesen
Langes Briefdatum (1er
janvier 2019)
Projektname des aktuellen
Dokuments ermitteln
Anzahl Modulen im Aktiven
Dokument zählen
Ganze Ordner und
Unterordner kopieren
Add-Ins auflisten welche
nicht aktiviert sind
Alle Add-Ins unistallieren
/ deaktivieren
MsgBox in den Vordergrund
hohlen vbSystemModal
Bestimmter AutoText aus
Normal.dotm abrufen und wenn vorhanden einfügen
Alle Dateien (Fiels) von
einem bestimmten Typ in ein anderes Verzeichnis verschieben
Zahlen Formatieren inkl.
Funktionsaufruf der Formatierungsdefinition
Herausfinden ob etwas
markiert ist
Leerzeichen durch ein
Geschütztes Leerzeichen ersetzen
Alle PDFs welche in einem
Verzeichnis liegen drucken
Alle Leerzeichen jeweils
vor der Absatzmarke am Ende jedes Absatzes entfernen
Messagebox welche meher
als 1'024 Zeichen anzeigen kann.
Bei Dokument öffnen
automatisch ein E-Mail senden ohne Spuren
Abfragen ob es den
Pfad/Verzeichnis gibt
Text welcher durchgestrichen
ist auf Hidden stellen
Welches ist die Variable
mit dem grössten Inhalt (von 3 Variablen)
Welches ist der grösste
Wert welche eine der 3 Variablen hat
Analisiert welche
Textmarke auf welcher Seite im Dokument steht
ASCII-Code aus einem
Zeichen ermitteln
Textmarken leren
Textmarkeninhalt entfernen und Textmarke wieder leer setzen
Breite der Bilder in einem
Dokument anpassen
Links vom Coursor das Wort
zwischen den Zeichen { und } lesen und ausgeben
Alle Textmarken welche mit
_Hlk..beginnen löschen
DeaktiviereTypographischeAnfuehrungszeichen
Optionen
MsgBox automatisch
geschlossen ohne weiteren Code.
Abfrage Datum ob früher
oder später
Drucker deinstallieren
inkl. Prüfung ob diese installiert sind
Falls noch Offen, Dokument
Template schliessen
Aus Verzeichnis TXT-Files
öffnen und in Winword Dokument einfügen
Alle Unterstriche bei
unterstichenen Kleinbuchstaben von g, q, p, y, j, enfernen
Autotexte von einer
Vorlage in eine andere Kopieren.
VBA Code im Winword mit Syntax-Farben darstellen
Public strSprache As String ' Variable für das ganze Projekt festlegen, mit Inhalt
Dim strMarks () As String ' Dynamisches Datenfeld deklarieren
Dim strDokname As String ' Dynamisches Datenfeld deklarieren
Dim intZähler As Integer ' Dynamisches Datenfeld für Zähler deklarieren
ReDim Preserve strDateien(intZaehler) ' ReDim dynamisch erweitern. Steht vor dem Abfüllen der Variable
Eine Variable für ein ganzes Modul schon mit einem Wert
vorbelegen
Public Const strVordefinierteVariable As String = "Ich bin eine vordefinierte Variable!"
Diese Deklaration steht vor (ausserhalb) der Prozedur
Automatische Makros
Wenn Sie einem Makro einen speziellen Namen geben, können Sie es automatisch ausführen, wenn Sie einen Vorgang wie das Starten von Word oder das Öffnen eines Dokuments ausführen. Word erkennt die folgenden Namen als automatische Makros:
|
Name des
Makros |
Ausführung |
|
Autoexec |
Beim Starten von Word oder Laden einer globalen Vorlage |
|
AutoNeu |
Beim Erstellen eines neuen Dokuments |
|
AutoOpen |
Beim Öffnen eines vorhandenen Dokuments |
|
Autoclose |
Beim Schliessen
eines Dokuments |
|
Autoexit |
Beim Beenden von Word oder Entladen einer globalen Vorlage |
Automatische Makros werden in Codemodulen erkannt, wenn sie eine der folgenden Bedingungen erfüllen.
Das Modul ist nach dem Namen des automatischen Makros benannt (z. B. "AutoExec") und enthält eine Prozedur mit der Bezeichnung "Main".
Prozeduren werden in allen Modulen nach dem automatischen Makro benannt.
Selection.EndKey Unit:=wdStory 'Ans
Ende des Dokumentes springen
Selection.MoveUp Unit:=wdLine, Count:=1 'Eine
Zeile nach oben
Selection.MoveRight Unit:=wdCell 'Tabulator
einfügen, Tabelle erweitern
Selection.HomeKey Unit:=wdStory 'An den Beginn
des Dokumentes springen
ActiveDocument.Save 'Aktives
Dokument speichern
Documents("MeinDokument.doc").Activate 'Dokument
mit Namen X Aktivieren
Documents().Close SaveChanges:=wdDoNotSaveChanges 'Dokument
schliessen ohne speichern
ActiveDocument.ActiveWindow.Close SaveChanges:=wdSaveChanges 'Dokument schliessen
mit speichern
ActiveDocument().Close SaveChanges:=wdPromptToSaveChanges 'Speichern
wenn etwas geändert hat, mit Abfrage
ActiveDocument.Close 'Dokument
schliessen
Selection.TypeText Application.UserInitials 'User
Kurzzeichen aus Optiondlg einfügen
strDokname = ActiveDocument.Name 'DokName
in Variable strDokname speichern
Dialogs(wdDialogToolsAutoManager).Show 'Listet
die Dialogbox Autotexte auf
Dialogs(wdDialogToolsMacro).Show 'Listet
die Dialogbox der Makros auf
ActivePrinter =
\\andererPC\HP LaserJet 4000 Series PCL 5e 'Auf anderen Drucker
drucken (nicht ausprobiert)
ActiveDocument.PrintOut Copies:=4 'Anzahl
Dokumente drucken z.B. hier
4 Stk.
ChangeFileOpenDirectory
"C:\" 'Beim
öffnen Default Pfad angeben
Dialogs(wdDialogFileOpen).Show 'Dialogfeld
öffnen anzeigen
dlgAnswer = Dialogs(wdDialogFileOpen).Show 'Zurückgeben
Antwort ob etwas ausgewählt im Dialog
wdDialogEditFind 'Dialogfeld
Suchen
wdDialogToolsOptionsUserInfo 'Dialogfeld
Optionen Benutzerangaben
Dialogs(wdDialogViewZoom).Show TimeOut:=9000 'Zeigt
ein Dialogbox hier zB. 9 Sekunden an
ActivePrinter =
"" 'Stellt
auf den Standard-Drucker zurück
Dialogs(wdDialogFilePrint).Show 'Dialogfeld
Drucken... anzeigen
ActiveDocument.PrintOut 'Befehl
für Drucken > 'DateiDruckenStandard'
MsgBox ActiveDocument.Name 'Gibt
den Namen des aktuellen Dokumentes zurück
Dialogs(wdDialogEditFind).Show TimeOut:=9000 'Dialogfeld
Suchen 9sek anzeigen
ActiveWindow.ActivePane.View.Type = wdNormalView 'Auf
Normalansicht wechseln
Application.WindowState = wdWindowStateMaximize 'Dokument
Ansicht Vollbild
Application.WindowState = wdWindowStateNormal 'Dokument
Ansicht Nicht Vollbild
Application.WindowState = wdWindowStateNormal 'Word-Fenster
auf maximiert (nicht vollbild) Ansicht
Application.Resize Width:=577,
Height:=274 'Word-Fenster
auf maximiert (genaue grösse definiert)
Ansicht
ActiveWindow.ActivePane.View.Type = wdPrintView 'Wechseln
auf Layout Ansicht
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader 'Ansicht Kopfzeile
NormalTemplate.AutoTextEntries("Generali").Insert Where:=Selection.Range 'Autotext
einfügen
Kill "C:\UserEinstellungen.ini" 'Datei
löschen
Application.OnTime When:=Now +
TimeValue("00:00:02"), _
Name:="TemplateProject.OptionenAnsichtLesen.OptionenAnsichtLesen" 'Modul nach einer gewissen
Zeit laufen lassen
Application.Run "MyProject.MyModule.MyProcedure" 'Modul
ausführen Projektneme,Modulneme,Prozedurname
Chr(13) 'Absatzmarke
Selection.TypeText Text:="EscSecuenz" 'Autotext
von EscSecuenz einfügen 1. Schritt
Selection.Range.InsertAutoText 'Autotext
von EscSecuenz einfügen 2. Schritt
Public strSprache
As String 'Variablenwert
für ganzes Projekt vergfügbar machen
Selection.MoveDown Unit:=wdParagraph, count:=1,
Extend:=wdMove 'Zum
1. Anfang des nachfolg. Absatzes
Selection.MoveUp Unit:=wdParagraph, count:=1, Extend:=wdMove 'Zum
Beginn des 1. vorherigen Absatzes
With Selection 'Beginn
Zeile springen und bis Ende Absatz markieren
.StartOf Unit:=wdParagraph,
Extend:=wdMove
.MoveDown
Unit:=wdParagraph, Count:=1, Extend:=wdExtend
End With
Options.PrintReverse = True 'Drucken
in Umgekehrter Reihenfolge
MsgBox ActiveDocument.Sections.Count & " Abschnitte." 'Gibt
die Anzahl der Abschnitte im Dokument retour.
ActiveDocument.ActiveWindow.ActivePane.AutoScroll velocity:=60 'Seite automatisch nach
unten scrollen.
Selection.Paragraphs(1).Range.Select 'Bis
Ende nächster Absatzmarke markieren.
ActiveDocument.Paragraphs(2).Range.Select 'Die
ersten zwei Absätze im Dokument markieren
strTextFont = Selection.Font.Name 'Font-Name in eine Variable abfüllen
intHyperlinkAnzahl = ActiveDocument.Hyperlinks.Count 'Anzahl der
Hyperlinks abfragen
'Hyperlink
aus VBA im Explorer öffnen:
ActiveDocument.FollowHyperlink Address:="http://office.microsoft.com", NewWindow:=True,
AddHistory:=True
strTextmarkenInhalt = ActiveDocument.Bookmarks("SysTextmarke").Range.Text 'TM
Inhalt in Variable lesen
strSeite = ActiveDocument.Bookmarks("strgaga").Range.Information(wdActiveEndPageNumber) 'SeitenNr. der
TM o. Mark.
ActiveDocument.ActiveWindow.Caption
= ActiveDocument.FullName 'In diesem Beispiel wird die Beschriftung des
'aktiven
Fensters auf den Namen des aktiven Dokuments
'eingestellt.
ActiveWindow.ActivePane.View.NextHeaderFooter 'Abschnitte
zählen
strAbschwievoriger = Selection.HeaderFooter.LinkToPrevious 'Abfragen
ob der Abschnitt (Kopf-Fussz.) wie vorheriger
ist
strPfad = ActiveDocument.AttachedTemplate.Path & Application.PathSeparator 'Gibt den Pfad des Aktiven Templates
zurück, inkl /
strTemplateName = ActiveDocument.AttachedTemplate.Name 'Gibt den Namen
des Templates zurück
MsgBox
CreateObject("WScript.Network").UserName
Login-Name des aktuell in Windows
angemeldeten Benutzers
strFormatvorlage = ActiveDocument.Styles(Selection.Style) 'Gibt die
Formatvorlage des Markierten Textes zurück
strBenötigterDrucker =
LCase (strSysPrintDest) 'Alles
kleinscheiben
strBenötigterDrucker =
UCase(strSysPrintDest) 'Alles
auf Grosschreibung setzen
strTextmarkenInhalt =
Left(strTextmarkenInhalt, Len(strTextmarkenInhalt) - 1) 'Letztes
Zeichen in einem String
entfernen
Temp für Wait (Sleep)
Public Declare
Sub Sleep Lib "kernel32" (ByVal
dwMilliseconds As Long)
Sleep 500 '(500 = 500 Millisekungen
= 0.5 Sekunden Warten)
ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter
= False 'Erste
Seite nicht anders 2010
ActiveDocument.PageSetup.OddAndEvenPagesHeaderFooter
= False 'Untersch. gerade ungerade Seiten 2010
ActiveDocument.UndoClear 'Rückgängig
Speicher löschen
stsZeilenNummer = Selection.Information(wdFirstCharacterLineNumber) 'ZeilenNummer
stsZeilenNummerPos = Selection.Information(wdFirstCharacterColumnNumber) ' Position des Zeichens
strAnzahlSeiten = ActiveDocument.ComputeStatistics(wdStatisticPages) 'Anzahl Seiten des Dokuments
ermitteln
strSeite = ActiveDocument.Bookmarks("SysPapierPolice").Range.Information(wdActiveEndPageNumber)
'Auf welcher Seite
ist
die Textmarke
strAktuellesModul = Application.VBE.ActiveCodePane.CodeModule 'Aktuelles Modul
strAktuellesProjekt = Application.VBE.ActiveVBProject.Name 'Projekt
Name
strAktuellesModul2 = Application.VBE.ActiveCodePane.CodeModule.Name 'Aktuelles
Modul
Exit For 'If Schlaufe verlassen
ActiveDocument.CopyStylesFromTemplate ("C:\Temp\police_m.dotm") 'Alle
Formatvorlagen ins Aktive Dokument kopieren
intSchirmhoehe = Application.UsableHeight 'Bildschirmhöhe
ermitteln
intSchirmbreite = Application.UsableWidth 'Bildschirmbreite
ermitteln
WordBasic.SelectSimilarFormatting 'Im Dokument der
Text markieren, welcher die gleiche Formatierung hast wie welcher wo der
Coursor steht.
ActiveWindow.View.SeekView =
wdSeekCurrentPageFooter 'Direkt
in Fusszeile wechseln
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument 'Fusszeile wieder schliessen
MsgBox ActiveDocument.ComputeStatistics(Statistic:=wdStatisticLines) 'Anzahl Absatzmarken im
Dokument
MsgBox ActiveDocument.Paragraphs.Count 'Anzahl
Absatzmarken im Dokument
StrPath = ActiveDocument.Path & Application.PathSeparator 'Pfad
vom Dokument
Sub Makro9()
' IO
Dokument wird ohne Speichern geschlossen
Documents().Close SaveChanges:=wdDoNotSaveChanges
End
Sub
'In diesem Beispiel wird das aktive
Dokument gespeichert, wenn es Änderungen enthält, die zuvor nicht gespeichert
wurden.
If
ActiveDocument.Saved = False
Then ActiveDocument.Save
'Abfragen ob beim SaveAs (Dialog
Speichern unter) Abbrechen oder Speichern gewählt wurde.
binSaved = ActiveDocument.Saved
'Bringt auf binSaved (die Variable)
Wahr oder Falsch zurück (Boolean)
'Bei diesem Dialogfeld:
Set dlg = Dialogs(wdDialogFileSaveAs)
With dlg
.Name = strDocFullName
.Show
End With
Sub Dok()
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
ActiveDocument.PrintOut
Documents().Close SaveChanges:=wdDoNotSaveChanges 'Dok schliessen ohne Speichern
End Sub
Sub AutotextAnzeigen()
' Dieses Makro listet das Dialogfeld
der Autotexte auf.
Dialogs(wdDialogToolsAutoManager).Show
End
Sub
Sub MakroAufstellungB()
' Dieses Makro listet das Dialogfeld
der Makros auf.
Dialogs(wdDialogToolsMacro).Show
End Sub
Sub TextmarkenAnzeigenB()
'
' TextmarkenAnzeigen Makro
' In diesem Beispiel wird das
integrierte Dialogfeld Textmaken angezeigt.
' Im Dialogfeld werden alle Textmarken
angezeigt.
With Dialogs(wdDialogInsertBookmark)
.Name = ""
.Show
End With
End Sub
'Aus Dokument lesen / Alles was
Markiert ist wird in der MsgBox ausgegeben.
Sub LesenB()
Dim strLesen As String
strLesen = Selection.Text
MsgBox strLesen
End Sub
Sub MarkierungVonBisTextm()
' Hier wird von den Textmarken
SysBEGUTitel bis SysBEGU eine
' Markierung erstellt, natürlich zuerst
abfragen obs diese gibt.
If
ActiveDocument.Bookmarks.Exists("SysBEGUTitel") = True Then
If ActiveDocument.Bookmarks.Exists("SysBEGU") = True Then
Selection.GoTo What:=wdGoToBookmark,
Name:="SysBEGUTitel"
Selection.Extend
Selection.GoTo What:=wdGoToBookmark,
Name:="SysBEGU"
'
Und die Markierung noch weiter ziehen bis SysBEGUEnde
Selection.GoTo What:=wdGoToBookmark, Name:="SysBEGUEnde"
End If
End
If
End
Sub
'Die InputBox Eingabe wird immer in
eine Variable abelegt. Darum die Klammern!
Sub inBox()
Dim strEingabe As String
strEingabe = InputBox("Bitte Namen eingeben.", "Namenseingabe", "Hans Muster")
MsgBox "Sie heissen " & strEingabe
End Sub
Sub SpeichernUnter()
With Dialogs(wdDialogFileSaveAs)
.Name = ""
.Show
End With
End
Sub
Sub Organisieren()
With
Dialogs(wdDialogOrganizer)
.Name = ""
.Show
End
With
End Sub
Public Sub TextSuchen()
'Wenn Sie zum Find-Objekt aus dem
Range-Objekt gelangt sind, wird die
'Markierung nicht geändert, wenn der
Text ermittelt wird, der mit den
'Suchkriterien übereinstimmt. Es wird
jedoch das Range-Objekt neu
'definiert. Das folgende Beispiel sucht
das erste Auftreten des Worts
'"blue" im aktiven Dokument.
Wird das Wort "blue" im Dokument ermittelt,
'wird myRange neu definiert und das
Wort "blue" fett formatiert.
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:="bluqe", Forward:=True
If myRange.Find.Found = True Then
MsgBox "hallo gefunden"
'myRange.Bold = True
End If
End Sub
Public Sub TextSuchenInVariablenInhalt()
' Textmarken-Inhalt, welcher in einer
Variablen abgelegt ist durchsuchen
' und einen Teil davon Textlich
verändern. z.B. Hier Font Kleiner- und Höherstellen
If
ActiveDocument.Bookmarks.Exists("produktnamen") = True Then
Set myRange
= ActiveDocument.Bookmarks("produktnamen").Range
myRange.Find.Execute FindText:="FL", Forward:=True
If myRange.Find.Found = True Then
intSchriftgroesse = myRange.Font.Size
myRange.Font.Size = intSchriftgroesse - 3
myRange.Font.Position = 3
' könnte auch nur mit dieser
Zeile für Font.Hochgestellt erfolgen:
myRange.Font.Superscript = True
End If
End
If
End
Sub
Public
Sub TextSuchenInVariablenInhalOKOK()
' Textmarken-Inhalt, welcher in einer
Variablen abgelegt ist durchsuchen
' und einen Teil davon Textlich
verändern. z.B. Hier Font Kleiner- und Höherstellen
If
ActiveDocument.Bookmarks.Exists("produktnamen") = True Then
Set myRange
= ActiveDocument.Bookmarks("produktnamen").Range
myRange.Find.Execute FindText:="FL ", MatchCase:=True, Forward:=wdForwardAll ' mit Gross/Kl.schreibung
' beachten und letztes Vorkommen im String
If myRange.Find.Found = True Then
myRange.Font.Superscript = True
End If
End
If
End
Sub
If ActiveDocument.Bookmarks.Exists("SysUser") = True Then ' Ist die Textmarke SysAbsatz vorhanden
Selection.GoTo What:=wdGoToBookmark, Name:="SysUser"
With
ActiveDocument.Bookmarks
.DefaultSorting
= wdSortByName
.ShowHidden
= True
End With
End
If
If ActiveDocument.Bookmarks.Count >= 1 Then 'Sind Textmarken vorhanden?
ReDim strMarksVork(1000) ' Grösse auf 100 Elemente ändern.
ActiveDocument.Bookmarks().Application.Activate ' Aktuelles Dokument Aktivieren
If ActiveDocument.Bookmarks.Count >= 1 Then
ReDim strMarksVork(ActiveDocument.Bookmarks.Count - 1) ' So manchmal die Variabl. abfüllen
e = 0 ' wie es Textmarken gibt.
For Each strBookmark In ActiveDocument.Bookmarks
strMarksVork(e) = strBookmark.Name ' Variable mit TextmarkenNamen abfüllen
e = e + 1 ' Angeben wie hoch die Variable erst. werden muss
Next strBookmark
End If
Textmarken u. DokName einfügen wenn es diese im aktuellen Dokument nicht gibt:
' Textmarken einfügen
' Hier wird abgefragt ob es den eintrag
'Textmarke und Dokumentnamen schon gibt.
' Wenn es diesen im
Zusammenfassungs-Dokument schon gibt wird dieser Eintrag nicht
' vorgenommen.
For intZählerVork = 0 To e – 1 ' Anzahl Durchläufe festlegen
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:=strMarksVork(intZählerVork) & vbTab & strDoknameVork, Forward:=True
If myRange.Find.Found = True Then
Selection.HomeKey Unit:=wdStory 'An den Beginn des Dokumentes springen
Else
Selection.EndKey Unit:=wdStory 'Ans Ende des Dokumentes springen
Selection.MoveUp Unit:=wdLine, Count:=1 'Eine Zeile nach oben
Selection.MoveRight Unit:=wdCell 'Tabulator einfügen, Tabelle erweitern
Selection.TypeText strMarksVork(intZählerVork) & vbTab & strDoknameVork ' -e darum weil 0 mitgezählt wird
Count = Count + 1 ' Counter angeben mit welchem wert gezählt wird
End If
Next
'Beispiel zur Execute-Methode
(FileSearch-Objekt)
'In diesem Beispiel wird im Ordner My
Documents nach allen Dateien gesucht, die die Dateinamenerweiterung .doc
'haben. Für jede gefundene Datei wird
anschliessend der Pfad und der Name angezeigt. Die Liste der zurückgegebenen
'Dateien wird ausserdem in
aufsteigender alphabetischer Reihenfolge sortiert.
Set fs = Application.FileSearch
With fs
.LookIn =
"C:\My Documents"
.FileName = "*.doc"
If .Execute(SortBy:=msoSortbyFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "There were no files found."
End If
End
With
Sub TextmarkenSuche()
' Anstatt jeden Elementnamen in einem
Meldungsfeld anzuzeigen,
' können Sie ein Datenfeld zum
Speichern der Informationen verwenden.
' In diesem Beispiel wird das Datenfeld
aMarks() zum Speichern des
' Namens jeder Textmarke verwendet, die
im aktiven Dokument enthalten ist.
If
ActiveDocument.Bookmarks.Count >= 1 Then
ReDim aMarks(ActiveDocument.Bookmarks.Count - 1)
i = 0
For Each
aBookmark In ActiveDocument.Bookmarks
aMarks(i) = aBookmark.Name
i = i + 1
Next aBookmark
End If
Sub Makro11()
' TABELLENINHALT IN EINE VARIABLE
SPEICHERN
'Dim aCells As String ' Dynamisches
Datenfeld für Zähler deklarieren
'Dim strTabText As String ' Dynamisches
Datenfeld für Zähler deklarieren
ReDim strTabText(1000000) ' Grösse auf 1000 Elemente ändern.
If ActiveDocument.Tables.Count >= 1 Then
Set oTable
= ActiveDocument.Tables(1)
intNummer = oTable.Range.Cells.Count
ReDim strTabText(intNummer)
i = 1
For Each
oCell In oTable.Range.Cells
Set myRange
= oCell.Range
myRange.MoveEnd
Unit:=wdCharacter, Count:=-1
strTabText(i) = myRange.Text
Selection.TypeText strTabText(i) 'Text einfügen
Selection.MoveRight Unit:=wdCell 'Tab einfügen
i = i + 1
Next oCell
End If
End Sub
Sub Vergleich()
Dim intHansAlter As Integer
Dim intSusiAlter As
Integer
intHansAlter = 7
intSusiAlter = 6
If intHansAlter
> intSusiAlter Then
MsgBox "Hans ist älter"
ElseIf intHansAlter = intSusiAlter Then
MsgBox "Beide sind geleich alt"
Else
MsgBox "Susi ist älter"
End If
End
Sub
Sub Zähler()
Dim intZähler As Integer 'Zälervarable als Integer festlegen.
For intZähler = 1 To 20 Step 5 'von 1 bis 20 durchzählen
'Step 5 ein druchlaufen im 5er Schrittt
Selection.TypeText "Dies ist die Zählschlaufe Nr.: " & intZähler 'Einfügen Text u. Zähler
Selection.TypeParagraph 'Absatzmarke Einfügen
Next intZähler 'Wieder an Anfang
End Sub
Sub Bedingteschleife()
Dim intBZähler As Integer 'Zälervarable als Integer festlegen.
intBZähler = 1 'Variablenwert definieren
Do While intBZähler <= 100 'Anzahl Durchläufe festlegen
Selection.TypeText "Dies ist die Bedingungsschlaufe Nr.: " & intBZähler
Selection.TypeParagraph
intBZähler = intBZähler + 2 'Angeben um welchen Wert der Zähler erhöt wird
Count = Count + 1 'Counter angeben mit welchem wert gezählt wird
Loop 'Wieder an Anfang
End Sub
'Bedingungsschleife 2 Bedingung am Schluss der Schlaufe (Einmal
wird diese immer durchlaufen!)
Sub Bedingteschleife2()
Dim intBZähler As Integer 'Zälervarable als Integer festlegen.
intBZähler = 1 'Variablenwert definieren
Do 'Durchläufe festlegen
Selection.TypeText "Dies ist die Bedingungsschlaufe Nr.: " & intBZähler
Selection.TypeParagraph
intBZähler = intBZähler + 2 'Angeben um welchen Wert der Zähler erhöt wird
Count = Count + 1 'Counter angeben mit welchem wert gezählt wird
Loop While intBZähler <= 100 'Wieder an Anfang mit Bedingung_f_h_k_l
End Sub
' Lässt eine MsgBox erscheinen, wenn
der Mauszeiger über die Schaltfläche OK fährt.
'
Private
Sub cmdOK_MouseMove(ByVal
Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single) 'Zeile mit leer + _ abgeschlossen und umgebrochen
MsgBox "Test Maus über OK"
End Sub
Public Sub MAIN()
' Hier wird abgefragt ob der Cursor
sich auf der 1. Seite
'
befindet
'-------------------------------------------------------------
If WordBasic.SelInfo(3) = 1 Then
WordBasic.MsgBox "Dies ist die 1. Seite"
End If
' Hier wird abgefragt ob der Cursor
sich auf der 2. Seite
'befindet
'-------------------------------------------------------------
If WordBasic.SelInfo(3) = 2 Then
WordBasic.MsgBox "Dies ist die 2. Seite"
End If
' Hier wird abgefragt ob der Cursor
sich auf der 3. Seite
'
befindet
'-------------------------------------------------------------
If WordBasic.SelInfo(3) = 3 Then
WordBasic.MsgBox "Dies ist die 3. Seite"
End If
End Sub
'In der Regel werden Sie den
Makrorecorder benutzen, um die Namen von Objekten, Eigenschaften und Methoden
zu
'erfahren, die Sie in VBA nachbilden
möchten. Beim Setzen von Dokumenteigenschaften stossen Sie dabei auf einen
'Fehler des Makrorecorders in Word. Er
ist nicht in der Lage, diese Operation aufzuzeichnen. Um die
'Dokumenteigenschaften von VBA aus
einzustellen, verwenden Sie die Eigenschaft BuiltInDocumentProperties des
'ActiveDocument-Objekts und eine
Konstante, die die einzelne Eigenschaft angibt. Die folgende Prozedur setzt die
'Werte für die Eigenschaften Titel,
Autor und Kategorie durch die ihr übergebenen Werte.
Sub DokumenteigenschaftenSetzen(strTitel As String, _
strAutor As String,
strKategorie As String)
With
ActiveDocument
.BuiltInDocumentProperties(wdPropertyTitle)
= strTitel
.BuiltInDocumentProperties(wdPropertyAuthor)
= strAutor
.BuiltInDocumentProperties(wdPropertyCategory)
= strKategorie
End
With
End
Sub
Public Sub DokumenteigenschaftenSetzen()
On Error GoTo Ende:
'Setzt die Dokumenteigenschaften des
aktiven Dokumentes
Dim strTitel As
String
Dim strThema As
String
Dim strAutor As
String
Dim strManager As
String
Dim strKategorie As String
Dim strFirma As
String
Dim strDocName As
String
Dim strKommentar As String
Dim strHyperlink As String
strDocName = ActiveDocument.Name
strTitel = strDocName 'InputBox("Der Titel der Druckvorlage", "Dokumenteigenschaften setzen", strDocName)
If strTitel = "" Then
'Nichts machen, da Abbrechen gewählt wurde!
Else
strThema = "Dokumentvorlage für VVEV"
strAutor = "Pirmin Steiner"
strManager = "Pirmin Steiner (DO/stp)"
strKategorie = "Winword Dokumentvorlage"
strFirma = "GENERALI Personenversicherungen"
strKommentar = "Erstellt/Geändert am: " & vbCrLf & "Datum: " & Date & vbCrLf & "Zeit: " & Time & vbCrLf & "Durch: DO/stp"
strThema = "Druckvorlage (Winword 2000)"
strHyperlink = "www.generali.ch"
With ActiveDocument
.BuiltInDocumentProperties(wdPropertyTitle)
= strTitel
.BuiltInDocumentProperties(wdPropertyAuthor)
= strAutor
.BuiltInDocumentProperties(wdPropertyManager)
= strManager
.BuiltInDocumentProperties(wdPropertyCategory)
= strKategorie
.BuiltInDocumentProperties(wdPropertyCompany)
= strFirma
.BuiltInDocumentProperties(wdPropertyComments)
= strKommentar
.BuiltInDocumentProperties(wdPropertyHyperlinkBase)
= strHyperlink
.BuiltInDocumentProperties(wdPropertySubject)
= strThema
End With
End
If
Ende:
End
Sub
Sub FileSave()
On
Error GoTo Ende:
'Winword Befehl Speichern
'Zusätzlich Dokumenteigenschaften
setzen.
'Setzt die Dokumenteigenschaften des
aktiven Dokumentes
Dim strTitel As
String
Dim strThema As
String
Dim strAutor As
String
Dim strManager As
String
Dim strKategorie As String
Dim strFirma As
String
Dim strDocName As
String
Dim strKommentar As String
Dim strHyperlink As String
strDocName = ActiveDocument.Name
strTitel = strDocName
If strTitel = "" Then
'Nichts machen, da Abbrechen gewählt wurde!
Else
strThema = "Dokumentvorlage für VVEV"
strAutor = "Pirmin Steiner"
strManager = "Pirmin Steiner (DO/stp)"
strKategorie = "Winword Dokumentvorlage"
strFirma = "GENERALI Personenversicherungen"
strKommentar = "Erstellt/Geändert am: " & vbCrLf & "Datum: " & Date & vbCrLf & "Zeit: " & Time & vbCrLf & "Durch: DO/stp"
strThema = "Druckvorlage (Winword 2000)"
strHyperlink = "www.generali.ch"
With ActiveDocument
.BuiltInDocumentProperties(wdPropertyTitle)
= strTitel
.BuiltInDocumentProperties(wdPropertyAuthor)
= strAutor
.BuiltInDocumentProperties(wdPropertyManager)
= strManager
.BuiltInDocumentProperties(wdPropertyCategory)
= strKategorie
.BuiltInDocumentProperties(wdPropertyCompany)
= strFirma
.BuiltInDocumentProperties(wdPropertyComments)
= strKommentar
.BuiltInDocumentProperties(wdPropertyHyperlinkBase)
= strHyperlink
.BuiltInDocumentProperties(wdPropertySubject)
= strThema
End With
ActiveDocument.Save
End
If
Ende:
End
Sub
Sub FileSaveAs()
On Error GoTo Ende:
'Winword Befehl Speichern unter...
'Zusätzlich Dokumenteigenschaften
setzen.
'Setzt die Dokumenteigenschaften des
aktiven Dokumentes
Dim strTitel As
String
Dim strThema As
String
Dim strAutor As
String
Dim strManager As
String
Dim strKategorie As String
Dim strFirma As
String
Dim strDocName As
String
Dim strDocFullName As String
Dim strKommentar As String
Dim strHyperlink As String
strDocFullName =
ActiveDocument.FullName
' ActiveDocument.SaveAs
'ChDir
ActiveDocument.AttachedTemplate.Path
With Dialogs(wdDialogFileSaveAs)
.Name = strDocFullName
.Show
End With
strDocName = ActiveDocument.Name
strTitel = strDocName
If strTitel = "" Then
'Nichts machen, da Abbrechen gewählt wurde!
Else
strThema = "Dokumentvorlage für VVEV"
strAutor = "Pirmin Steiner"
strManager = "Pirmin Steiner (DO/stp)"
strKategorie = "Winword Dokumentvorlage"
strFirma = "GENERALI Personenversicherungen"
strKommentar = "Erstellt/Geändert am: " & vbCrLf & "Datum: " & Date & vbCrLf & "Zeit: " & Time & vbCrLf & "Durch: DO/stp"
strTitel = strDocName
strThema = "Druckvorlage (Winword 2000)"
strHyperlink = "www.generali.ch"
With
ActiveDocument
.BuiltInDocumentProperties(wdPropertyTitle)
= strTitel
.BuiltInDocumentProperties(wdPropertyAuthor)
= strAutor
.BuiltInDocumentProperties(wdPropertyManager)
= strManager
.BuiltInDocumentProperties(wdPropertyCategory)
= strKategorie
.BuiltInDocumentProperties(wdPropertyCompany)
= strFirma
.BuiltInDocumentProperties(wdPropertyHyperlinkBase)
= strHyperlink
.BuiltInDocumentProperties(wdPropertySubject)
= strThema
.BuiltInDocumentProperties(wdPropertyComments)
= strKommentar
End With
ActiveDocument.Save 'Damit die Eigenschaften gespeichert sind.
End If
Ende:
End Sub
' zuletzt geändert von
ActiveDocument.BuiltInDocumentProperties(7) = "Hans Letzter"
|
1 |
Title |
Mein
eigener Titel |
|
2 |
Subject |
Die
Dateieigenschaften |
|
3 |
Author |
andreas
entenmann |
|
4 |
Keywords |
excel
vba |
|
5 |
Comments |
Dies
ist mein Kommentar dazu |
|
6 |
Template |
|
|
7 |
Last author |
Andreas
Entenmann Privat |
|
8 |
Revision number |
|
|
9 |
Application name |
Microsoft
Excel |
|
10 |
Last print date |
04.08.2004
14:33 |
|
11 |
Creation date |
31.07.2004
10:08 |
|
12 |
Last save time |
07.08.2004
12:04 |
|
13 |
Total editing time |
0 |
|
14 |
Number of pages |
|
|
15 |
Number of words |
|
|
16 |
Number of characters |
|
|
17 |
Security |
0 |
|
18 |
Category |
VBA |
|
19 |
Format |
|
|
20 |
Manager |
DerBoss |
|
21 |
Company |
Privat |
|
22 |
Number of bytes |
|
|
23 |
Number of lines |
|
|
24 |
Number of paragraphs |
|
|
25 |
Number of slides |
|
|
26 |
Number of notes |
|
|
27 |
Number of hidden Slides |
|
|
28 |
Number of multimedia clips |
|
|
29 |
Hyperlink base |
|
|
30 |
Number of
characters (with spaces) |
WdBuiltInProperty-Enumeration
'Gibt eine integrierte Dokumenteigenschaft an.
'Name Wert Beschreibung
wdPropertyAppName 9 Name der Anwendung.
wdPropertyAuthor 3 Autor.
wdPropertyBytes 22 Byteanzahl.
wdPropertyCategory 18 Kategorie.
wdPropertyCharacters 16 Zeichenanzahl.
wdPropertyCharsWSpaces 30 Zeichenanzahl mit Leerzeichen.
wdPropertyComments 5 Kommentare.
wdPropertyCompany 21 Firma.
wdPropertyFormat 19 Nicht unterstützt.
wdPropertyHiddenSlides 27 Nicht unterstützt.
wdPropertyHyperlinkBase 29 Nicht unterstützt.
wdPropertyKeywords 4 Schlüsselwörter.
wdPropertyLastAuthor 7 Letzter Autor.
wdPropertyLines 23 Zeilenanzahl.
wdPropertyManager 20 Manager.
wdPropertyMMClips 28 Nicht unterstützt.
wdPropertyNotes 26 Hinweise.
wdPropertyPages 14 Seitenanzahl.
wdPropertyParas 24 Absatzanzahl.
wdPropertyRevision 8 Revisionsnummer.
wdPropertySecurity 17 Sicherheitseinstellung.
wdPropertySlides 25 Nicht unterstützt.
wdPropertySubject 2 Betreff.
wdPropertyTemplate 6 Vorlagename.
wdPropertyTimeCreated 11 Erstellt.
wdPropertyTimeLastPrinted 10 Zuletzt gedruckt.
wdPropertyTimeLastSaved 12 Zuletzt gespeichert.
wdPropertyTitle 1 Titel.
wdPropertyVBATotalEdit 13 Anzahl der Bearbeitungen am VBA-Projekt.
wdPropertyWords 15 Wortanzahl.
Test
Sub TestProperties()
On
Error Resume Next
strWDPropertey10
= ActiveDocument.BuiltInDocumentProperties(wdPropertyAppName)
strWDPropertey11
= ActiveDocument.BuiltInDocumentProperties(wdPropertyAuthor)
strWDPropertey12
= ActiveDocument.BuiltInDocumentProperties(wdPropertyBytes)
strWDPropertey13
= ActiveDocument.BuiltInDocumentProperties(wdPropertyCategory)
strWDPropertey14
= ActiveDocument.BuiltInDocumentProperties(wdPropertyCharacters)
strWDPropertey15
= ActiveDocument.BuiltInDocumentProperties(wdPropertyCharsWSpaces)
strWDPropertey16
= ActiveDocument.BuiltInDocumentProperties(wdPropertyComments)
strWDPropertey17
= ActiveDocument.BuiltInDocumentProperties(wdPropertyCompany)
strWDPropertey18
= ActiveDocument.BuiltInDocumentProperties(wdPropertyFormat)
strWDPropertey19
= ActiveDocument.BuiltInDocumentProperties(wdPropertyHiddenSlides)
strWDPropertey20
= ActiveDocument.BuiltInDocumentProperties(wdPropertyHyperlinkBase)
strWDPropertey21
= ActiveDocument.BuiltInDocumentProperties(wdPropertyKeywords)
strWDPropertey22
= ActiveDocument.BuiltInDocumentProperties(wdPropertyLastAuthor)
strWDPropertey23
= ActiveDocument.BuiltInDocumentProperties(wdPropertyLines)
strWDPropertey24
= ActiveDocument.BuiltInDocumentProperties(wdPropertyManager)
strWDPropertey25
= ActiveDocument.BuiltInDocumentProperties(wdPropertyMMClips)
strWDPropertey26
= ActiveDocument.BuiltInDocumentProperties(wdPropertyNotes)
strWDPropertey27
= ActiveDocument.BuiltInDocumentProperties(wdPropertyPages)
strWDPropertey28
= ActiveDocument.BuiltInDocumentProperties(wdPropertyParas)
strWDPropertey29
= ActiveDocument.BuiltInDocumentProperties(wdPropertyRevision)
strWDPropertey30
= ActiveDocument.BuiltInDocumentProperties(wdPropertySecurity)
strWDPropertey31
= ActiveDocument.BuiltInDocumentProperties(wdPropertySlides)
strWDPropertey32
= ActiveDocument.BuiltInDocumentProperties(wdPropertySubject)
strWDPropertey33
= ActiveDocument.BuiltInDocumentProperties(wdPropertyTemplate)
strWDPropertey34
= ActiveDocument.BuiltInDocumentProperties(wdPropertyTimeCreated)
strWDPropertey35
= ActiveDocument.BuiltInDocumentProperties(wdPropertyTimeLastPrinted)
strWDPropertey36
= ActiveDocument.BuiltInDocumentProperties(wdPropertyTimeLastSaved)
strWDPropertey37
= ActiveDocument.BuiltInDocumentProperties(wdPropertyTitle)
strWDPropertey38
= ActiveDocument.BuiltInDocumentProperties(wdPropertyVBATotalEdit)
strWDPropertey39
= ActiveDocument.BuiltInDocumentProperties(wdPropertyWords)
MsgBox
"strWDPropertey10 = " & strWDPropertey10 & vbCrLf & _
"strWDPropertey11
= " & strWDPropertey11 & vbCrLf &
_
"strWDPropertey12
= " & strWDPropertey12 & vbCrLf &
_
"strWDPropertey13
= " & strWDPropertey13 & vbCrLf &
_
"strWDPropertey14
= " & strWDPropertey14 & vbCrLf &
_
"strWDPropertey15
= " & strWDPropertey15 & vbCrLf &
_
"strWDPropertey16
= " & strWDPropertey16 & vbCrLf &
_
"strWDPropertey17
= " & strWDPropertey17 & vbCrLf &
_
"strWDPropertey18
= " & strWDPropertey18 & vbCrLf &
_
"strWDPropertey19
= " & strWDPropertey19 & vbCrLf &
_
"strWDPropertey20
= " & strWDPropertey20 & vbCrLf &
_
"strWDPropertey21
= " & strWDPropertey21 & vbCrLf &
_
"strWDPropertey22
= " & strWDPropertey22 & vbCrLf &
_
"strWDPropertey23
= " & strWDPropertey23 & vbCrLf &
_
"strWDPropertey24
= " & strWDPropertey24
MsgBox
"strWDPropertey25 = " & strWDPropertey25 & vbCrLf & _
"strWDPropertey26
= " & strWDPropertey26 & vbCrLf &
_
"strWDPropertey27
= " & strWDPropertey27 & vbCrLf &
_
"strWDPropertey28
= " & strWDPropertey28 & vbCrLf &
_
"strWDPropertey29
= " & strWDPropertey29 & vbCrLf &
_
"strWDPropertey30
= " & strWDPropertey30 & vbCrLf &
_
"strWDPropertey31
= " & strWDPropertey31 & vbCrLf &
_
"strWDPropertey32
= " & strWDPropertey32 & vbCrLf &
_
"strWDPropertey33
= " & strWDPropertey33 & vbCrLf &
_
"strWDPropertey34
= " & strWDPropertey34 & vbCrLf &
_
"strWDPropertey35
= " & strWDPropertey35 & vbCrLf &
_
"strWDPropertey36
= " & strWDPropertey36 & vbCrLf &
_
"strWDPropertey37
= " & strWDPropertey37 & vbCrLf &
_
"strWDPropertey38
= " & strWDPropertey38 & vbCrLf &
_
"strWDPropertey39
= " & strWDPropertey39
End
Sub
'Subroutine
ShowBuiltInDocumentProperties loops through the document's
BuiltInDocumentProperties collection, displaying the property values in the
Debug window.
'
Display the active document's built-in properties.
Public
Sub ShowBuiltInDocumentProperties()
Dim dp As DocumentProperty
On Error Resume
Next
For Each dp
In ActiveDocument.BuiltInDocumentProperties
Debug.Print
dp.Name &
": ";
Debug.Print
dp.Value
If Err.Number <> 0 Then
Debug.Print
"??????????"
Err.Clear
End If
Next dp
End Sub
Sub DokumenteigenschaftAuslesenOhneOeffnen()
Dim strDokument As String
strDokument = "C:\Abfall\GO\dlabr4_erfassung_auto_d.dotx"
Set objDatei = GetObject(strDokument)
MsgBox objDatei.BuiltInDocumentProperties.Item(wdPropertyTitle)
'
Wieder schliessen im Hintergrund
objDatei.Close False
Set objDatei = Nothing
End Sub
'Ändern Sie mit Ihren Prozeduren
benutzerdefinierte Einstellungen in Word, gehört es zum guten Programmierstil,
'dass Sie sie nach Beendigung Ihrer
Operationen wiederherstellen. Dazu müssen Sie sie speichern,
'bevor Sie mit deren Modifikation
beginnen.
'Öffnen Sie in einer Prozedur
beispielsweise Dokumente und müssen dafür den Ordner ändern, der auf
'der Registerkarte Dateiablage im
Dialog Optionen für Dokumente eingestellt ist, speichern Sie
'die aktuelle Einstellung in einer
Variablen, um sie nach dem Öffnen aller Dateien, die Sie für
'Ihre Prozedur benötigen,
wiederherstellen zu können.
Sub DokumenteÖffnen(strDateiname As String)
Dim strBenutzerordner As String
Dim dlgÖffnen As Dialog
Dim lngButton As Long
On Error GoTo Err_DokumenteÖffnen:
strBenutzerordner = Options.DefaultFilePath(wdDocumentsPath)
Documents.Open FileName:=strBenutzerordner & _
Application.PathSeparator & strDateiname
Exit Sub
Err_DokumenteÖffnen:
If MsgBox("Datei konnte im Ornder " & strBenutzerordner & _
" nicht gefunden werden." & vbCrLf & " Möchten Sie selbst nach der _
Datei suchen?", vbYesNo) = vbYes Then
Set dlgFileOpen = Dialogs(wdDialogFileOpen)
lngButton = dlgFileOpen.Display
strDateiname = dlgFileOpen.Name
If lngButton = -1 Then
Documents.Open FileName:=strDateiname
Options.DefaultFilePath
(wdDocumentsPath) = strBenutzerordner
End If
End
If
End Sub
'Word unterstützt das Wiederholen der
letzten Aktion. Diese nützliche Funktion, die schnell über die Taste [F4]
'aufgerufen werden kann, lässt sich
durch eine ähnliche Funktion ergänzen, nämlich das mehrmalige Wiederholen eines
'Arbeitsschritts. Weisen Sie der
Prozdur eine Tastenkombination zu, beziehungsweise fügen Sie eine Schaltfläche
auf
'der Symbolleiste ein, ist sie genauso
bequem auszuführen wie die eingebaute Funktion.
'
Sub RepeatLastAction()
Dim dummy as
Variant
dummy = InputBox("Anzahl der Wiederholungen", _
"Wiederholen der letzten Aktion:", 10)
If IsNumeric(dummy) Then
dummy=CInt(dummy)
If dummy>0 Then
Application.Repeat (dummy)
End if
End
If
End Sub
'Die Prozedur zeigt eine Inputbox an,
in die die Zahl der Wiederholungen eingetragen werden kann.
'Als Standardwert gibt die Prozedur den
Wert 10 an. Der Wert wird der Methode Repeat als Parameter übergeben.
'Importieren Sie Text in Word oder auch
in eine andere Office-Anwendung, kommt es häufig vor, dass er irgendwelche
'Steuerzeichen enthält, die Sie nicht
in Ihren Dokumenten haben möchten. Um sie zu löschen, können Sie relativ 'bequem
mit dem ASCII-Code arbeiten. Alle Zeichen, die in einem normalen Text
vorkommen, liegen nämlich in dem
'Bereich zwischen 32 und 127. Einzige
Ausnahmen sind das Absatzzeichen, der Zeilenumbruch und der Tabulator,
'die in der Regel nicht gelöscht werden
sollen. Sie haben die ASCII-Codes 13, 10 und 9. Folgende Prozedur
'entfernt alle übrigen Steuerzeichen
aus einem Text und ersetzt sie durch ein Leerzeichen:
Sub SteuerzeichenErsetzen()
Dim lngPosition As Long
Dim intZeichen As
Integer
While
lngPosition < ActiveDocument.Range.End
ActiveDocument.Range(Start:=lngPosition,
End:=lngPosition + 1)
_
.Select
intZeichen = Asc(Selection.Text)
If (intZeichen < 32 Or intZeichen > 127) And intZeichen <> 13 _
And intZeichen <> 10 And intZeichen <> 9 Then
Selection.Text = " "
End If
lngPosition = lngPosition + 1
Wend
End Sub
'Im Ordner wird eine Datei mit dem
gleichen Dateinamen und der Endung ini erstellt, wo die Nummer gespeichert
wird.
'Wird diese Datei manipuliert, kann es
zu Fehlern kommen.
Sub DateiSpeichern()
Dim Nr%
Dim dName$
Dim Zielordner$, Dateiname$
'Hier den Pfad verändern
Zielordner = "c:\eigene dateien\"
'Hier den Dateinamen verändern
Dateiname = "SichWiederholenderText"
dName =
Zielordner & Dateiname & ".ini"
Close
On
Error Resume Next
Open dName For Input As #1
If Err > 0 Then
Nr = 1
Close
Open dName For Output
As #1
Print #1, Nr
Close
Exit Sub
Else
Input #1, Nr
Close
Open dName For Output
As #1
Print #1, Nr
+ 1
Close
End
If
ActiveDocument.SaveAs Zielordner & Dateiname & Nr
End
Sub
'oder mit Vornullen aufgefüllt:
'Im Ordner wird eine Datei mit dem
gleichen Dateinamen und der Endung ini erstellt,
'wo die Nummer gespeichert wird. Wird
diese Datei manipuliert, kann es zu Fehlern kommen.
'http://home.datacomm.ch/pirmin.steiner/
Sub DateiMitFortlaufenderNummerSpeichern()
Dim Nr As String
Dim dName$
Dim Zielordner$, Dateiname$
'Hier den Pfad verändern
Zielordner = "C:\TEMP\"
'Hier den Dateinamen verändern
Dateiname = "SichWiederholenderDateiname"
dName =
Zielordner & Dateiname & ".ini"
Close
On
Error Resume Next
Open dName For Input As #1
If Err > 0 Then
Nr = 1
Close
Open dName For Output
As #1
Print #1, Nr
Close
Exit Sub
Else
Input #1, Nr
Close
Open dName For Output
As #1
Print #1, Nr
+ 1
Close
End
If
Nr = Format(Nr,
"000000000")
ActiveDocument.SaveAs Zielordner & Dateiname & "_" & Nr
End Sub
'Die Routine TestB schreibt alle
Dokumenteneigenschaften in das aktive Dokument, Routine TestC schreibt ein
'spezifische Dokumenteneigenschaft
(nämlich den Autor) heraus.
Sub TestB()
For i = 1 To 30
With
ActiveDocument.BuiltInDocumentProperties(i)
On Error
Resume Next
Selection.TypeText _
Text:=i & vbTab & .Name & vbTab &
.Value & vbCrLf
On Error
GoTo 0
End With
Next i
With
ActiveDocument.Content.ParagraphFormat
.TabStops.Add (CentimetersToPoints(1))
.TabStops.Add (CentimetersToPoints(8))
End With
End
Sub
Sub TestC()
Selection.TypeText _
Text:=ActiveDocument.BuiltInDocumentProperties("Author").Value
End Sub
Public Sub InILesen()
Dim strVariabel As String ' Dynamisches Datenfeld deklarieren
strVariabel = "vreneli" ' Variabel definieren
'Ins INI-File schreiben
System.PrivateProfileString(FileName:="C:\Eigene Dateien\Makro\Makro.ini", _
Section:="DokMerker",
Key:="strVariabel")
= strVariabel
End
Sub
Public Sub InIEinfügen()
Dim strVariabel As String ' Dynamisches Datenfeld deklarieren
'Vom INI-File lesen
strVariabel = System.PrivateProfileString(FileName:="C:\Eigene Dateien\Makro\Makro.ini", _
Section:="DokMerker", Key:="strVariabel")
Selection.TypeText strVariabel ' Variabel in Text einfügen
Selection.TypeParagraph ' Zeilenumbruch einfügen
End Sub
Public Sub DateiVorh()
Dim strDateiVorhanden As String
Dim Datei1, Pfad1, Name1
' Liefert "AnsEinst.ini" (in
die Variable strDateiVorhanden), falls die Datei existiert.
strDateiVorhanden = Dir("C:\AnsEinst.ini")
End Sub
Oder
Sub Datei_Existenz_Pruefung()
Dim strDateiName As String
Dim strOneDrivePath As String
Dim strDateiExistiert As String
strDateiName = "LetterTemplate.ini"
strOneDrivePath = Environ("OneDriveCommercial") & Application.PathSeparator
' strOneDrivePath = strOneDrivePath
strDateiExistiert = Dir(strOneDrivePath & strDateiName)
If strDateiExistiert = strDateiName Then
MsgBox "Die ausgewählte Datei existiert"
Else
MsgBox "Die ausgewählte Datei existiert nicht"
End If
End Sub
' Erstellt 12.05.2001 Pirmin Steiner
' Damit die User nach Ablauf der Makros
wieder ihre eigenen Einstellungen
' haben, habe ich hier ein Makro
geschrieben, das die Einstellungen vor
' dem Ablauf der Makros in das InI-File
"AnsEinst.ini" im Pfad "C:\"
' schreibt.
' Am Schluss aller Makros werden dann
alle Einstellungen wieder zurückgesetzt.
Dim blnOptAnsHorizBildl As Boolean
Dim blnOptAnsVertikBildl As Boolean
Dim blnOptAnsLeftScroBar As Boolean
Dim sngOptAnsFormatAnsSeit As Single
Dim blnOptAnsRightRuler As Boolean
Dim blnOptAnsQuikInfo As Boolean
Dim blnOptAnsAnimiText As Boolean
Dim blnOptAnsKonzSchrift As Boolean
Dim blnOptAnsFenstrbrUmbr As Boolean
Dim blnOptAnsPlatzhGrafik As Boolean
Dim blnOptAnsFeldfunkt As Boolean
Dim blnOptAnsTextmarkAnz As Boolean
Dim lngOptAnsFeldSchattier As Long
Dim blnOptAnsTabZeichen As Boolean
Dim blnOptAnsLeerZeichen As Boolean
Dim blnOptAnsAbsatzMarken As Boolean
Dim blnOptAnsBedingtTrennz As Boolean
Dim blnOptAnsAusgblText As Boolean
Dim blnOptAnsAlle As Boolean
Dim blnOptAnsZeichnungen As Boolean
Dim blnOptAnsObjektAnker As Boolean
Dim blnOptAnsTextbegre As Boolean
Dim blnOptAnsHervorhebung As Boolean
Dim blnOptDruckFeldfunkt As Boolean
Dim blnOptDruckVerknAkt As Boolean
Dim blnOptDruckFelderAusdr As Boolean
Dim blnOptDruckAusgeblenTxt As Boolean
Dim blnOptDruckZeichnungsobj As Boolean
Dim blnOptDruckUmgekehrtReih As Boolean
Dim strOptDruckSchachtEinst As
String
Dim strOptSpeichDatSpeichUnt As
String
Dim strDateiVorhanden As String
'Abfragen ob die Datei
"AnsEinst.ini" existiert
Dim Datei1, Pfad1, Name1
'Liefert
"AnsEinst.ini" (in die Variable strDateiVorhanden), falls die Datei
existiert.
strDateiVorhanden =
Dir("C:\AnsEinst.ini")
On Error Resume
Next 'Falls mal ein Eintrag im INI-File fehlt.
If strDateiVorhanden = "AnsEinst.ini" Then
'--- Extras Optionen Einstellungen: Ansicht
abfragen ---
'Extras Optionen Ansicht 'Horizontale
Bildlaufleiste' abfragen
blnOptAnsHorizBildl = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsHorizBildl") 'Vom INI lesen
Options.Application.ActiveWindow.DisplayHorizontalScrollBar
= blnOptAnsHorizBildl 'Ausführen
'Extras Optionen Ansicht 'Vertikale
Bildlaufleiste' abfragen
blnOptAnsVertikBildl = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsVertikBildl")
'Vom INI lesen
Options.Application.ActiveWindow.DisplayVerticalScrollBar
= blnOptAnsVertikBildl 'Ausführen
'Extras Optionen Ansicht ??? abfragen
blnOptAnsLeftScroBar = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsLeftScroBar") 'Vom INI lesen
Options.Application.ActiveWindow.DisplayLeftScrollBar
= blnOptAnsLeftScroBar 'Ausführen
'Extras Optionen Ansicht wird links 2 cm die Formatvorlagen der Zeilen
angezeigt
sngOptAnsFormatAnsSeit = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="sngOptAnsFormatAnsSeit") 'Vom INI lesen
Options.Application.ActiveWindow.StyleAreaWidth
= sngOptAnsFormatAnsSeit 'Ausführen
'Extras Optionen Ansicht hat irgendwie mit
der Ansicht zutun
blnOptAnsRightRuler = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsRightRuler") 'Vom INI lesen
Options.Application.ActiveWindow.DisplayRightRuler
= blnOptAnsRightRuler 'Ausführen
'Extras Optionen Ansicht 'QuikInfo'
abfragen
blnOptAnsQuikInfo = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsQuikInfo") 'Vom INI lesen
Options.Application.ActiveWindow.DisplayScreenTips
= blnOptAnsQuikInfo 'Ausführen
'Extras Optionen Ansicht 'Animierter Text'
abfragen
blnOptAnsAnimiText = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsAnimiText")
'Vom INI lesen
Options.Application.ActiveWindow.View.ShowAnimation = blnOptAnsAnimiText 'Ausführen
'Extras Optionen Ansicht
'Konzeptschriftart' abfragen
blnOptAnsKonzSchrift = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsKonzSchrift") 'Vom INI lesen
Options.Application.ActiveWindow.View.Draft = blnOptAnsKonzSchrift 'Ausführen
'Extras Optionen Ansicht 'Auf Fensterbreite
umbrechen' abfragen
blnOptAnsFenstrbrUmbr = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsFenstrbrUmbr")
'Vom INI lesen
Options.Application.ActiveWindow.View.WrapToWindow = blnOptAnsFenstrbrUmbr 'Ausführen
'Extras Optionen Ansicht 'Platzhalter für
Grafiken anzeigen' abfragen
blnOptAnsPlatzhGrafik = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsPlatzhGrafik")
'Vom INI lesen
Options.Application.ActiveWindow.View.ShowPicturePlaceHolders = blnOptAnsPlatzhGrafik
'Ausführen
'Extras Optionen Ansicht 'Feldfunktonen
anzeigen' abfragen
blnOptAnsFeldfunkt = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsFeldfunkt")
'Vom INI lesen
Options.Application.ActiveWindow.View.ShowFieldCodes = blnOptAnsFeldfunkt 'Ausführen
'Extras Optionen Ansicht 'Textmarken
anzeigen' abfragen
blnOptAnsTextmarkAnz = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsTextmarkAnz") 'Vom INI lesen
Options.Application.ActiveWindow.View.ShowBookmarks = blnOptAnsTextmarkAnz 'Ausführen
'Extras Optionen Ansicht
'Bildschirm-Schattierung für Formularfelder' immer abfragen
lngOptAnsFeldSchattier = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="lngOptAnsFeldSchattier") 'Vom INI lesen
Options.Application.ActiveWindow.View.FieldShading = lngOptAnsFeldSchattier 'Ausführen
'Extras Optionen Ansicht
'Tabstopzeichen' abfragen
blnOptAnsTabZeichen = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsTabZeichen") 'Vom INI lesen
Options.Application.ActiveWindow.View.ShowTabs = blnOptAnsTabZeichen 'Ausführen
'Extras Optionen Ansicht 'Leerzeichen' abfragen
blnOptAnsLeerZeichen = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsLeerZeichen") 'Vom INI lesen
Options.Application.ActiveWindow.View.ShowSpaces = blnOptAnsLeerZeichen 'Ausführen
'Extras Optionen Ansicht 'Absatzmarken'
abfragen
blnOptAnsAbsatzMarken = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsAbsatzMarken") 'Vom INI lesen
Options.Application.ActiveWindow.View.ShowParagraphs = blnOptAnsAbsatzMarken 'Ausführen
'Extras Optionen Ansicht 'Bedingte
Trennzeichen' abfragen
blnOptAnsBedingtTrennz = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsBedingtTrennz")
'Vom INI lesen
Options.Application.ActiveWindow.View.ShowHyphens = blnOptAnsBedingtTrennz 'Ausführen
'Extras Optionen Ansicht 'Ausgeblendeten
Text' abfragen
blnOptAnsAusgblText = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsAusgblText")
'Vom INI lesen
Options.Application.ActiveWindow.View.ShowHiddenText = blnOptAnsAusgblText 'Ausführen
'Extras Optionen Ansicht 'ALLE' abfragen
blnOptAnsAlle = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsAlle") 'Vom INI lesen
Options.Application.ActiveWindow.View.ShowAll = blnOptAnsAlle 'Ausführen
'Extras Optionen Ansicht 'Zeichnungen'
abfragen
blnOptAnsZeichnungen = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsZeichnungen")
'Vom INI lesen
Options.Application.ActiveWindow.View.ShowDrawings = blnOptAnsZeichnungen 'Ausführen
'Extras Optionen Ansicht 'Objektanker'
abfragen
blnOptAnsObjektAnker = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsObjektAnker")
'Vom INI lesen
Options.Application.ActiveWindow.View.ShowObjectAnchors = blnOptAnsObjektAnker 'Ausführen
'Extras Optionen Ansicht 'Textbegrenzungen'
abfragen
blnOptAnsTextbegre = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsTextbegre")
'Vom INI lesen
Options.Application.ActiveWindow.View.ShowTextBoundaries
= blnOptAnsTextbegre 'Ausführen
'Extras Optionen Ansicht
'Hervorhebungen' abfragen
blnOptAnsHervorhebung = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsHervorhebung")
'Vom INI lesen
Options.Application.ActiveWindow.View.ShowHighlight = blnOptAnsHervorhebung 'Ausführen
'--- Extras Optionen Einstellungen: Drucken
abfragen ---
'Extras Optionen Drucken 'Felder
aktualisieren' abfragen
blnOptDruckFeldfunkt = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckFeldfunkt")
'Vom INI lesen
Options.UpdateFieldsAtPrint =
blnOptDruckFeldfunkt 'Ausführen
'Extras Optionen Drucken 'Verknüpfungen
aktualisieren' abfragen
blnOptDruckVerknAkt = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckVerknAkt")
'Vom INI lesen
Options.UpdateFieldsAtPrint =
blnOptDruckVerknAkt 'Ausführen
'Extras Optionen Drucken 'Feldfunktionen
drucken' abfragen
blnOptDruckFelderAusdr = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckFelderAusdr")
'Vom INI lesen
Options.UpdateFieldsAtPrint =
blnOptDruckFelderAusdr 'Ausführen
'Extras Optionen Drucken 'Ausgeblendeter
Text drucken' abfragen
blnOptDruckAusgeblenTxt = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckAusgeblenTxt")
'Vom INI lesen
Options.UpdateFieldsAtPrint =
blnOptDruckAusgeblenTxt 'Ausführen
'Extras Optionen Drucken 'Zeichnungsobjekte
drucken' abfragen
blnOptDruckZeichnungsobj = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckZeichnungsobj")
'Vom INI lesen
Options.UpdateFieldsAtPrint =
blnOptDruckZeichnungsobj 'Ausführen
'Extras Optionen Drucken 'Drucken
umgekehrter Reihenfolge' abfragen
blnOptDruckUmgekehrtReih = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckUmgekehrtReih")
'Vom INI lesen
Options.UpdateFieldsAtPrint =
blnOptDruckUmgekehrtReih 'Ausführen
'Extras Optionen Drucken
'Standardschacht' abfragen
strOptDruckSchachtEinst = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="strOptDruckSchachtEinst")
'Vom INI lesen
Options.DefaultTray =
strOptDruckSchachtEinst 'Ausführen
'--- Extras Optionen Einstellungen:
abfragen ---
'Optionen Speichern 'Word-Dateien speichern
unter' abfragen
strOptSpeichDatSpeichUnt = System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="strOptSpeichDatSpeichUnt")
'Vom INI lesen
Options.Application.DefaultSaveFormat = strOptSpeichDatSpeichUnt
'Ausführen
End If
End Sub
Dim blnOptAnsHorizBildl As Boolean
Dim blnOptAnsVertikBildl As Boolean
Dim blnOptAnsLeftScroBar As Boolean
Dim sngOptAnsFormatAnsSeit As Single
Dim blnOptAnsRightRuler As Boolean
Dim blnOptAnsQuikInfo As Boolean
Dim blnOptAnsAnimiText As Boolean
Dim blnOptAnsKonzSchrift As Boolean
Dim blnOptAnsFenstrbrUmbr As Boolean
Dim blnOptAnsPlatzhGrafik As Boolean
Dim blnOptAnsFeldfunkt As Boolean
Dim blnOptAnsTextmarkAnz As Boolean
Dim lngOptAnsFeldSchattier As Long
Dim blnOptAnsTabZeichen As Boolean
Dim blnOptAnsLeerZeichen As Boolean
Dim blnOptAnsAbsatzMarken As Boolean
Dim blnOptAnsBedingtTrennz As Boolean
Dim blnOptAnsAusgblText As Boolean
Dim blnOptAnsAlle As Boolean
Dim blnOptAnsZeichnungen As Boolean
Dim blnOptAnsObjektAnker As Boolean
Dim blnOptAnsTextbegre As Boolean
Dim blnOptAnsHervorhebung As Boolean
Dim blnOptDruckFeldfunkt As Boolean
Dim blnOptDruckVerknAkt As Boolean
Dim blnOptDruckFelderAusdr As Boolean
Dim blnOptDruckAusgeblenTxt As Boolean
Dim blnOptDruckZeichnungsobj As Boolean
Dim blnOptDruckUmgekehrtReih As Boolean
Dim strOptDruckSchachtEinst As
String
Dim strOptSpeichDatSpeichUnt As
String
On Error Resume
Next 'Falls mal ein Eintrag im Word fehlt.
'--- Extras Optionen
Einstellungen: Ansicht ins INI schreiben ---
'Extras Optionen
Ansicht 'Horizontale Bildlaufleiste' abfragen
blnOptAnsHorizBildl = Options.Application.ActiveWindow.DisplayHorizontalScrollBar
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsHorizBildl") = blnOptAnsHorizBildl 'Ins INI schreiben
'Extras Optionen
Ansicht 'Vertikale Bildlaufleiste' abfragen
blnOptAnsVertikBildl = Options.Application.ActiveWindow.DisplayVerticalScrollBar
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsVertikBildl") = blnOptAnsVertikBildl 'Ins INI
schreiben
'Extras Optionen Ansicht ???
abfragen
blnOptAnsLeftScroBar = Options.Application.ActiveWindow.DisplayLeftScrollBar
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsLeftScroBar") = blnOptAnsLeftScroBar 'Ins INI
schreiben
'Extras Optionen
Ansicht wird links 2 cm die
Formatvorlagen der Zeilen angezeigt
sngOptAnsFormatAnsSeit = Options.Application.ActiveWindow.StyleAreaWidth
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="sngOptAnsFormatAnsSeit") = sngOptAnsFormatAnsSeit 'Ins INI
schreiben
'Extras Optionen
Ansicht hat irgendwie mit der Ansicht zutun
blnOptAnsRightRuler = Options.Application.ActiveWindow.DisplayRightRuler
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsRightRuler") = blnOptAnsRightRuler 'Ins INI schreiben
'Extras Optionen
Ansicht 'QuikInfo' abfragen
blnOptAnsQuikInfo = Options.Application.ActiveWindow.DisplayScreenTips
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsQuikInfo") = blnOptAnsQuikInfo 'Ins INI schreiben
'Extras Optionen
Ansicht 'Animierter Text' abfragen
blnOptAnsAnimiText = Options.Application.ActiveWindow.View.ShowAnimation
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsAnimiText") = blnOptAnsAnimiText 'Ins INI schreiben
'Extras Optionen
Ansicht 'Konzeptschriftart' abfragen
blnOptAnsKonzSchrift = Options.Application.ActiveWindow.View.Draft
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsKonzSchrift") = blnOptAnsKonzSchrift 'Ins INI
schreiben
'Extras Optionen
Ansicht 'Auf Fensterbreite umbrechen' abfragen
blnOptAnsFenstrbrUmbr = Options.Application.ActiveWindow.View.WrapToWindow
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsFenstrbrUmbr") = blnOptAnsFenstrbrUmbr 'Ins INI
schreiben
'Extras Optionen
Ansicht 'Platzhalter für Grafiken anzeigen' abfragen
blnOptAnsPlatzhGrafik = Options.Application.ActiveWindow.View.ShowPicturePlaceHolders
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsPlatzhGrafik") = blnOptAnsPlatzhGrafik 'Ins INI
schreiben
'Extras Optionen
Ansicht 'Feldfunktonen anzeigen' abfragen
blnOptAnsFeldfunkt = Options.Application.ActiveWindow.View.ShowFieldCodes
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsFeldfunkt") = blnOptAnsFeldfunkt 'Ins INI schreiben
'Extras Optionen
Ansicht 'Textmarken anzeigen' abfragen
blnOptAnsTextmarkAnz = Options.Application.ActiveWindow.View.ShowBookmarks
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsTextmarkAnz") = blnOptAnsTextmarkAnz 'Ins INI
schreiben
'Extras Optionen
Ansicht 'Bildschirm-Schattierung für Formularfelder' immer abfragen
lngOptAnsFeldSchattier = Options.Application.ActiveWindow.View.FieldShading
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="lngOptAnsFeldSchattier") = lngOptAnsFeldSchattier 'Ins INI
schreiben
'Extras Optionen
Ansicht 'Tabstopzeichen' abfragen
blnOptAnsTabZeichen = Options.Application.ActiveWindow.View.ShowTabs
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsTabZeichen") = blnOptAnsTabZeichen 'Ins INI schreiben
'Extras Optionen
Ansicht 'Leerzeichen' abfragen
blnOptAnsLeerZeichen = Options.Application.ActiveWindow.View.ShowSpaces
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsLeerZeichen") = blnOptAnsLeerZeichen 'Ins INI
schreiben
'Extras Optionen
Ansicht 'Absatzmarken' abfragen
blnOptAnsAbsatzMarken = Options.Application.ActiveWindow.View.ShowParagraphs
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsAbsatzMarken") = blnOptAnsAbsatzMarken 'Ins INI
schreiben
'Extras Optionen
Ansicht 'Bedingte Trennzeichen' abfragen
blnOptAnsBedingtTrennz = Options.Application.ActiveWindow.View.ShowHyphens
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsBedingtTrennz") = blnOptAnsBedingtTrennz 'Ins INI
schreiben
'Extras Optionen
Ansicht 'Ausgeblendeten Text' abfragen
blnOptAnsAusgblText = Options.Application.ActiveWindow.View.ShowHiddenText
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsAusgblText") = blnOptAnsAusgblText 'Ins INI schreiben
'Extras Optionen Ansicht 'ALLE' abfragen
blnOptAnsAlle = Options.Application.ActiveWindow.View.ShowAll
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsAlle") = blnOptAnsAlle 'Ins INI schreiben
'Extras Optionen
Ansicht 'Zeichnungen' abfragen
blnOptAnsZeichnungen = Options.Application.ActiveWindow.View.ShowDrawings
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsZeichnungen") = blnOptAnsZeichnungen 'Ins INI
schreiben
'Extras Optionen
Ansicht 'Objektanker' abfragen
blnOptAnsObjektAnker = Options.Application.ActiveWindow.View.ShowObjectAnchors
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsObjektAnker") = blnOptAnsObjektAnker 'Ins INI
schreiben
'Extras Optionen
Ansicht 'Textbegrenzungen' abfragen
blnOptAnsTextbegre = Options.Application.ActiveWindow.View.ShowTextBoundaries
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsTextbegre") = blnOptAnsTextbegre 'Ins INI schreiben
'Extras Optionen
Ansicht 'Hervorhebungen' abfragen
blnOptAnsHervorhebung = Options.Application.ActiveWindow.View.ShowHighlight
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptAnsHervorhebung") = blnOptAnsHervorhebung 'Ins INI
schreiben
'--- Extras Optionen
Einstellungen: Drucken ins INI schreiben ---
'Extras Optionen
Drucken 'Felder aktualisieren' abfragen
blnOptDruckFeldfunkt = Options.UpdateFieldsAtPrint
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckFeldfunkt") = blnOptDruckFeldfunkt 'Ins INI
schreiben
'Extras Optionen
Drucken 'Verknüpfungen aktualisieren' abfragen
blnOptDruckVerknAkt = Options.UpdateFieldsAtPrint
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckVerknAkt") = blnOptDruckVerknAkt 'Ins INI schreiben
'Extras Optionen
Drucken 'Feldfunktionen drucken' abfragen
blnOptDruckFelderAusdr = Options.UpdateFieldsAtPrint
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckFelderAusdr") = blnOptDruckFelderAusdr 'Ins INI
schreiben
'Extras Optionen
Drucken 'Ausgeblendeter Text drucken' abfragen
blnOptDruckAusgeblenTxt = Options.UpdateFieldsAtPrint
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckAusgeblenTxt") = blnOptDruckAusgeblenTxt 'Ins INI
schreiben
'Extras Optionen
Drucken 'Zeichnungsobjekte drucken' abfragen
blnOptDruckZeichnungsobj = Options.UpdateFieldsAtPrint
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckZeichnungsobj") = blnOptDruckZeichnungsobj 'Ins INI
schreiben
'Extras Optionen
Drucken 'Drucken umgekehrter Reihenfolge' abfragen
blnOptDruckUmgekehrtReih = Options.UpdateFieldsAtPrint
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="blnOptDruckUmgekehrtReih") = blnOptDruckUmgekehrtReih 'Ins INI
schreiben
'Extras Optionen
Drucken 'Standardschacht' abfragen
strOptDruckSchachtEinst = Options.DefaultTray
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="strOptDruckSchachtEinst") = strOptDruckSchachtEinst 'Ins INI
schreiben
'--- Extras Optionen
Einstellungen: abfragen ---
'Optionen Speichern
'Word-Dateien speichern unter' einstellen
strOptSpeichDatSpeichUnt = Options.Application.DefaultSaveFormat
System.PrivateProfileString(FileName:="C:\AnsEinst.ini", _
Section:="WordAnsichtEinstellung",
Key:="strOptSpeichDatSpeichUnt") = strOptSpeichDatSpeichUnt 'Ins INI
schreiben
End Sub
On Error Resume
Next 'Falls mal ein Eintrag im Word fehlt.
'--- Extras Optionen
Einstellungen: Ansicht ---
'Extras Optionen
Ansicht 'Horizontale Bildlaufleiste' aktivieren
Options.Application.ActiveWindow.DisplayHorizontalScrollBar = True
'Extras Optionen
Ansicht 'Vertikale Bildlaufleiste' aktivieren
Options.Application.ActiveWindow.DisplayVerticalScrollBar
= True
'Extras Optionen Ansicht ???
aktivieren
'Options.Application.ActiveWindow.DisplayLeftScrollBar = True
'Extras Optionen
Ansicht wird links 0 cm die
Formatvorlagen der Zeilen angezeigt
'Options.Application.ActiveWindow.StyleAreaWidth =
CentimetersToPoints(0)
'Extras Optionen
Ansicht hat irgendwie mit der Ansicht zutun
Options.Application.ActiveWindow.DisplayRightRuler
= True
'Extras Optionen Ansicht 'QuikInfo' aktivieren
Options.Application.ActiveWindow.DisplayScreenTips
= True
'Extras Optionen Ansicht 'Animierter Text' aktivieren
Options.Application.ActiveWindow.View.ShowAnimation = True
'Extras Optionen
Ansicht 'Konzeptschriftart' aktivieren
Options.Application.ActiveWindow.View.Draft = False
'Extras Optionen
Ansicht 'Auf Fensterbreite umbrechen' aktivieren
Options.Application.ActiveWindow.View.WrapToWindow = False
'Extras Optionen
Ansicht 'Platzhalter für Grafiken anzeigen' aktivieren
Options.Application.ActiveWindow.View.ShowPicturePlaceHolders = False
'Extras Optionen
Ansicht 'Feldfunktonen anzeigen' aktivieren
Options.Application.ActiveWindow.View.ShowFieldCodes = False
'Extras Optionen
Ansicht 'Textmarken anzeigen' aktivieren
Options.Application.ActiveWindow.View.ShowBookmarks = True
'Extras Optionen
Ansicht 'Bildschirm-Schattierung für Formularfelder' immer aktivieren
Options.Application.ActiveWindow.View.FieldShading = wdFieldShadingAlways
'Extras Optionen
Ansicht 'Tabstopzeichen' aktivieren
Options.Application.ActiveWindow.View.ShowTabs = True
'Extras Optionen
Ansicht 'Leerzeichen' aktivieren
Options.Application.ActiveWindow.View.ShowSpaces = True
'Extras Optionen
Ansicht 'Absatzmarken' aktivieren
Options.Application.ActiveWindow.View.ShowParagraphs = True
'Extras Optionen
Ansicht 'Bedingte Trennzeichen' aktivieren
Options.Application.ActiveWindow.View.ShowHyphens = True
'Extras Optionen
Ansicht 'Ausgeblendeten Text' aktivieren
Options.Application.ActiveWindow.View.ShowHiddenText = True
'Extras Optionen
Ansicht 'ALLE' aktivieren
Options.Application.ActiveWindow.View.ShowAll = True
'Extras Optionen
Ansicht 'Zeichnungen' aktivieren
Options.Application.ActiveWindow.View.ShowDrawings = True
'Extras Optionen
Ansicht 'Objektanker' aktivieren
Options.Application.ActiveWindow.View.ShowObjectAnchors
= True
'Extras Optionen
Ansicht 'Textbegrenzungen' aktivieren
Options.Application.ActiveWindow.View.ShowTextBoundaries = True
'Extras Optionen
Ansicht 'Hervorhebungen' aktivieren
Options.Application.ActiveWindow.View.ShowHighlight = True
'--- Extras Optionen
Einstellungen: Drucken ---
'Optionen Drucken
'Felder aktualisieren' aktivieren
Options.UpdateFieldsAtPrint
= True
'Optionen Drucken
'Verknüpfungen aktualisieren' aktivieren
Options.UpdateLinksAtPrint
= True
'Optionen Drucken
'Feldfunktionen drucken' aktivieren
Options.PrintFieldCodes
= False
'Optionen Drucken
'Ausgeblendeter Text drucken' aktivieren
Options.PrintHiddenText
= False
'Optionen Drucken
'Zeichnungsobjekte drucken' aktivieren
Options.PrintDrawingObjects
= True
'Optionen Drucken
'Drucken umgekehrter Reihenfolge'
aktivieren
Options.PrintReverse
= False
'Optionen Drucken
'Standardschacht' einstellen
Options.DefaultTray
= "Druckereinstellungen verwenden"
'--- Extras Optionen
Einstellungen: Speichern ---
'Optionen Speichern
'Word-Dateien speichern unter' einstellen
Options.Application.DefaultSaveFormat
= ""
End Sub
Im Add-Ins überprüfen ob das generali.dot installiert ist.
Sub GlobaleVorlageInstalliert()
For Each ad In AddIns
If ad.Installed = True Then
If ad.Name = "generali.dot" Then
MsgBox ad.Name & " ist installiert"
End If
End If
Next ad
End Sub
oder
Sub AddInInstalliert()
'Feststellen,
ob AddIn installiert ist
If AddIns("Generali.dotm").Installed
= True Then
MsgBox "Generali.dotm add-in is installed"
Else
MsgBox "Generali.dotm add-in is not installed"
End If
End
Sub
' Aufruf des Makros 'Kind' aus diesem
Makro heraus.
Public Sub Mutter()
WordBasic.MsgBox "Dies ist das Makro 'Mutter' vor dem ExtrasAusführen."
WordBasic.ToolsMacro Name:="Kind",
Run:=1
WordBasic.MsgBox "Dies ist das Makro 'Mutter' nach dem ExtrasAusführen."
End Sub
' Dieses Makro wird aus dem Makro
Mutter aufgerufen
Public
Sub Kind()
WordBasic.MsgBox "Dies ist das Makro Kind."
End
Sub
' Markierter Text in Variable einlesen
und gespiegelt wieder einfühgen.
Sub Spiegeln()
If Selection.Type <> wdSelectionNormal Then
MsgBox "Es ist kein Text markiert."
End
End If
For i = Len(Selection.Text) To 1 Step -1
strT = strT & Mid(Selection.Text, i, 1)
Next i
Selection.Text = strT
End
Sub
Public
Sub IstWortVorhanden()
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:="100stel", Forward:=True
If myRange.Find.Found = True Then
MsgBox "gefunden"
Else
MsgBox "nicht gefunden"
End If
End
Sub
Public Sub AbfragenJaNein()
Dim intFrageDrucken As Integer
intFrageDrucken = MsgBox("Soll das Dokument mit den aufgelisteten Modulen ausgedruckt werden ?", vbYesNo + vbQuestion, _
" Module Drucken ...")
If intFrageDrucken = 6 Then
MsgBox "Das Dokument wird jetzt gedruckt"
End If
If intFrageDrucken = 7 Then
MsgBox "Das Dokument wird nicht ausgedruckt!"
End If
End
Sub
' Erstellt 18.07.2001 Pirmin Steiner
' Beispiel wie aus einer Prozedur eine
Unterfunktion
' aufgerufen werden kann. Nach der
Unterfunktion wird
' die laufende Prozedur zuende
gelaufen.
Sub SubrutineAufrufen()
Selection.TypeText Text:="Die ist ein Text."
Subrutine 'Unterfunktion aufrufen
End Sub
Private Sub Subrutine()
MsgBox "Diese ist die Subrutine von der Prozedur SubrutineAufrufen."
End Sub
' Jedoch nicht fertig getestet (enthält
diverse Variablen?!)
Public
Sub Assistent()
'Private
Function BlaseAnzeigen()
Set oBlase =
Assistant.NewBalloon
With oBlase
.Mode =
msoModeModal
.BalloonType
= msoBalloonTypeButtons
.Icon =
msoIconTip
.Heading = asTitle & " (DO/stp)"
tmp = "Diese Routine druckt alle Module einer Dokumentenvorlage oder eines "
tmp = tmp & "Dokumentes." & vbCrLf & vbCrLf & "Als erstes werden Sie "
.Text = tmp & "aufgefordert, eine Vorlage oder ein Dokument zu öffnen."
.Button = msoButtonSetOkCancel
BlaseAnzeigen = .Show
End With
'End Function
End Sub
Sub Makro1()
' Gibt mit MsgBox den aktuell eingestellten Printer aus.
MsgBox "The
name of the active printer is " & ActivePrinter
' Stellt den Standardprinter ein.
ActivePrinter = ""
' Gibt mit MsgBox den aktuell eingestellten Printer aus.
MsgBox "The
name of the active printer is " & ActivePrinter
End Sub
Sub WertTextmarkeAbFragen()
Dim strSysEditLesen As String
'Ist die Textmarke SysEdit vorhanden...
If
ActiveDocument.Bookmarks.Exists("SysEdit") = True Then
'Textmarkeninhalt in Variable lesen
strSysEditLesen = ActiveDocument.Bookmarks("SysEdit").Range.Text
If strSysEditLesen
= "1" Then
MsgBox "Der Inhalt
der Textmarke ist: " & strSysEditLesen & " !"
End If
End If
End Sub
Sub AddInsAnhängen()
' AddIns anhängen......
AddIns("C:\pgm\autotext.dot").Installed =
True
With
ActiveDocument
.UpdateStylesOnOpen
= False
.AttachedTemplate
= "Normal"
End With
End
Sub
Sub AddInsAbhängen()
' AddIns abhängen......
AddIns("C:\pgm\autotext.dot").Installed = False
With
ActiveDocument
.UpdateStylesOnOpen
= False
.AttachedTemplate
= "Normal"
End With
End Sub
For Each aAddIn In AddIns
MsgBox aAddIn.Name
Next aAddIn
Sub AutoTexte()
' Erstellt 31.08.2001 DO/stp
' Anhängen oder Abhängen der AddIn
Autotext.dot
'
Dim strAutoText As
String
For Each ad In AddIns
If ad.Installed = True Then
If ad.Name = "autotext.dot" Then
strAutoText = 1
Else
strAutoText = 0
End If
End If
Next ad
If strAutoText = 0 Then
' AddIns anhängen......
AddIns("C:\pgm\autotext.dot").Installed =
True
With
ActiveDocument
.UpdateStylesOnOpen
= False
.AttachedTemplate
= "Normal"
End With
End
If
If strAutoText = 1 Then
' AddIns abhängen......
AddIns("C:\pgm\autotext.dot").Installed = False
With
ActiveDocument
.UpdateStylesOnOpen
= False
.AttachedTemplate
= "Normal"
End With
End
If
End
Sub
Public Sub Programmstarten()
Dim Ergebnis
Ergebnis = Shell("C:\WINNT\system32\CALC.EXE", 1) ' Rechner starten.
End Sub
'Hier wird das aktive Fenster
maximiert, wenn es
'vollbild
hat.
If
ActiveDocument.ActiveWindow _
.WindowState
= wdWindowStateMaximize Then _
ActiveDocument.ActiveWindow.WindowState
= wdWindowStateNormal
'Hier wird das aktive Fenster
maximiert, wenn es minimiert ist.
If
ActiveDocument.ActiveWindow _
.WindowState
= wdWindowStateMinimize Then _
ActiveDocument.ActiveWindow.WindowState
= wdWindowStateNormal
' Erstellt 06.08.2001 DO/stp
' Gibt eine MsgBox heraus auf welcher
Seite der Cursor steht.
' Bei einer Markierung wird der Schluss
der Markierung angegeben.
Sub SeiteWelche()
MsgBox "Die selektierte Seite ist die " & _
Selection.Information(wdActiveEndPageNumber) & ". von gesammt " _
& Selection.Information(wdNumberOfPagesInDocument) & " Seiten."
End Sub
' Erstellt 06.08.2001 DO/stp
' Die Seitennummer wird in die Variable
SeitenNummervar abgefüllt.
Public
Sub SeitenNrInVariable()
Dim SeitenNummervar As Variant
SeitenNummervar
= Selection.Information(wdActiveEndPageNumber)
End
Sub
Public Sub BeginnSeite()
Dim SeitenNummervar As Variant
SeitenNummervar = Selection.Information(wdActiveEndPageNumber) 'Welche Seite ist der Corusor
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=SeitenNummervar 'Auf Beginn dieser Seite springen
End Sub
' Es kann in einem Projekt ein Makro
aufgerufen werden und dieses erst nach einer gewissen Zeit laufen gelassen
werden.
' Hier wird ein Makro aufgerufen und
dieses erst nach 6 Sekunden laufen gelassen.
Application.OnTime When:=Now + TimeValue("00:00:06"), _
Name:="TemplateProject.OptionenAnsichtLesen.OptionenAnsichtLesen"
Public Sub TestOptionen()
' Ist minimum ein Fenster in Word
aktiv.
If
Documents.Count >= 1 Then
MsgBox ActiveDocument.Name '
Else
'
Anderenfalls wird zuerst ein leeres Dokument geöffnte und danach
'
wieder geschlossen.
MsgBox "Es ist kein Dokument geöffnet."
Documents.Add DocumentType:=wdNewBlankDocument
MsgBox "Es ist jetzt ein neues Dokument geöffnet." & " " & vbLf & "Der Name ist " & ActiveDocument.Name
ActiveDocument.Close
End
If
End
Sub
Public Sub FensterNachNamenAktivieren()
Dim strDocName As String
'Dokumentnamen in Variable lesen
strDocName = ActiveDocument.Name
Documents(strDocName).Activate
'***********************************************************************
'Hier wird das aktive Fenster
minimiert, wenn es vollbild hat.
If
Documents(strDocName).ActiveWindow.WindowState
= wdWindowStateMaximize Then _
Documents(strDocName).ActiveWindow.WindowState = wdWindowStateMinimize
'Hier wird das aktive Fenster
minimiert, wenn es maximiert ist.
If
Documents(strDocName).ActiveWindow.WindowState
= wdWindowStateNormal Then _
Documents(strDocName).ActiveWindow.WindowState = wdWindowStateMinimize
'***********************************************************************
End Sub
If PrintPreview = True Then
ActiveDocument.ClosePrintPreview
End If
Public Sub DocListe()
Dim intDocZähler As Integer 'Zälervarable als Integer festlegen.
Dim strDateiname() As String 'Anzahl der Variablen auf 10 festlegen
ReDim strDateiname(10) ' Grösse auf 100 Elemente ändern.
' So kann eine Variable mit einer
Nummer versehen werden und damit muss diese nur einmal geschrieben werden.
intDocZähler = Documents.Count 'Variablenwert definieren
For Each aDoc In Documents
aName = aDoc.Name
Count = Count + 1 'Counter angeben mit welchem wert gezählt wird
a = Count
strDateiname(a) = aName
'
Hier wird ins UserEinstellungen.ini eingetragen welche Dokumente
'
der User geöffnet hat.
System.PrivateProfileString(FileName:="C:\UserEinstellungen.ini", _
Section:="WordAnsichtDokumentfenster", Key:="strDateiname" & a) = strDateiname(a) 'Ins INI schreiben
Next aDoc
'
Hier wird
End Sub
Kommt von:
Public
Sub DocsListe()
For Each aDoc In Documents
aName = aDoc.Name
' MsgBox aName
Next aDoc
End Sub
Public Sub DateienTempLöschen()
On Error GoTo Ende: 'Falls mal alle Dateien schon gelöscht sind.
ChangeFileOpenDirectory "C:\temp\"
Kill "*.*" ' Alle Dateien löschen
Ende:
End Sub
'Listet die installierten Schriftarten
in einem Dokument auf.
Public Sub SchriftartenListe()
Documents.Add
For Each dieseSchriftart In FontNames
With Selection
.InsertAfter
dieseSchriftart & vbCr
.MoveUp Unit:=wdParagraph, Count:=1
.MoveDown
Unit:=wdParagraph, Count:=1, Extend:=wdExtend
.Font.Name = dieseSchriftart
.MoveDown Unit:=wdParagraph, Count:=1
End With
Next
End
Sub
Sub WinTipsHolen()
Dim Tip As String, TipNr As Integer
Documents.Add
Do
Tip = System.PrivateProfileString("",
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Tips",
LTrim$(Str$(TipNr)))
If Tip >
"" Then
Selection.InsertAfter Format(TipNr, _
"00:
") & Tip & Chr$(13)
TipNr = TipNr + 1
End If
Loop While Tip
> ""
Selection.Collapse _
Direction:=wdCollapseEnd
End Sub
If ActiveDocument.Bookmarks.Exists("SysPolice") = True Then
Application.Run "ProjectGenerali.VorDemDruckenPolice.VorDemDruckenPolice" ' Modul ausführen
End If
Sub AssistentSichtbarMachen()
'Macht den Office Assistent Sichtbar
und Animiert diesen.
With
Application.Assistant
.Visible = True
.Sounds = True
.Animation =
msoAnimationBeginSpeaking
End
With
End
Sub
Public Sub WordAusblenden()
'Mit diesem Befehl kann Word
ausgeblendet (False) oder wieder
'eingeblendet werden.
Application.Visible = True
End Sub
Private Sub DatumRechnen()
' DateDiff-Funktion (Beispiel)
' In diesem Beispiel wird die
DateDiff-Funktion verwendet,
' um die Anzahl von Tagen, die zwischen
einem vorgegebenen Datum
' und dem heutigen Tag liegen,
anzuzeigen.
Dim Datum1 As Date ' Variablen deklarieren.
Dim Msg
Datum1 = InputBox("Geben Sie ein Datum ein")
Msg = "Tage von heute an: " & DateDiff("d", Now, Datum1)
MsgBox Msg
End Sub
Dim datDatum As Date
datDatum = "01.01.2021"
datDatzumDazu = DateAdd("yyyy", 3, datDatum)
datDatum = "01.01.2021"
Lastday = DateSerial(Year(datDatum), Month(datDatum), 0)
MsgBox Lastday
Sub MonatsendeJahreDazuDatumAufTM()
Dim datDatum As Date
datDatum = "01.01.2021"
datDatzumDazu = DateAdd("yyyy", 3, datDatum)
Lastday = DateSerial(Year(datDatzumDazu), Month(datDatzumDazu), 0)
'MsgBox Lastday
ActiveDocument.Bookmarks("MonatsendeDatumAufTM").Range.Text =
Lastday
End
Sub
oder mit Textmarken auf einem Dokument. Die Textmarke wir wieder neu gesetzt
' Erstellt: 05.07.2021 Pirmin Steiner
' Die Kündigung im RVG ist erst nach
dem 3. Jahr nach Vertragsbeginnn möglich.
' Also, Vertragbeginn + 3 Jahre, Ende
Vormonat
' Da die Vertragbeginnen auch an
irgendeinem Tag im Monat sein können,
' gilt immer die Kündigung ber Ende
Vormonat.
' Falls dieses Dokument einmal im HCS
aufbereitet werden muss und keine solche
' Automation möglich ist, muss dies per
PopUp gelöst werden.
' Ein PopUp hatte die FA schon hier
verlangt, da wir aber dem Fachbereich eine
' gute Lösung anbieten wollen, haben
wir dies per Makro gelöst.
' Somit muss der User hier keine
Interaktion mehr machen.
Public
Sub MAIN()
Dim datDatum As
Date
If ActiveDocument.Bookmarks.Exists("vertragbeginn") Then
datDatum = ActiveDocument.Bookmarks("vertragbeginn").Range.Text
datDatzumDazu =
DateAdd("yyyy", 3, datDatum)
Lastday =
DateSerial(Year(datDatzumDazu), Month(datDatzumDazu), 0)
If
ActiveDocument.Bookmarks.Exists("SysFruehesteKundigung") Then
Set rng
= ActiveDocument.Bookmarks("SysFruehesteKundigung").Range
rng.Text
= Lastday
ActiveDocument.Bookmarks.Add "SysFruehesteKundigung", rng
End If
End If
End
Sub
Dim Datum1, Datum2, Datum3
Datum1 = Date ' Datum zuweisen.
Datum2 = Date ' Datum zuweisen.
Datum3 = Date ' Datum zuweisen.
Jahr1 = Year(Datum1)
Monat1 = Month(Datum2)
Tag1 = Day(Datum3)
'
Monat1 = Format(Monat1, "00")
Tag1 = Format(Tag1, "00")
'
Dim Zeit1, Zeit2, Zeit3
Zeit1 = Time ' Zeitangabe zuweisen.
Zeit2 = Time ' Zeitangabe zuweisen.
Zeit3 = Time ' Zeitangabe zuweisen.
Stunde1 = Hour(Zeit1)
Minute1 = Minute(Zeit2)
Sekunde1 = Second(Zeit3)
'
Stunde1 = Format(Stunde1, "00")
Minute1 = Format(Minute1, "00")
Sekunde1 = Format(Sekunde1, "00")
Public Sub ZufallZahl()
' Rnd-Funktion (Beispiel)
' In diesem Beispiel wird die
Rnd-Funktion verwendet,
' um eine zufällige ganze Zahl im
Bereich von 1 bis 12 zu generieren.
Dim Wert1
Wert1 = Int((12 * Rnd) + 1) ' Zufallszahl im Bereich von 1 bis 6
' generieren.
End Sub
Public Sub DateiSuchenAuflist()
' Sucht in einem vorgegebenen
Verzeichnis nach Dateien und listete diese
' in einer MsbBox den Vollen Namen
inkl. Pfad der Datei aus.
Set fs = Application.FileSearch
With fs
.LookIn =
"C:\Aabfalltest"
.FileName = "*.dot"
If .Execute > 0 Then
MsgBox "There were " & .FoundFiles.Count & _
" file(s) found." 'Hier wird angegeben wievile Datein gefunden wurden.
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "There were no files found."
End If
End
With
End
Sub
Oder noch besser
Sub Dateien_Zaehlen()
'
Einfach nur die Anzahl der Dateien zurückgeben, welche im Verzeichnis
sind.
Dim fso As Object
Set fso =
CreateObject("Scripting.FileSystemObject")
MsgBox fso.GetFolder("H:\cfg\VVxV_Fehler").Files.count
Set fso = Nothing
End Sub
' Fragt die ersten 5 Zeichen der Variable ab ob diese mit
"Check" beginnen.
If Left(strBenötigterDrucker, 5) = "Check" Then
strDrucker = strSpezialDuplex
End If
Weitere Befehle sind: Left, Mid, Right.
Mit Trim können leerzeichen dazwischen eleminiert oder unbeachtet werden.
Len(Feldname) man die aktuelle Länge eines Strings ermitteln.
intActivePrinter = Len(strActivePrinter) 'ergibt eine Zahl wie lang der String ist (38)
Zum Leerzeichen entfernen gibt es die Funktion Space
Public Sub ere()
' Ein Dialogbox nur 9 Sekunden anzeigen
Dialogs(wdDialogViewZoom).Show TimeOut:=9000
End
Sub
Sub MsgBox3Sekunden()
'
Blendet eine Msgbox nach 3 Sekunden automatisch wieder aus
' von Franz W Herber.de
' Verweis auf Microsoft Scripting
Runtime
Dim WsShell
Dim intText As
Integer
Set WsShell = CreateObject("WScript.Shell")
intText = WsShell.Popup("Diese Meldung wird nach 3 Sekunden geschlossen.", 3, "Automatisch...")
' Die 3 in der letzten Zeile gibt die
Dauer der Öffnung an.
End Sub
Sub MsgZeit()
'
Blendet eine Msgbox nach 3 Sekunden automatisch wieder aus
' Hier kann die Anzahl der Sekunden
eingegeben werden:
Const
bytZeit As Byte = 3
Dim objWSH As Object,
intMSG As Integer
Set objWSH = CreateObject("WScript.Shell")
intMSG = objWSH.Popup("Ich bin in " & bytZeit & " Sekunden verschwunden!" & Space(10), bytZeit, "gebe bekannt...")
Set objWSH = Nothing
End Sub
' Zusätzlich muss natürlich noch einen
UserForm erstellt werden, hier Zuch
Sub Main()
Zuch.Show (modal) 'Damit das Modul trotz MsgBox weiterläuft
Application.OnTime When:=Now + TimeValue("00:00:10"), _ 'Modul nach best. Zeit laufen lassen
Name:="TemplateProject.Einschreiben.Main" 'damit die UserForm ausgeblendet werden k.
End Sub
' Einschreiben Modul
Sub Main()
Unload Zuch
End Sub
Set myRange = ActiveDocument.Bookmarks("SysVtleistungB").Range
myRange.SetRange
Start:=myRange.Start, _
End:=ActiveDocument.Bookmarks("SysVtleistungtextLeistungE").Range.End
With myRange
myRange.ParagraphFormat.KeepWithNext = True
myRange.ParagraphFormat.KeepTogether = True
End With
myRange.Select 'myRange markieren
'Bis ans Ende des Dokuments markieren
oder definieren
Set myrange = ActiveDocument.Bookmarks("SysPapierPolice").Range
myrange.SetRange
Start:=myrange.Start, _
End:=ActiveDocument.Content.End
myrange.Select
Sub TextmarkenInhalt()
' Gibt den Inhalt der Textmarke zurück.
' Bei GoTo und Select wird auch bei
leerer Tm ein Wert zurückgegeben.
strTextmarkenInhalt = ActiveDocument.Bookmarks("gebunden").Range.Text
MsgBox strTextmarkenInhalt
End Sub
Dim strTextmarkenInhalt() As String
Dim intxZähler As Integer 'Zälervarable als Integer festlegen.
ReDim strTextmarkenInhalt(intTextmarkenZähler) ' Grösse auf x Elemente ändern.
'Hier wird der Inhalt der Textmarke in eine Variable gefüllt
For intxZähler = 0 To intTextmarkenZähler - 1 ' 'von 1 bis 20 durchzählen
strTextmarkenInhalt(a) = ActiveDocument.Bookmarks(strMarks(intxZähler)).Range.Text
Selection.TypeText "" &
strTextmarkenInhalt(a)
a = a + 1
Next intxZähler 'Wieder an Anfang
Public Sub AnzahlTextmarken()
Dim intAnzahlTBS As Integer
intAnzahlTBS = ActiveDocument.Bookmarks.Count
End Sub
Public Sub AutoTextAusgeben()
'Gibt den Namen und der Inhalt des
Autotextes einer Druckvorlage aus.
Set myTemplate = ActiveDocument.AttachedTemplate
MsgBox "Name des Autotextes: " & myTemplate.AutoTextEntries(1).Name & vbCr _
& "Inhalt des Autotextes: "
& myTemplate.AutoTextEntries(1).Value
End Sub
'Selection.Collapse
Direction:=wdCollapseEnd
ActiveDocument.AttachedTemplate.AutoTextEntries("copy").Insert _
Where:=Selection.Range, RichText:=True
' Um einen AutoText direkt aus einer
angehängten Dokumentvorlage Add-In einzufügen, kann folgender Befehl verwendet
' werden.
Templates("C:\PGM\autotext.dot").AutoTextEntries(strSysDbklein).Insert Where:=Selection.Range
'Das folgende Beispiel sucht das
Auftreten des Worts "hello" im aktiven Dokument und ersetzt
'dieses Wort durch "hi".
Set myRange = ActiveDocument.Content
myRange.Find.Execute
FindText:="hi", ReplaceWith:="hello", _
Replace:=wdReplaceAll
oder:
'In diesem Beispiel wird im aktiven
Dokument jede Instanz des Wortes "Start" gesucht und durch
"Ende" ersetzt.
'Die Suchoperation ignoriert
Formatierung und beachtet die Gross-/Kleinschreibung des zu
'suchenden Textes ("Start").
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
With myRange.Find
.ClearFormatting
.Text =
"Start"
With .Replacement
.ClearFormatting
.Text =
"End"
End With
.Execute Replace:=wdReplaceAll, _
Format:=True,
MatchCase:=True, _
MatchWholeWord:=True
End With
'In diesem Beispiel wird im aktiven
Dokument jede Instanz des Wortes
'"Start" gesucht und durch
"Ende" ersetzt. Die Suchoperation ignoriert
'Formatierung und beachtet die Gross-/Kleinschreibung
des zu suchenden
'Textes
("Start").
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
With myRange.Find
.ClearFormatting
.Text =
"'/"
With .Replacement
.ClearFormatting
.Text =
"End"
End With
.Execute Replace:=wdReplaceAll, _
Format:=True,
MatchCase:=True, _
MatchWholeWord:=True
End With
Public strFindText As String
Public Sub SuchenErsetzen()
' Alt + Y
' Das folgende Beispiel sucht das
Auftreten des Worts "hello" im aktiven Dokument und ersetzt dieses
Wort
'
durch "hi". Inkl. Gross- Kleinschreibung
strFindText = "GENERALI"
'Zur Subrutine zum zählen und angeben
wie manchmal es gefunden wurde
CountOccurrences
Set myRange
= ActiveDocument.Content
myRange.Find.Execute FindText:=strFindText, MatchCase:=True, ReplaceWith:="Generali", _
Replace:=wdReplaceAll
'
Hochkomma auch gleich ersetzen
Set myRange2 = ActiveDocument.Content
myRange2.Find.Execute FindText:="'", MatchCase:=True, ReplaceWith:="'", _
Replace:=wdReplaceAll
End
Sub
Public
Sub CountOccurrences()
' Gesuchtes Wort zählen und angeben
Dim iCount As
Long
Dim strSearch As
String
strSearch =
strFindText
iCount = 0
With
ActiveDocument.Content.Find
.Text =
strSearch
.Format = False
.Wrap =
wdFindStop
Do While .Execute
iCount = iCount + 1
Loop
End
With
MsgBox Chr$(34) & strSearch & Chr$(34) & " was found " & _
iCount & " times."
End Sub
' Die Variable muss am Anfang
ausserhalb der Pulic xx() und End Sub deklariert werden, wie folgt.
Option
Explicit
Public
strAbfrage1 As String
' Gibt den Namen der Formatvorlage
zurück in der der Coursor steht.
' Dies ist jedoch mit einem Autotext
verbunden.
Set myentry = NormalTemplate.AutoTextEntries.Add(Name:="rsvp", _
Range:=Selection.Range)
MsgBox myentry.StyleName
' Hier wird effektiv abgefragt um
welche Formatvorlage es sich handelt.
If Selection.Style = "Unsichtbar" Then
MsgBox "Ja die Markierung ist mit der Formatvorlage Unsichtbar versehen."
End If
Sub StandardFormatvorlageKopieren()
'Kopiert die Standardformatvorlage ins
Aktuelle Dokument
Dim strDocName As
String
strDocName = ActiveDocument.FullName
Application.OrganizerCopy
Source:="H:\daten\winword\dot2k\Normal.dot",
_
Destination:=strDocName, Name:="Standard", Object:= _
wdOrganizerObjectStyles
End
Sub
Oder Besser:
Sub StandardFormatvorlageKopieren2()
' Mit NormalTemplate wird automatisch
das Normal.dot als Quelle gewählt.
Dim strDocName As
String
strDocName = ActiveDocument.FullName
Application.OrganizerCopy Source:=NormalTemplate, _
Destination:=strDocName, Name:="Standard", Object:= _
wdOrganizerObjectStyles
End
Sub
Oder ev. besser mit NormalTemplate als fixer Teil:
Sub StandardFormatvorlageKopieren3()
Dim strDocName As String
strDocName = ActiveDocument.FullName
Application.OrganizerCopy Source:="H:\Templates\Normal.dotm", _
Destination:=strDocName, Name:="FussSeitennum", Object:= _
wdOrganizerObjectStyles
End Sub
Mit OneDrive Pfad
Sub StandardFormatvorlageKopieren()
'OK
Dim strOneDrivePath As String
strDateiName =
"Normal.dotm"
strOneDrivePath = Environ("OneDriveCommercial") & Application.PathSeparator
strOneDrivePath =
strOneDrivePath & "Templates16" & Application.PathSeparator
strOneDrivePathDatei = strOneDrivePath & strDateiName
strFormatvorlageKopieren1 = "Standard Arzt"
strFormatvorlageKopieren2 = ""
strFormatvorlageKopieren3 = ""
strFormatvorlageKopieren4 = ""
'Kopiert die Standardformatvorlage ins
Aktuelle Dokument
Dim strDocName As
String
strDocName = ActiveDocument.FullName
Application.OrganizerCopy Source:=strOneDrivePathDatei, _
Destination:=strDocName, Name:=strFormatvorlageKopieren1, Object:= _
wdOrganizerObjectStyles
End Sub
Public Sub AutoTextAusgebenAlsText()
'On Error GoTo Ende:
'Gibt den Namen und der Inhalt des
Autotextes einer Druckvorlage aus.
'myTemplate.AutoTextEntries(1) = des
Ersten Autotextes
Dim intBZähler As Integer
intBZähler = 1
Do While intBZähler <= 100 'Anzahl Durchläufe festlegen
Set myTemplate = ActiveDocument.AttachedTemplate
Selection.TypeText Text:="Name
des Autotextes:" & vbCr & vbCr & myTemplate.AutoTextEntries(intBZähler).Name & vbCr & vbCr _
& "Inhalt des Autotextes:" & vbCr & vbCr & myTemplate.AutoTextEntries(intBZähler).Value
intBZähler = intBZähler + 1 'Angeben um welchen Wert der Zähler erhöt wird
Count = Count + 1 'Counter angeben mit welchem wert gezählt wird
Selection.TypeParagraph
Selection.TypeParagraph
Selection.TypeParagraph
Selection.TypeText Text:="------------------------------------------------------------"
Selection.TypeParagraph
Loop 'Wieder an Anfang
Ende:
End Sub
If strEdit = "1" Then
If ActiveDocument.Bookmarks.Exists("SysDokSprache") = True Then
intDokSprache = ActiveDocument.Bookmarks("SysDokSprache").Range.Text
If intDokSprache
= "1" Then
strDokSprache = "d"
ElseIf intDokSprache = "2" Then
strDokSprache = "f"
ElseIf intDokSprache = "3" Then
strDokSprache = "i"
ElseIf intDokSprache = "4" Then
strDokSprache = "e"
End If
strAutoTextVorhanden = "autotext_" & strDokSprache & ".dot"
For Each ad In AddIns
If ad.Installed = True Then
If ad.Name = strAutoTextVorhanden Then
AddIns.Add FileName:="C:\pgm\" & strAutoTextVorhanden, Install:=False
End If
End If
Next ad
End If
End
If
Sub AlleVerwendetenFormatvorlagen()
'Gibt alle verwendeten Formatvorlagen
in einem Dokument retour.
Set mydoc = ActiveDocument
Msg =
"Styles in use:" & vbCr
For Each sty In mydoc.Styles
If sty.InUse = True Then
With mydoc.Content.Find
.ClearFormatting
.Text
= ""
.Style
= sty
.Execute
Format:=True
If .Found = True Then
Msg = Msg & sty & vbCr
End If
End With
End If
Next sty
MsgBox Msg
End
Sub
Sub BasisFormatvorlage()
'Gibt die Basis-Formatvorlage des
Markierten Textes zurück
base = ActiveDocument.Styles(wdStyleBodyText).BaseStyle
MsgBox base
End
Sub
Sub AlleVerwendetenFormatvorlagenAlle()
Dim intZaehlFormatvorl As Integer
ReDim strFormatvorl(300)
Dim e As Integer
'Gibt alle Formatvorlagen in einem
Dokument retour.
Set mydoc = ActiveDocument
For Each sty In mydoc.Styles
If sty.InUse = True Then
With mydoc.Content.Find
.ClearFormatting
.Text
= ""
.Style
= sty
.Execute
Format:=True
strFormatvorl(e) = sty
e = e + 1
End With
End If
Next sty
End Sub
Public Sub TabulatorenLöschenSetzen()
'Tabs händling
For Each para In ActiveDocument.Content.Paragraphs
'
Löscht alle Tabs die auf 9.5 cm gesetzt sind
para.TabStops(CentimetersToPoints(9.5)).Clear
'
Setzt diesen auf 10 cm
ActiveDocument.DefaultTabStop = CentimetersToPoints(1.25)
Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(10), _
Alignment:=wdAlignTabLeft,
Leader:=wdTabLeaderSpaces
Selection.MoveDown Unit:=wdLine, Count:=1
Next para
End Sub
'Punkt (1 cm = 28,35 Punkt). Die
geänderte Masseinheit wird als Single zurückgegeben.
Sub SeitenrandSetzten()
Dim strLinkerSeitrand As Single
Dim strRechterSeitrand As Single
strLinkerSeitrand
= ActiveDocument.PageSetup.LeftMargin
If strLinkerSeitrand = "56.7" Then
'
Nichts zu machen
Else
ActiveDocument.PageSetup.LeftMargin = "56.7" ' Ist Inches und ist genau 2 cm
End
If
strRechterSeitrand
= ActiveDocument.PageSetup.RightMargin
If strRechterSeitrand = "56.7" Then
'
Nichts zu machen
Else
ActiveDocument.PageSetup.RightMargin = "56.7" ' Ist Inches und ist genau 2 cm
End
If
End
Sub
If
ActiveDocument.Bookmarks.Exists("verteilschluesselplan") = True Then
strTextmarkenInhaltvertschlplan = ActiveDocument.Bookmarks("verteilschluesselplan").Range.Text
If (strTextmarkenInhaltvertschlplan = "201" Or strTextmarkenInhaltvertschlplan = "202") Then
MsgBox "Ja es ist eines von Beiden…!"
End If
End If
End
If
' Erstellt: 26.01.2005 ITS/stp
' Um einen bestimmten Text aus der
TKW-Tabelle zu entfernen der nur beim Kombi
' nicht erscheinen soll wurde dieses
Modul erstellt.
' Ist ein Hack der entfernt werden kann
wenn die TBS-Variable aus den RKW-Tabellen entfernt
' wurde.
' Ist halt momentan so, dass die
Kombipolicedokumente eingefügt werden und die Twindokumente
' immer noch wie bis anhin laufen
sollen.
'
Public Sub MAIN()
'
'Extras Optionen Ansicht
'Ausgeblendeten Text' aktivieren
Options.Application.ActiveWindow.View.ShowHiddenText = True
'Extras Optionen Ansicht 'ALLE'
aktivieren
Options.Application.ActiveWindow.View.ShowAll = True
'Extras Optionen Ansicht 'Feldfunktonen
anzeigen' ausschalten
Options.Application.ActiveWindow.View.ShowFieldCodes = True
'On Error GoTo Ende:
Dim intBZähler As Integer 'Zälervarable als Integer festlegen.
'
strZeichen = Chr(34)
'
'
wird anschliessend der Text gelöscht
intBZähler = 1 'Variablenwert definieren
Do While intBZähler <= 15 'Anzahl Durchläufe festlegen
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:=">= " & Chr(34) & "1"
& Chr(34), Forward:=True
If myRange.Find.Found = True Then
Selection.Find.ClearFormatting
With Selection.Find
.Text
= ">= " & Chr(34) & "1" & Chr(34)
' .Replacement.Text = "= "
& Chr(34) & "2" & Chr(34)
.Forward
= True
.Wrap
= wdFindContinue
.Format
= False
.MatchCase
= False
.MatchWholeWord
= False
.MatchWildcards
= False
.MatchSoundsLike
= False
.MatchAllWordForms
= False
End With
Selection.Find.Execute
Selection.TypeText Text:="= " & Chr(34) & "2"
& Chr(34)
' Selection.Delete Unit:=wdCharacter,
count:=1
End If
intBZähler = intBZähler + 1 'Angeben um welchen Wert der Zähler erhöt wird
count = count + 1 'Counter angeben mit welchem wert gezählt wird
Loop 'Wieder an Anfang
'
Selection.HomeKey Unit:=wdStory
Ende:
End Sub
'In diesem Beispiel wird festgestellt,
ob die Textmarke "temp" existiert und leer ist.
If
ActiveDocument.Bookmarks.Exists("temp") = True Then
If ActiveDocument.Bookmarks("temp").Empty = True Then _
MsgBox "The Temp bookmark is empty"
End If
' Liefert die einzelnen Angaben des
Datums und der Zeit in separate Variablen.
'
Dim Datum1, Jahr1
Datum1 = Date ' Datum zuweisen.
Datum2 = Date ' Datum zuweisen.
Datum3 = Date ' Datum zuweisen.
Jahr1 = Year(Datum1) ' Jahr1 enthält 1969.
Monat1 = Month(Datum2)
Tag1 = Day(Datum3)
Dim Zeit1, Sekunde1, Stunde1
Zeit1 = Time ' Zeitangabe zuweisen.
Zeit2 = Time ' Zeitangabe zuweisen.
Zeit3 = Time ' Zeitangabe zuweisen.
Stunde1 = Hour(Zeit1)
Minute1 = Minute(Zeit2)
Sekunde1 = Second(Zeit3)
End Sub
Sub NormalDotSave()
' Um das Normal.dot des Users zu saven.
On Error GoTo Fehler:
Dim Datum1, Jahr1
Datum1 = Date ' Datum zuweisen.
Datum2 = Date ' Datum zuweisen.
Datum3 = Date ' Datum zuweisen.
Jahr1 = Year(Datum1) ' Jahr1 enthält 1969.
Monat1 = Month(Datum2)
Tag1 = Day(Datum3)
Dim Zeit1, Sekunde1, Stunde1
Zeit1 = Time ' Zeitangabe zuweisen.
Zeit2 = Time ' Zeitangabe zuweisen.
Zeit3 = Time ' Zeitangabe zuweisen.
Stunde1 = Hour(Zeit1)
Minute1 = Minute(Zeit2)
Sekunde1 = Second(Zeit3)
'
Documents.Open FileName:="H:\daten\winword\dot2k\Normal.dot"
ActiveDocument.SaveAs
FileName:="H:\daten\winword\dot2k\Normal_save_" & _
Jahr1 & "." & Monat1 & "." & Tag1 & "_" & Stunde1 & "." & Minute1 & "." & Sekunde1 & ".dot"
ActiveDocument.Close
GoTo Ende:
Fehler:
MsgBox "Das Normal.dot konnte nicht gesavt werden."
On
Error Resume Next
ActiveDocument.Close
Ende:
End Sub
' Erstellt: 21.10.2010 ITS/P.Steiner
' Um die Fenster "Alle Fenster in
der Taskbar anzeigen" umzuschalten.
' Benötigt der User vermutlich
mehrfach. Falls das VVEV das Dokument
' nicht fertig aufbereitet und auf
FALSE stehen bleibt.
' Wir aufgerufen mit dem Short-Cut Ctrl
+ Alt + -
'
Public
Sub ShowWindowsInTaskbarEinAus()
'
On
Error GoTo ShowWinTaskbarEinAusEnde:
'
If Documents.count < 1 Then
Documents.Add DocumentType:=wdNewBlankDocument
strDoknameNewX = ActiveDocument.Name
blnShowWindowsInTaskbarS = Application.ShowWindowsInTaskbar
If blnShowWindowsInTaskbarS
= True Then
Application.ShowWindowsInTaskbar = False
End If
If blnShowWindowsInTaskbarS
= False Then
Application.ShowWindowsInTaskbar = True
End If
Documents(strDoknameNewX).Close SaveChanges:=wdDoNotSaveChanges
Else
'
Der User hat also schon ein Dokument offen. Dann dieses in die Variable
abspeichern.
strDoknameAktivesDokumentUser = ActiveDocument.Name
blnShowWindowsInTaskbarS = Application.ShowWindowsInTaskbar
If blnShowWindowsInTaskbarS = True Then
Application.ShowWindowsInTaskbar = False
End If
If blnShowWindowsInTaskbarS
= False Then
Application.ShowWindowsInTaskbar = True
End If
Documents(strDoknameAktivesDokumentUser).Activate
End If
ShowWinTaskbarEinAusEnde:
End Sub
' Hier werden die Warnungen
ausgeschaltet!
Application.DisplayAlerts = False
ActiveDocument.SaveAs FileName:=Output_$, AddToRecentFiles:=False
' WordBasic.FileSaveAs Name:=Output_$, _
' Format:=0, LockAnnot:=0, _
' Password:=""
' Hier werden die Warnungen wieder
eingeschaltet!
Application.DisplayAlerts = True
' Erstellt 18.07.2005 ITS/ P. Steiner
' Damit das Briefdatum auf den Briefen
mit 10 Tagen später aufgedruckt wird
' wird bei jedem Dokument das
Briefdatum abgefragt, 10 dazugerechnet und
' geprüft ob das neue Datum auf einen
Samstag oder Sonntag zu liegen kommt.
' Wenn ja, wird im ersten Fall 2 Tage
dazu-, im zweiten Fall 1 Tag dazugerechnt.1
' 12.10.2010 ITS/P.Steiner
' Ergänzt und im Generali.dotm fix
eingebaut.
' Definiert werden muss nur die
Variable "intBriefdatumPlus" im Modul "PfadFunktion".
' Da gibt man der Variable mit um wie
viele Tage man das Briefdatum verschieben will.
' Wenn die Variable dort mit 0 bestückt
wird, läuft dieses Modul nicht ab und es wird
' das Briefdatum belassen wie es ist.
' Dieses Modul wird, wenn die Variable
< 0 ist mDrucken hierhin geleitet.
'
Dim Datum1 As Date ' Variablen deklarieren.
Dim IntervallTyp As Variant 'um auch minus zu rechnen
Dim Zahl As Integer
Dim strBriefdatum As Date
Dim intWochentag As Integer
'
Public
Sub MAIN()
'strBriefdatum
= Format(Date, "dd. mmmm yyyy")
'
'Extras Optionen Ansicht
'Ausgeblendeten Text' aktivieren
Options.Application.ActiveWindow.View.ShowHiddenText = True
'Extras Optionen Ansicht 'ALLE'
aktivieren
Options.Application.ActiveWindow.View.ShowAll = True
' Variable intBriefdatumPlus um so viel
soll es erhöt werden.
If
ActiveDocument.Bookmarks.Exists("briefdatum") = True Then
strBriefdatum = ActiveDocument.Bookmarks("briefdatum").Range.Text ' TM Inhalt in Variable lesen
'
strBriefdatum & intBriefdatumPlus
IntervallTyp = "d" ' "d" gibt Tag als Intervall an.
Datum1 = strBriefdatum
Zahl = intBriefdatumPlus ' Original ohne Rechnung (Sa oder So)
strDatumNeu = DateAdd(IntervallTyp, Zahl, Datum1)
intWochentag = Format(strDatumNeu, "w")
If intWochentag = 7 Then 'Wenns ein Samstag trifft.
Zahl = intBriefdatumPlus + 2
strDatumNeu = DateAdd(IntervallTyp, Zahl, Datum1)
End If
If intWochentag = 1 Then 'Wenns ein Sonntag trifft.
Zahl = intBriefdatumPlus + 1
strDatumNeu = DateAdd(IntervallTyp, Zahl, Datum1)
End If
'
Textmarke wieder neu Abfüllen und Textmarke wieder setzen
If ActiveDocument.Bookmarks.Exists("briefdatum") Then
Set rng
= ActiveDocument.Bookmarks("briefdatum").Range
rng.Text
= strDatumNeu
ActiveDocument.Bookmarks.Add "briefdatum", rng
End If
'
End If
'Extras Optionen Ansicht
'Ausgeblendeten Text' aktivieren
Options.Application.ActiveWindow.View.ShowHiddenText = False
'Extras Optionen Ansicht 'ALLE'
aktivieren
Options.Application.ActiveWindow.View.ShowAll = False
End Sub
' Um sicherzustellen, dass im Ini
welches nicht gelöscht wird, nur die 2 letzten Editierten Dokumente
' abgelegt werden.
' Das Speicherdatum des gerade
Editier-Dokument wird im Format "yyyymmddhhmmss" definiert. Um im
Anschluss
' die Datums vergleichen zu können.
Mittels reiner Zahl.
' Somit werden immer die 2 letzen
Dokumentnamen in dem Ini abgelegt.
'
Sub IniEintragLetzteDokumente()
Dim intDokLoop As Integer
Dim strDokZeit1 As String
Dim strDokZeit2 As String
Dim strDokumentZeitZahl As String
' Resumen Next daher, da in den
Ini-File am Beginn noch keine Einträge vorhanden sind.
On
Error Resume Next
ActiveDocument.Save
strDoknameAktuell
= ActiveDocument.Name
strDokumentZeitZahl
= Format(FileDateTime(strTempPfad & strDoknameAktuell),
"yyyymmddhhmmss")
'Letzter Dokumentname aus dem Eitieren
abfragen
strDokZeit1 = System.PrivateProfileString(FileName:=strIniDateiPfad & strDoknameEditIniDatei, _
Section:="LetzteDokumenteImEditieren", Key:="Dokumentzeit1") 'Vom INI lesen
strDokZeit2 = System.PrivateProfileString(FileName:=strIniDateiPfad & strDoknameEditIniDatei, _
Section:="LetzteDokumenteImEditieren", Key:="Dokumentzeit2") 'Vom INI lesen
If strDokZeit1 = "" Then
intDokLoop = 1
ElseIf
strDokZeit2 =
"" Then
intDokLoop = 2
ElseIf
strDokZeit1 >
strDokZeit2 Then
intDokLoop = 2
ElseIf
strDokZeit1 <
strDokZeit2 Then
intDokLoop = 1
Else
intDokLoop = 1
End If
' Für letztes Dokument im Editieren
' Dateiname des letzten Dokuments ins
INI speichern. Damit es später wieder abgerufen werden kann
System.PrivateProfileString(FileName:=strIniDateiPfad & strDoknameEditIniDatei, _
Section:="LetzteDokumenteImEditieren", Key:="Dokumentname" & intDokLoop) = strDoknameAktuell 'Ins INI schreiben
System.PrivateProfileString(FileName:=strIniDateiPfad & strDoknameEditIniDatei, _
Section:="LetzteDokumenteImEditieren", Key:="Dokumentzeit" & intDokLoop) = strDokumentZeitZahl 'Ins INI schreiben
End Sub
' Erstellt: ITS/P.Steiner 27.06.2012
' Um die von einem Absturz (noch
offenen) ~Dateien der Add-Ins von Word
' zu löschen, werden diese mittels
dieses Moduls gelöscht.
' Da unter Citrix die Bat-Dateien
gesperrt sind, werden diese mittels Makro
' gelöscht. Obwohl dies nicht gerade
elegant ist, da Word ja schon offen ist.
' Leider funktioniert das Löschen aller
~Dateien im ganzen Home unter VBA nicht.
' Daher werden die Dateien halt
aufgelistet.
' Zuerst wird das Attribut der Datei
von Versteckt auf Normal gestellt
' um diese im Anschluss zu löschen.
' Wird mit dem ShortCut Ctrl + Alt + M
gestartet
'
Public Sub NochOffeneKorDatLoe()
Dim strDateiVorhandenMeldung As String
Dim strDateiVorhanden As String
Dim strNormalUDatei As String
Dim strGeneraliUDatei As String
Dim strGeneraliRibbUDatei As String
Dim strAutTextUDatei As String
Dim strAutTextDUDatei As String
Dim strAutTextFUDatei As String
Dim strAutTextIUDatei As String
Dim strAutTextEUDatei As String
' ev. mit Pfadfunktion
On
Error Resume Next
strNormalUDatei
= "H:\Templates\~$Normal.dotm"
SetAttr strNormalUDatei, vbNormal
strDateiVorhanden = Dir(strNormalUDatei)
If strDateiVorhanden <> "" Then
strDateiVorhandenMeldung = strNormalUDatei
Kill (strNormalUDatei)
End
If
strGeneraliUDatei
= "H:\Templates\WordStartUp\~$nerali.dotm"
SetAttr strGeneraliUDatei, vbNormal
strDateiVorhanden = Dir(strGeneraliUDatei)
If strDateiVorhanden <> "" Then
strDateiVorhandenMeldung = strDateiVorhandenMeldung & vbCrLf & strGeneraliUDatei
Kill (strGeneraliUDatei)
End
If
strGeneraliRibbUDatei
= "H:\Templates\WordStartUp\~$NERALI_Ribbon.dotm"
SetAttr strGeneraliRibbUDatei, vbNormal
strDateiVorhanden = Dir(strGeneraliRibbUDatei)
If strDateiVorhanden <> "" Then
strDateiVorhandenMeldung = strDateiVorhandenMeldung & vbCrLf & strGeneraliRibbUDatei
Kill (strGeneraliRibbUDatei)
End
If
strAutTextUDatei
= "H:\Templates\Autotext\~$totext.dotx"
SetAttr strAutTextUDatei, vbNormal
strDateiVorhanden = Dir(strAutTextUDatei)
If strDateiVorhanden <> "" Then
strDateiVorhandenMeldung = strDateiVorhandenMeldung & vbCrLf & strAutTextUDatei
Kill (strAutTextUDatei)
End If
strAutTextDUDatei = "H:\Templates\Autotext\~$totext_d.dotx"
SetAttr strAutTextDUDatei, vbNormal
strDateiVorhanden = Dir(strAutTextDUDatei)
If strDateiVorhanden <> "" Then
strDateiVorhandenMeldung = strDateiVorhandenMeldung & vbCrLf & strAutTextDUDatei
Kill (strAutTextDUDatei)
End
If
strAutTextFUDatei
= "H:\Templates\Autotext\~$totext_f.dotx"
SetAttr strAutTextFUDatei, vbNormal
strDateiVorhanden = Dir(strAutTextFUDatei)
If strDateiVorhanden <> "" Then
strDateiVorhandenMeldung = strDateiVorhandenMeldung & vbCrLf & strAutTextFUDatei
Kill (strAutTextFUDatei)
End If
strAutTextIUDatei = "H:\Templates\Autotext\~$totext_i.dotx"
SetAttr strAutTextIUDatei, vbNormal
strDateiVorhanden = Dir(strAutTextIUDatei)
If strDateiVorhanden <> "" Then
strDateiVorhandenMeldung = strDateiVorhandenMeldung & vbCrLf & strAutTextIUDatei
Kill (strAutTextIUDatei)
End
If
strAutTextEUDatei
= "H:\Templates\Autotext\~$totext_e.dotx"
SetAttr strAutTextEUDatei, vbNormal
strDateiVorhanden = Dir(strAutTextEUDatei)
If strDateiVorhanden <> "" Then
strDateiVorhandenMeldung = strDateiVorhandenMeldung & vbCrLf & strAutTextEUDatei
Kill (strAutTextEUDatei)
End
If
If strDateiVorhandenMeldung <>
"" Then
'
MsgBox strDateiVorhandenMeldung
MsgBox strDateiVorhandenMeldung, _
vbExclamation, " ~Dateien welche gelöscht wurden ..."
Else
MsgBox "Es wurden keine ~Dateien gelöscht.", vbInformation, " Dateien welche gelöscht wurden ..."
End
If
End
Sub
Sub Makroname()
Dim i As Long
With
ActiveDocument
For i = 1 To .Hyperlinks.Count
.Hyperlinks(1).Delete
Next i
End With
End Sub
' Inhalt von Hyperlink in eine Variable laden und
diesen mit einem zusätzlichen Wert ergänzen
For Each aHyperlink In ActiveDocument.Hyperlinks
If InStr(LCase(aHyperlink.Address), "") <> 0 Then 'Wenn er nicht
leer ist
strHyperlinkOld = aHyperlink.Name
aHyperlink.Address
= "GugusA" & strHyperlinkOld & "GugusB"
End If
Next aHyperlink
'Der folgende Code veranschaulicht, wie
Sie mit der CreateTextFile-Methode eine Textdatei erstellen und öffnen:
Sub CreateAfile()
Set fs =
CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\temp\testfile.txt", True)
a.WriteLine ("Dies ist ein Test.")
a.Close
End Sub
'Beispiel zur MacroContainer-Eigenschaft
'In diesem Beispiel wird der Name des Dokuments oder
der Vorlage, in dem sich das Modul mit der laufenden Prozedur 'befindet, gespeichert.
Set cntnr = MacroContainer
MsgBox cntnr.Name
'Folgender Code liefert den Modulname des Moduls
Set cntnr = MacroContainer
MsgBox cntnr.VBProject.Application.ActiveVBProject.Application.ActiveCodePane.CodeModule.Name
oder:
' Modulname in eine Variable schreiben.
(Achtung bei Dokumenten aus Vorlagen!!)
strModulName = Application.VBE.ActiveCodePane.CodeModule
oder:
Public
Sub ModulnamenErmitteln()
For Each VBPro In ActiveDocument.VBProject.VBComponents
If VBPro.Type = 1 Then _
strModulname = Module & VBPro.Name
Next VBPro
End Sub
Sub Projektliste()
Module = ""
Klassenmodule = ""
Forms = ""
Mappen = ""
For Each
VBPro In ActiveDocument.VBProject.VBComponents
If VBPro.Type = 1 Then _
Module = Module & VBPro.Name & Chr(13)
If VBPro.Type = 2 Then _
Klassenmodule = Klassenmodule & VBPro.Name & Chr(13)
If VBPro.Type = 3 Then _
Forms = Forms & VBPro.Name & Chr(13)
If VBPro.Type = 100 Then _
Mappen = Mappen & VBPro.Name & Chr(13)
Next VBPro
MsgBox "***Module***" & Chr(13) & Module & Chr(13)
& _
"***Klasenmodule***" & Chr(13)
& Klassenmodule & Chr(13) & _
"***Userforms***" & Chr(13) & Forms & Chr(13) & _
"***Arbeitsmappe und Tabellen***" &
Chr(13) & Mappen
End Sub
Sub Projektname_ermitteln()
MsgBox ActiveDocument.VBProject.Name
End
Sub
Sub Projektname_setzen()
ActiveDocument.VBProject.Name = "MeinVBA"
End
Sub
' Ein hochinteressantes Thema: 'Makro ändert Makro'
' Dieses Beispiel ändert eine Zeile im
Code:
Const SuchZeile = " MsgBox ""VBA macht Spass
!"""
Const NeueZeile = " MsgBox ""VBA macht grossen Spass
!"""
Sub VBAZeileÄndern()
Set VBE = Application.VBE.ActiveCodePane.CodeModule
With VBE
For x =
1 To .CountOfLines
If .Lines(x, 1) =
NeueZeile Then
.ReplaceLine
x, SuchZeile
Exit
Sub
End If
If .Lines(x, 1) =
SuchZeile Then
.ReplaceLine
x, NeueZeile
Exit
Sub
End If
Next x
End With
End
Sub
Sub Testen()
MsgBox "VBA macht Spass !"
End Sub
InStr-Funktion (Beispiel)
'In diesem Beispiel wird die
InStr-Funktion verwendet, um die Position des ersten Auftretens einer
Zeichenfolge
'innerhalb einer anderen Zeichenfolge
zurückzugeben.
Dim SuchText, SuchZeichen, Pos1
Suchtext ="XXpXXpXXPXXP" ' Zu durchsuchende
' Zeichenfolge.
SuchZeichen = "P" ' Nach "P" suchen.
' Reiner Textvergleich ab Position 4.
Das Ergebnis ist 6.
Pos1 = Instr(4, Suchtext, SuchZeichen, 1)
' Binärer Vergleich ab Position 1. Das
Ergebnis ist 9.
Pos1 = Instr(1, Suchtext, SuchZeichen, 0)
' Standardmässig wird der Vergleich
binär durchgeführt
' (wenn das letzte Argument nicht
angegeben wird).
Pos1 = Instr(Suchtext, SuchZeichen) ' Liefert 9.
Pos1 = Instr(1, Suchtext, "W") ' Liefert 0.
Ein produktives
Beispiel:
Dim strTextmarkenInhalt As String
Public
Sub MAIN()
If
ActiveDocument.Bookmarks.Exists("produkt") = True Then
strTextmarkenInhalt
= ActiveDocument.Bookmarks("produkt").Range.Text ' TM
Inhalt in Variable lesen
Dim SuchText, SuchZeichen, Position
SuchText = strTextmarkenInhalt ' Zu durchsuchende
' Zeichenfolge.
SuchZeichen = "hc" ' Nach "P" suchen.
' Binärer Vergleich ab Position 1.
Position = InStr(1, SuchText,
SuchZeichen, 0)
End
If
If Position > 0 Then
'Messagebox; ob das richtige Papier im Schacht 6
eingelegt ist.
Load Assistance
Assistance.Show
'Seite
einrichten auf Schacht 6 und auf Ganzes Dokument
With ActiveDocument.PageSetup
.FirstPageTray
= 258
.OtherPagesTray
= 258
.OddAndEvenPagesHeaderFooter = False
End With
'Text
auswechseln, welcher neu mit der Assistance zu tun hat.
End If
End Sub
'
Feststellen ob es sich um eine Copy handelt.
' Falls es
sich um eine Kopie handelt. Wird das Copy Zeichen eingefügt.
If ActiveDocument.Bookmarks.Exists("drvorlbez") = True Then
'Existiert die Textmarke
strDrvorlBez = ActiveDocument.Bookmarks("drvorlbez").Range.Text 'Textmarkeninhalt in Variable
' Nach enthaltenen Zeichen Suchen
Dim SuchText,
SuchZeichen, Position
SuchText = strDrvorlBez ' Zu durchsuchende
SuchZeichen =
"kopie" ' Nach "kopie"
suchen.
' Binärer Vergleich ab Position 1.
Position = InStr(1,
SuchText, SuchZeichen, 0)
If Position > 0 Then
Application.Run "TemplateProject.AlsKopie.MAIN"
End If
End If
oder
Textteil in Variable finden
Sub TextInVariableFinden()
Dim strGanzerText As String
Dim strSuchText As String
Dim intGefunden As Integer
strGanzerText = "xxxxxxxXxxxx"
strSuchText = "X"
intGefunden = InStr(strGanzerText, strSuchText)
If intGefunden > 0 Then
MsgBox "Der Textteil wurde im Variableninhalt gefunden"
Else
MsgBox "Der Textteil wurde NICHT gefunden"
End
If
End
Sub
Sub Neue_Formatvorlage_Definieren()
'Erstellt:
04.05.2006 ITS/stp
'Erstellt
eine neue Formatvorlage bestehend aus der bisherigen darunterliegenden
Formatvorlage
On
Error GoTo SupEnde:
strAlteStyle = Selection.Paragraphs.Style
strNeueStyle =
InputBox("Bitte Namen für neue Formatvorlage eingeben: ",
"Namenseingabe", strAlteStyle)
'strNeueStyle
ActiveDocument.Styles.Add Name:=strNeueStyle, _
Type:=wdStyleTypeParagraph
With ActiveDocument.Styles(strNeueStyle)
.AutomaticallyUpdate
= False
.BaseStyle
= strAlteStyle
End With
ActiveDocument.Styles(strNeueStyle).LanguageID
= wdSwissGerman
ActiveDocument.Styles(strNeueStyle).NoProofing
= False
ActiveDocument.Styles(strNeueStyle).Frame.Delete
Selection.Style = ActiveDocument.Styles(strNeueStyle)
SupEnde:
If Documents.count < 1 Then
Application.WindowState = wdWindowStateMinimize
End If
End
Sub
strTextmarkenInhaltvertschlplan = ActiveDocument.Bookmarks("verteilschluesselplan").Range.Text
' Fügt den
formatierten Autotext in der Variable strTextmarkenInhaltvertschlplan ein.
Selection.Collapse Direction:=wdCollapseEnd
ActiveDocument.AttachedTemplate.AutoTextEntries(strTextmarkenInhaltvertschlplan).Insert _
Where:=Selection.Range, RichText:=True
oder wenn der Autotext
schon bekannt ist:
Selection.Collapse Direction:=wdCollapseEnd
ActiveDocument.AttachedTemplate.AutoTextEntries("copy").Insert _
Where:=Selection.Range, RichText:=True
For Each i In ActiveDocument.AttachedTemplate.AutoTextEntries
' Lcase ist kleinschreibung…
If LCase(i.Name) = "copy" Then
MsgBox "AutoText ist vorhanden!"
End If
Next i
MsgBox "Die Dokumente können mit
der derzeitigen Einstellung nicht aus der Vertragsverwaltung " & vbCrLf & _
"gedruckt werden." & vbCrLf &
vbCrLf & _
"Die Sicherheitseinstellung von
Winword wurde automatisch geändert !" & vbCrLf
& vbCrLf & _
"Die Anwendung Winword wird im
Anschluss geschlossen !" & vbCrLf &
_
"Starten Sie Winword erneut." & vbCrLf &
vbCrLf & _
"Falls diese Fehlermeldung beim
Drucken von Dokumenten aus der Vertragsverwaltung" & vbCrLf & _
"erscheint, muss der GV
unterbrochen und wieder neu aufgenommen werden !" & vbCrLf & vbCrLf &
_
"Wenn Sie diesen Fehler mehrmals
erhalten wenden Sie sich bitte an die Abteilung ITS !", _
vbExclamation, " Änderung der
Macro-Sicherheitseinstellung in Winword ..."
oder
MsgBox "Folgenden
Shortcut sind im Generali.dot definiert :"
& vbCrLf & _
"S-Cut:"
& " " & "Alt +
Strg + A" & vbTab & "Zeigt
diese Messagebox an" & vbCrLf & _
"S-Cut:"
& " " & "Alt +
Strg + B" & vbTab & "Zeigt
die Registry-Druckereinstellung an" & vbCrLf &
_
"S-Cut:"
& " " & "Alt +
Strg + D" & vbTab & "Setzt
die Duplex-Textmarke im Dokument" & vbCrLf &
_
"S-Cut:"
& " " & "Alt +
Strg + G" & vbTab & "Zeigt
die installierte Version des Generali.dot
an" & vbCrLf & _
"S-Cut:"
& " " & "Alt +
Strg + H" & vbTab & "Erstellt
eine Sicherheitskopie vom Normal.dot" &
vbCrLf & _
"S-Cut:"
& " " & "Alt +
Strg + J" & vbTab & "Zeigt
die installierte Version des Autotext.dot
an" & vbCrLf & _
"S-Cut:"
& " " & "Alt +
Strg + K" & vbTab & "Startet
den Microsoft Explorer" & vbCrLf &
_
"S-Cut:"
& " " & "Alt +
Strg + O" & vbTab & "Öffnet
das Dokument doutput.doc aus dem
Temp-Verzeichnis " & vbCrLf & _
"S-Cut:"
& " " & "Alt +
Strg + ö" & vbTab & "Zeigt
die Dateien aus dem " & strTempPfad & " Ordner" & vbCrLf & _
"S-Cut:"
& " " & "Alt +
Strg + P" & vbTab &
"Positioniert alle offenen Winword-Fenster" & vbCrLf & _
"S-Cut:"
& " " & "Alt +
Strg + Q" & vbTab & "Entfernt
den Inhalt einer Textmarke" & vbCrLf &
_
"S-Cut:"
& " " & "Alt +
Strg + T" & vbTab & "Erstellt
eine Textmarke aus der Markierung" & vbCrLf &
_
"S-Cut:"
& " " & "Alt +
Strg + X" & vbTab & "Erstellt
eine Textmarke ohne zu Markieren" & vbCrLf &
_
"S-Cut:"
& " " & "Alt +
Strg + ," & vbTab & "Öffnet
das Generali.dot aus dem AutoStart" & vbCrLf & vbCrLf &
_
"06.06.2006 ITS/stp", vbExclamation, " Alle
Shortcut des Generali.dot auf einen Blick ..."
' Nimmt
den Autotext mit dem Namen "Blue" in die Aktive Dokumentvorlage auf
Set myTemplate = ActiveDocument.AttachedTemplate
myTemplate.AutoTextEntries.Add Name:="Blue", _
Range:=Selection.Range
' Autotext
einfügen aus eigenem Template
Set myTemplate = ActiveDocument.AttachedTemplate
myTemplate.AutoTextEntries("atLogoGenerali").Insert Where:=Selection.Range
Sub StringAuslesen()
Dim strListe
As String
Dim arrSplit
As Variant
Dim intZaehler As Integer
strListe = "Wert1,Wert2,Wert3,Wert4"
arrSplit = Split(strListe, ",")
For intZaehler
= LBound(arrSplit) To UBound(arrSplit)
MsgBox arrSplit(intZaehler)
Next intZaehler
End Sub
Sub Ordner_vorhanden()
' Prüfen
ob ein Ordner existiert
If Dir("C:\test",
vbDirectory) <> "" Then
MsgBox "Ordner vorhanden"
Else
MsgBox "Ordner nicht vorhanden"
End
If
End
Sub
oder
Sub Ordner_vorhanden2()
Dim Pfad As
String
Pfad =
"C:\_export_prod_2008.04.25\doc"
If Dir(Pfad, vbDirectory) =
"" Then
MsgBox "Pfad existiert nicht!"
Else
MsgBox "Pfad existiert"
End
If
End
Sub
Sub Ordner_vorhanden_inhalt()
' Prüfen
ob ein Ordner vorhanden ist und ob er leer ist oder nicht.
If Dir("C:\test",
vbDirectory) <> "" Then
Set fs = Application.FileSearch
With fs
.LookIn
= "C:\test"
.Filename
= "*.*"
If .Execute > 0 Then
MsgBox "Ordner gefunden und es wurden "
& .FoundFiles.Count & _
" file(s) gefunden."
' Dannn alle Files auflisten
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "Keine Dateien"
End If
End With
Else
MsgBox "Ordner nicht vorhanden"
End
If
End
Sub
Sub Ordner_erstellen()
' Ordner
erstellen, wenn dieser nicht schon vorhanden ist
Dim oFSO As Object 'für das FileSystemObject
Set oFSO = CreateObject("Scripting.FileSystemObject")
If Not oFSO
Is Nothing Then
If Not oFSO.FolderExists("C:\test2") Then
If oFSO.CreateFolder("C:\test2") <>
"" Then
MsgBox "OK, Ordner neu angelegt!"
Else
MsgBox "Ordner konnte
nicht neu angelegt werden!"
End If
Else
MsgBox "Ordner existiert
bereits!"
End If
Set oFSO = Nothing
End If
End
Sub
' Gibt das Zeichen zurück, mit dem Ordnernamen voneinander
getrennt werden. Diese Eigenschaft gibt einen umgekehrten Schrägstrich (\)
zurück.
MsgBox ActiveDocument.Path
& Application.PathSeparator
& _
ActiveDocument.Name
Public Sub Lineale_In_Ansicht_anzeigen()
For Each myWindow In Windows
With myWindow
.View.Type = wdPrintView
.DisplayRulers
= True
.DisplayVerticalRuler
= True
End With
Next myWindow
End
Sub
' Eine
Abfrage ob es sich um einen numerischen Ausdruck handelt
If IsNumeric(strEingabe)
= True Then
' Gibt Wahr zurück bei zutreffen
end if
' Eine
Abfrage ob es sich um ein Datum handelt.
If IsDate(strEingabe)
= True Then
' Gibt Wahr zurück bei zutreffen
end if
' If (strTextmarkenInhaltvertschlplan =
"201" Or strTextmarkenInhaltvertschlplan = "202" _
' Or strTextmarkenInhaltvertschlplan =
"203" Or strTextmarkenInhaltvertschlplan = "204") Then
' Datum
umwandeln
datumswert = "01.2.08"
datum_zeit_string = Format(Date, "dd.mm.yyyy")
' ergibt
01.02.2008
strDoknamePDF = ActiveDocument.Name
'DokName in Variable strDokname speichern
'Dateinamen
kürzen. So, dass dieser ohne Endung (Extension besteht)
pos =
InStr(strDoknamePDF, ".")
If pos > 0 Then
strDoknamePDF = Left(strDoknamePDF, pos - 1)
End
If
oder:
Public
Sub Filename_ohne_extension()
strDoknamePDF = ActiveDocument.Name 'DokName in Variable
strDokname speichern
Set objFso
= CreateObject("Scripting.FileSystemObject")
strDoknamePDFroh = objFso.GetBaseName(strDoknamePDF)
End
Sub
oder:
'Gibt die Position eines Vorkommnisses
einer Zeichenfolge in einer anderen Zeichenfolge vom Ende der
'Zeichenfolge gesehen an
strDoknamePDF = ActiveDocument.Name 'DokName in Variable strDokname speichern
'Dateinamen kürzen. So, dass dieser
ohne Endung (Extension besteht)
'Funktioniert bei langen Dateinamen
nicht :-(
pos =
InStrRev(strDoknamePDF, ".")
If pos > 0 Then
strDoknamePDF = Left(strDoknamePDF, pos - 1)
End
If
'Die Dateiendung steht nach dem letzten
Punkt im Dateinamen.
Public Sub DateiEndungAbfragen()
Dim strDateinamen As String
Dim strDateiNurEndung As String
'strDateinamen = ActiveDocument.Name
strDateinamen = "DateinamenBeispiel.dotx"
pos = InStrRev(strDateinamen, ".")
' Dateiendung mit Punkt
If pos > 0 Then
strDateiNurEndung = Mid(strDateinamen, Len(Left(strDateinamen, pos - 1)) + 1)
'oder
strDateiNurEndung2 = LCase(Mid(strDateinamen, pos + 0))
End If
' Dateiendung ohne Punkt
If pos > 0 Then
strDateiNurEndungOhnePunkt = Mid(strDateinamen, Len(Left(strDateinamen, pos)) + 1)
'oder
strDateiNurEndungOhnePunkt2 = LCase(Mid(strDateinamen, pos + 1))
'oder
strDateiNurEndungOhnePunkt3 = Mid(strDateinamen, InStrRev(strDateinamen, ".") + 1)
End If
End Sub
Sub DateiNameAusPfadErmitteln()
Dim strPfad As
String
strPfad =
"C:\Test\Ordner1\Test\Ordner1\Test\Ordner1\Test\Ordner1\logfile.txt"
MsgBox Mid(strPfad, InStrRev(strPfad, "\") + 1)
End Sub
Public
strAngemeldeterBenutzer
As String
Private
Declare Function apiGetUserName Lib "advapi32.dll" _
() ' Alias
"GetUserNameA" ( _
ByVal lpBuffer As
String, _
nSize As Long)
As Long
Function
fOSUserName() As String
Dim lngLen As Long, lngX As Long
Dim strUserName
As String
strUserName = String$(254, 0)
lngLen = 255
lngX = apiGetUserName(strUserName, lngLen)
If lngX <> 0 Then
fOSUserName = Left$(strUserName, lngLen - 1)
Else
fOSUserName = ""
End If
strAngemeldeterBenutzer = fOSUserName
End
Function
'oder
einfach
strAngemeldeterUserF =
CreateObject("WScript.Network").UserName
strAngemeldeterUserF =
LCase(strAngemeldeterUserF) '
Auf Kleinbuchstaben ummodeln, wenn nötig
'oder
MsgBox Application.UserName
WinUser = VBA.Environ("UserName")
'Ruft den Windows-Benutzernamen ab
Annehmer =
StrConv(WinUser, vbProperCase) 'Speichert den Windowsbenutzernamen grossgeschrieben
Sub ActiveDirectoryAuslesen()
' Definition der Variablen für die
Tabellenausgabe
Dim dvVorname As
String
Dim dvInitialen As String
Dim dvNachname As String
Dim dvAnzeigename As String
Dim dvBeschreibung As String
Dim dvBuero As
String
Dim dvRufnummer As String
Dim dvEmail As
String
Dim dvWebseite As
String
Dim dvStrasse As
String
Dim dvPostfach As
String
Dim dvOrt As
String
Dim dvBundesland As String
Dim dvPostleitzahl As String
Dim dvLand As
String
Dim dvBenutzeranmeldename As String
Dim dvRufnummernPrivat As String
Dim dvRufnummernPager As String
Dim dvRufnummernMobil As String
Dim dvRufnummernFax As String
Dim dvRufnummernIPTelefon As String
Dim dvAnmerkungen As String
Dim dvPosition As
String
Dim dvAbteilung As String
Dim dvFirma As
String
Dim dvsysInfo As
String
Dim dvMitarbeiter As String
'Variablen
für AD-Abfrage
Dim varQuery As
String
Dim objSystemInfo As Object
Dim objBenutzer As
Object
'
Active Directory Informationen des angemeldeten Benutzers lesen
Set objSystemInfo =
CreateObject("ADSystemInfo")
varQuery =
"LDAP://" & objSystemInfo.UserName
' Zeiger auf das AD-Objekt des
Benutzers setzen
' damit können wir alle AD-Felder
abfragen
Set objBenutzer = GetObject(varQuery)
' Füllen der Variablen
dvVorname = objBenutzer.givenname
dvInitialen = objBenutzer.initials
dvNachname = objBenutzer.sn
dvAnzeigename = objBenutzer.DisplayName
dvBeschreibung = objBenutzer.Description
dvBuero = objBenutzer.physicalDeliveryOfficeName
dvRufnummer = objBenutzer.telephoneNumber
dvEmail = objBenutzer.mail
dvWebseite = objBenutzer.wWWHomepage
dvStrasse = objBenutzer.streetAddress
dvPostfach = objBenutzer.postOfficeBox
dvOrt = objBenutzer.L
dvBundesland = objBenutzer.st
dvPostleitzahl = objBenutzer.postalCode
dvLand = objBenutzer.CO
dvBenutzeranmeldename = objBenutzer.sAMAccountName ' P-Nummer
dvRufnummernPrivat = objBenutzer.homePhone
dvRufnummernPager = objBenutzer.pager
dvRufnummernMobil = objBenutzer.mobile
dvRufnummernFax = objBenutzer.facsimileTelephoneNumber
dvRufnummernIPTelefon = objBenutzer.ipPhone
dvAnmerkungen = objBenutzer.info
dvPosition = objBenutzer.Title
dvAbteilung = objBenutzer.department
dvFirma = objBenutzer.company
dvsysInfo = objBenutzer.manager
' Überprüfe das Auslesen aus der
ActiveDirectory
MsgBox "Der Vorname " & [dvAnzeigename] & " wurde ausgelesen."
End Sub
Subrutine für
Warteschlaufe
'Wird aufgerufen im Makro mit:
Wait (Sekunden)
Public
Sub Wait(sngSeconds As Single)
Dim sngStart As Single
Dim sngTimer As Single
sngStart = Timer
While Format(sngTimer - sngStart,
"Fixed") < sngSeconds
sngTimer = Timer
DoEvents
Wend
End Sub
'Die
unscheinbare VBA-Anweisung Name kann nicht nur Dateien umbenennen sondern auch
verschieben oder sogar
'gleichzeitig
umbenennen und verschieben. Das Verschieben funktioniert allerdings nur wenn
sich das Zielverzeichnis
'(also der
Ort, wohin die Datei verschoben werden soll) auf dem gleichen Laufwerk befindet
wie das Quellverzeichnis
'der
Datei. Das Verschieben einer Datei beispielsweise von Laufwerk C: nach Laufwerk
D: kann mit der Name-Anweisung
'somit
nicht durchgeführt werden. Das laufwerkübergreifende Verschieben lässt sich nur
mit dem
'FileSystemObject-Objekt
oder mit der Windows API-Funktion MoveFile bewerkstelligen.
'Das
Codebeispiel #1 zeigt die Lösungsvariante mit dem VBA-Befehl Name zum
Verschieben einer Datei. Wenn im
'Zielverzeichnis
bereits eine gleichnamige Datei existiert, tritt der Laufzeitfehler 58
"Datei existiert bereits"
'auf.
Sub MoveFile1()
Name "C:\AlteDateien\EineDatei.xls" As "C:\NeueDateien\EineDatei.xls"
End Sub
'Das
Beispiel #2 verwendet ebenfalls den Befehl Name, wobei die Datei verschoben und
gleichzeitig umbenannt wird.
'Auch hier
tritt bei bereits vorhandener Datei der Laufzeitfehler 58 "Datei existiert
bereits" auf.
Sub MoveFile2()
Name "C:\AlteDateien\AlterDateiname.xls" As "C:\NeueDateien\NeuerDateiname.xls"
End Sub
'Das
Beispiel #3 verwendet die API-Funktion MoveFile. Wenn im Zielverzeichnis
bereits eine gleichnamige Datei
'existiert,
gibt die Funktion den Wert 0 zurück. Die Datei wird in diesem Fall nicht
verschoben.
Declare Function MoveFile Lib "kernel32" Alias
"MoveFileA" (ByVal _
lpExistingFileName As
String, ByVal lpNewFileName As String) As Long
Sub MoveFile3()
Dim lngRetVal
As Long
lngRetVal = MoveFile("C:\AlteDateien\EineDatei.xls",
"C:\NeueDateien\EineDatei.xls")
If lngRetVal
= 0 Then
MsgBox "Fehler beim Verschieben der
Datei."
End If
End Sub
'Im
Beispiel #4 wird eine Datei anhand der API-Funktion MoveFile verschoben und
umbenannt. Wenn im Zielverzeichnis
'die Datei
bereits existiert, gibt die Funktion den Wert 0 zurück. Die Datei wird in
diesem Fall nicht verschoben
'und
umbenannt.
Sub MoveFile5()
CreateObject("Scripting.FileSystemObject").MoveFile
"C:\AlteDateien\EineDatei.xls",
"C:\NeueDateien\EineDatei.xls"
End
Sub
'Mit
Variablen:
CreateObject("Scripting.FileSystemObject").MoveFile
strDateiVorhandenFull, strTempfull
'Methoden
'Die
nachstehende Tabelle zeigt die Methoden des FileSystemObject-Objektes:
'Methode Beschreibung
FileSystemObject.BuildPath Hängt einen Namen an einen
Pfad an.
FileSystemObject.CopyFile Kopiert eine Datei.
FileSystemObject.CopyFolder Kopiert einen Ordner.
FileSystemObject.CreateFolder Erstellt einen Ordner.
FileSystemObject.CreateTextFile Erstellt eine Textdatei.
FileSystemObject.DeleteFile Löscht eine Datei.
FileSystemObject.DeleteFolder Löscht einen Ordner.
FileSystemObject.DriveExists Überprüft die Existenz eines
Laufwerkes.
FileSystemObject.FileExists Überprüft die Existenz einer
Datei.
FileSystemObject.FolderExists Überprüft die Existenz eines
Ordners.
FileSystemObject.GetAbsolutePathName Gibt aus einer angegebenen Pfadangabe
einen vollständigen und
eindeutigen
Pfad zurück.
FileSystemObject.GetBaseName Gibt eine Zeichenfolge zurück,
die den Basisnamen der letzten
Komponente
(ohne Dateinamenerweiterung) eines Pfades enthält.
FileSystemObject.GetDrive Referenziert das angegebene
Laufwerk.
FileSystemObject.GetDriveName Gibt den Namen des Laufwerkes im
angegebenen Pfad zurück.
FileSystemObject.GetExtensionName Gibt eine Zeichenfolge zurück, die
den Erweiterungsnamen der
letzten
Komponente eines Pfades enthält.
FileSystemObject.GetFile Referenziert die angegebene
Datei.
FileSystemObject.GetFileName Gibt den Namen einer Datei
zurück.
FileSystemObject.GetFolder Referenziert den angegebenen
Ordner.
FileSystemObject.GetParentFolderName Gibt eine Zeichenfolge zurück, die den
Namen des übergeordneten
Ordners
der letzten Komponenten in einem angegebenen Pfad enthält.
FileSystemObject.GetSpecialFolder Gibt den Pfad des angegebenen
Spezialordners zurück.
FileSystemObject.GetTempName Gibt einen willkürlich
erstellten Namen einer temporären Datei bzw.
eines
temporären Ordners zurück, die bzw. der nützlich beim
Durchführen
von Operationen ist, die eine temporäre Datei oder
einen
temporären Ordner erfordern.
FileSystemObject.MoveFile Verschiebt eine Datei.
FileSystemObject.MoveFolder Verschiebt einen Ordner.
FileSystemObject.OpenTextFile Öffnet eine Textdatei.
'In diesem
Beispiel wird eine Meldung in der Statusleiste angezeigt, und der Zeiger
wechselt in seine
'"beschäftigte"
Form
Sub Corsor_Statusleitentext()
System.Cursor = wdCursorWait
Application.StatusBar = " ...is noch
Kaffee da? "
Application.StatusBar = False 'zurücksetzen
System.Cursor = wdCursorNormal
End Sub
' Gibt die
Nummer der Textmarke, die den Anfang der angegebenen Auswahl oder des Bereichs
einschliesst, zurück. Wenn
' keine
entsprechende Textmarke existiert, wird 0 (Null) zurückgegeben. Die Nummer
entspricht der Position der
'
Textmarke im Dokument, 1 für die erste Textmarke, 2 für die zweite, usw. Long
Nur-Lese-Zugriff.
' Postion
fix einer bestimmten Textmarke abfragen.
intSysRKWLoesungAbsBPosition
= ActiveDocument.Bookmarks("SysRKWLoesungAbsB").Range.PreviousBookmarkID
intSysRKWLoesungAbsEPosition
= ActiveDocument.Bookmarks("SysRKWLoesungAbsE").Range.PreviousBookmarkID
' Oder
nachdem auf eine Texmarke gesprungen wurde, abfragen welche Position diese
hatte:
ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="SysRKWLoesungAbsB"
intSysRKWLoesungAbsBPosition
= Selection.BookmarkID ' Abfragen auf welcher
Position die TM ist
ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="SysRKWLoesungAbsE"
intSysRKWLoesungAbsEPosition
= Selection.BookmarkID ' Abfragen auf welcher
Position die TM ist
Sub CheckIfDriveExists1()
Const strDrive
As String = "C:\"
If CreateObject("Scripting.FileSystemObject").DriveExists(strDrive)
= True Then
MsgBox "Das Laufwerk existiert.", vbInformation
Else
MsgBox "Das Laufwerk existiert nicht.", vbInformation
End If
End Sub
oder Dateisystem
ausgeben (bei nichtvorhandensein gibts einen Fehler):
Public Sub GetFileSystem2()
MsgBox CreateObject("Scripting.FileSystemObject").GetDrive("C:").FileSystem
End Sub
oder
'Variable
mit dem File-Name
strDateiName =
"FaxFormular.ini"
'
Überprüfen ob das Laufwerk "H:\" vorhanden ist und es sich um ein
Generali (p-user) handelt
'
Ansonsten wird in das Verzeichnis geschrieben in welchem das Normal.dot liegt
Const strDrive As String = "H:\"
' Gibt es
das Laufwerk H:\
If CreateObject("Scripting.FileSystemObject").DriveExists(strDrive) = True Then
strAngemeldeterUserF = CreateObject("WScript.Network").UserName
strAngemeldeterUserF =
LCase(strAngemeldeterUserF) '
Auf Kleinbuchstaben ummodeln
' Handelt es sich um einen P-User
If Left(strAngemeldeterUserF, 1) =
"p" Then ' Links 1. Wert
strAngemeldeterUserFN =
Right(strAngemeldeterUserF, 6) ' Rechts 6. Werte
If IsNumeric(strAngemeldeterUserFN)
= True Then
' Variable mit Pfad und Dateiname
abfüllen
strDateiNamePfad = "H:\" &
strDateiName
End If
End If
Else
' Sonst da abspeichern wo das Normal.dot
liegt:
strDateiNamePfad = Options.DefaultFilePath(wdUserTemplatesPath) & Application.PathSeparator
& strDateiName
End If
Sub WortZaehlen()
Titel = "Zeichenfolge zählen"
Q = Chr(34)
Antwort = InputBox("Nach welcher
Zeichenfolge soll gesucht werden?", Titel)
If Antwort = "" Then Exit Sub
With ActiveDocument.Range.Find
.Text =
Antwort
'.MatchWholeWord = True
'.MatchCase = True
While .Execute
Anz = Anz + 1
Wend
End With
strT = "Für die Zeichenfolge " & Q & Antwort & Q
& " wurden " & _
Anz & " Entsprechungen gefunden."
MsgBox strT, vbInformation,
Titel
End
Sub
oder:
Sub WortZaehlen2()
Application.ScreenUpdating = False
Titel = "Wort
zählen"
Antwort =
InputBox("Nach welchem Wort soll gesucht werden?", Titel)
If Antwort = "" Then Exit Sub
Dim oRange As Range,
Anz As Long
Set oRange = Selection.Range
ActiveDocument.Range(0, 0).Select
With
Selection.Find
.ClearFormatting
.Text = Antwort
.Execute
While
.found = True
Anz = Anz + 1
.Execute
Wend
End
With
oRange.Select
Application.ScreenUpdating = True
Q = Chr(34)
strT = "Für das
Wort " & Q & Antwort & Q & " wurden " & _
Anz & "
Entsprechungen gefunden."
MsgBox strT, vbInformation, Titel
End
Sub
oder
Public
Sub MAIN()
Dim strSuchtext
As String
Dim count As Integer
strSuchtext = "0"
With Selection.Find
.Text =
strSuchtext
.Forward
= True
.Wrap =
wdFindContinue
.Format
= False
.MatchCase
= False
.MatchWholeWord
= False
.MatchWildcards
= False
.MatchSoundsLike
= False
.MatchAllWordForms
= False
While
Selection.Find.Execute
Selection.Text = ""
Selection.ParagraphFormat.KeepTogether
= False
Selection.ParagraphFormat.KeepWithNext
= False
count =
count + 1
Wend
End With
MsgBox count
End
Sub
Zeichen1 = Chr(91) ' Liefert
[
Zeichen2 = Chr(93) ' Liefert
]
Zeichen3 = Chr(33) ' Liefert
!
strVariable =
"[044444444444444444444XY001000]"
' Jetzt
das Zeichen [ aus der Variable entfernen (also Replacen mit null)
strNeueVariable = Replace(strVariable, Chr(91),
"")
' Dann das
Zeichen ] aus der Variable enternen (also Replacen mit null)
strFertigeVariable = Replace(strNeueVariable, Chr(93),
"")
' Oder den
Wert XY mit mm vertrauschen
strFertigeVariableRep
= Replace(strNeueVariable, "XY",
"mm")
Public Sub TextmarkeAbfullenUBehalten()
strBMName =
"SysGugus"
strBMText =
"NeuerText"
If
ActiveDocument.Bookmarks.Exists(strBMName) Then
Set rng = ActiveDocument.Bookmarks(strBMName).Range
rng.Text =
strBMText
ActiveDocument.Bookmarks.Add strBMName, rng
End If
End Sub
Und mit einer neuen Font und Color ausstatten:
strGeschaeftsstelle = "Hier der Text der draufkommt"
intFehler = 1
If ActiveDocument.Bookmarks.Exists("SysGeschaeftsstelle") Then
Set rng = ActiveDocument.Bookmarks("SysGeschaeftsstelle").Range
rng.Text = strGeschaeftsstelle
ActiveDocument.Bookmarks.Add "SysGeschaeftsstelle", rng
If intFehler = 1 Then
rng.Font.Color = wdColorRed
rng.Font.Bold = True
End If
End If
' Möchte
man diese Feldfunktionen aber dokumentieren oder anderen zeigen,
' Funktion
in die Zwischenablage kopiert - nie die Feldfunktion an sich.
Sub ChangeFieldCode()
AddIns("H:\cfg\autotext\" &
"autotext.dot").Installed
= True '
Optional
ActiveWindow.View.ShowFieldCodes = True
Selection.WholeStory '
Alles Markieren
Dim ff As Field
Dim rng As Range,
rngSel As Range
Dim str As
String
Set rngSel = Selection.Range
For Each ff In rngSel.Fields
ff.ShowCodes
= True
Next ff
str = rngSel.Text
str = Replace(str, Chr(19),
"{")
str = Replace(str, Chr(21),
"}")
rngSel.Text = str
rngSel.Copy
Selection.MoveLeft Unit:=wdCharacter, Count:=1
End Sub
Sub subTrainingAction(control As IRibbonControl)
'
' Abfragen ob die Sprache Deutsch ist. Sonst französicher Link
anzeigen.
If Application.LanguageSettings.LanguagePreferredForEditing(MsoLanguageID.msoLanguageIDGerman) = True
Then
MsgBox "Deutsch"
Else
MsgBox "andere Sprache"
End If
End
Sub
If
Application.WindowState = wdWindowStateMaximize Then
Application.WindowState = wdWindowStateNormal
strApplicationLeft = Application.Left
strApplicationTop = Application.Top
strApplicationWidth = Application.Width
strApplicationHeight = Application.Height
Else
strApplicationLeft = Application.Left
strApplicationTop = Application.Top
strApplicationWidth = Application.Width
strApplicationHeight = Application.Height
End
If
' FensterPosition festlegen
Application.Move Left:=0, Top:=530
Application.Resize Width:=270, Height:=200
' FenstePosition wieder zurückstellen
Application.Move Left:=strApplicationLeft, Top:=strApplicationTop
Application.Resize Width:=strApplicationWidth,
Height:=strApplicationHeight
iWindowCount = Application.Windows.Count ' Anzahl Dokumente
sWindowName = Application.Windows.Item(i) ' Name Dokument ?!
sWindowNameWW = Application.Documents(i)
' Name Dokument ?!
Fensterposition
in die Variable lesen
strWindowLeft =
Windows(1).Left
strWindowTop =
Windows(1).Top
strWindowWidth =
Windows(1).Width
strWindowHeight
= Windows(2).Height
' Fragt die TM nach dem Inhalt ab
' Wenn das letzte Zeichen eine
Absatzmarke ist, wird die TM mit dem neuen Inhalt wieder gesetzt.
Sub LetztesSteuerzeichenenfernenTMneusetzen()
Dim intTextmarkenInhaltleztesZeichen As Integer
Dim strTextmarkenInhalt As String
If
ActiveDocument.Bookmarks.Exists("bankverbindung") Then
strTextmarkenInhalt = ActiveDocument.Bookmarks("bankverbindung").Range.Text ' TM Inhalt in Variable lesen
'
Abfragen welches das letzte Zeichen ist
intTextmarkenInhaltleztesZeichen = Asc(Right(strTextmarkenInhalt, 1))
'
Letztes Zeichen aus dem String der TM entfernen
strTextmarkenInhalt = Left(strTextmarkenInhalt, Len(strTextmarkenInhalt) - 1)
'
Wenn das letzte Zeichen eine Absatzmarke (CHR13) ist dann die Textmarke
neu setzen.
If intTextmarkenInhaltleztesZeichen = 13 Then
' Textmarke neu setzen ohne
Letztes Zeichen
Set rng = ActiveDocument.Bookmarks("bankverbindung").Range
rng.Text
= strTextmarkenInhalt
ActiveDocument.Bookmarks.Add "bankverbindung", rng
End If
End
If
End
Sub
Public Sub VariableVeraendern()
strdateinamelang = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaadatum_test.doc [Kompatibilitätsmodus]"
If Right(strdateinamelang, 23) = " [Kompatibilitätsmodus]" Then
strZaehlenZeichen = Len(strdateinamelang)
'
MsgBox strZaehlenZeichen
strZaehlenKurz = strZaehlenZeichen - 23
strdateinameOK = Left(strdateinamelang, strZaehlenKurz)
Else
MsgBox "no"
End If
End Sub
Application.Visible = False
Application.Visible = True
Public
Sub WordPositionAendern()
Dim intWindowCount As Integer
Dim intZaehlerFenster As Integer
Dim a As
Integer
On
Error Resume Next
a = 1
intZaehlerFenster = 1
'
Hier werden alle aktiven Fenster maximiert.
Application.WindowState = wdWindowStateNormal
' Dokumente Zählen
intWindowCount =
Application.Windows.count
If intWindowCount
= 0 Then
Application.Move Left:=0, Top:=150
Application.Resize Width:=615,
Height:=293
Else
Do While intZaehlerFenster <= intWindowCount 'Anzahl Durchläufe festlegen
' Höhe und Breite des
Wordfensters im Maximierten Zustand ändern.
Windows(a).Left
= 0
Windows(a).Top
= 150
Windows(a).Width
= 615
Windows(a).Height
= 293
intZaehlerFenster = intZaehlerFenster + 1 'Counter angeben mit welchem wert gezählt wird
a = intZaehlerFenster
Loop 'Wieder an Anfang
End If
End
Sub
Sub SprachAbfrageVBA()
'http://msdn.microsoft.com/en-us/library/aa432459.aspx
'msoLanguageIDExeMode 4
Execution mode language
strsprachemsoLanguageIDExeMode
= Word.Application.LanguageSettings.LanguageID(msoLanguageIDExeMode)
' msoLanguageIDInstall 1 Install language. installierte Sprache
strsprachemsoLanguageIDInstall
= Word.Application.LanguageSettings.LanguageID(msoLanguageIDInstall)
'
msoLanguageIDHelp 3 Help language.
strsprachemsoLanguageIDHelp
= Word.Application.LanguageSettings.LanguageID(msoLanguageIDHelp)
'msoLanguageIDUI 2 User interface language
strsprachemsoLanguageIDUI
= Word.Application.LanguageSettings.LanguageID(msoLanguageIDUI)
'msoLanguageIDUIPrevious
5 User interface language used prior to the current user interface language.
strsprachemsoLanguageIDUIPrevious
= Word.Application.LanguageSettings.LanguageID(msoLanguageIDUIPrevious)
strAlleWerte =
"strsprachemsoLanguageIDExeMode " & vbTab
& strsprachemsoLanguageIDExeMode & vbCrLf
& _
"strsprachemsoLanguageIDInstall
" & vbTab &
strsprachemsoLanguageIDInstall & vbCrLf &
_
"strsprachemsoLanguageIDHelp
" & vbTab &
strsprachemsoLanguageIDHelp & vbCrLf &
_
"strsprachemsoLanguageIDUI
" & vbTab & vbTab & strsprachemsoLanguageIDUI & vbCrLf & _
"strsprachemsoLanguageIDUIPrevious
" & vbTab &
strsprachemsoLanguageIDUIPrevious
MsgBox
strAlleWerte
End
Sub
Public Sub()
'
E-Learning von GENERALI anzeigen
'
Abfragen ob die Sprache Deutsch ist. Sonst französicher Link anzeigen.
(deutsch = 1031 / franz = 1036)
'
Word.Application.LanguageSettings.LanguageID(msoLanguageIDUIPrevious) =
User interface language used prior to the current user interface language
If Word.Application.LanguageSettings.LanguageID(msoLanguageIDUIPrevious)
= "1031" Then
ActiveDocument.FollowHyperlink _
Address:="http://genadlmosp001.generali.ch/Integrated/MosSrv/index.htm?stg=prod_Office_2010__de_&sco=act974914&id=_winauth",
_
NewWindow:=True,
AddHistory:=True
Else
ActiveDocument.FollowHyperlink _
Address:="http://genadlmosp001.generali.ch/Integrated/MosSrv/index.htm?stg=prod_Office_2010__fr_&sco=act974914&id=_winauth",
_
NewWindow:=True,
AddHistory:=True
End If
End sub
'Beispiel TempPfad holen
strIniDateiPfad = Environ("TEMP") & "\"
strUserName = Environ("USERNAME")
'Man würde den Username auch wie folgt
erhalten:
strAngemeldeterUserG = CreateObject("WScript.Network").UserName
'Help unter Dos(cmd) mit SET alle
Angaben daraus.
'Oder auch folgende Variablen welche
abgefragt werden können.
Sub EnvironAbfrage()
'
Dim strAppData As
String
strAppData = Environ("AppData")
strUserprofile =
Environ("USERPROFILE")
strALLUSERSPROFILE
= Environ("ALLUSERSPROFILE")
strLOCALAPPDATA
= Environ("LOCALAPPDATA")
strSystemDrive =
Environ("SystemDrive")
strSystemRoot = Environ("SystemRoot")
strHOMEDRIVE = Environ("HOMEDRIVE")
strHOMEPATH = Environ("HOMEPATH")
strwindir = Environ("windir")
strProgramFiles
= Environ("ProgramFiles")
strCommonProgramFiles
= Environ("CommonProgramFiles")
strUSERNAME = Environ("USERNAME")
strCOMPUTERNAME
= Environ("COMPUTERNAME")
strUSERDOMAIN = Environ("USERDOMAIN")
strClientName = Environ("ClientName")
strSESSIONNAME =
Environ("SESSIONNAME")
strLOGONSERVER =
Environ("LOGONSERVER")
strOS = Environ("OS")
strPROCESSOR_ARCHITECTURE
= Environ("PROCESSOR_ARCHITECTURE")
strPROCESSOR_ARCHITEW6432
= Environ("PROCESSOR_ARCHITEW6432")
strPROCESSOR_IDENTIFIER
= Environ("PROCESSOR_IDENTIFIER")
strPROCESSOR_LEVEL
= Environ("PROCESSOR_LEVEL")
strPROCESSOR_REVISION
= Environ("PROCESSOR_REVISION")
strNUMBER_OF_PROCESSORS
= Environ("NUMBER_OF_PROCESSORS")
'Code, um zu ermitteln, welche
Systemvariablen auf Ihrem PC / in Ihrem Profil verfügbar sind
'Sub
ListEnvironVariables()
' Dim strEnviron As String
' Dim i As Long
' For i = 1 To 255
' strEnviron = Environ(i)
' If LenB(strEnviron) = 0& Then Exit
For
'
ev. strEnvironXX = strEnviron &
" " & strEnviron
' Debug.Print strEnviron
' Next
'End
Sub
End
Sub
Sub SaveAllAsDOTX()
Dim strFileName As
String
Dim strDocName As
String
Dim strPath As
String
Dim oDoc As Document
Dim fDialog As FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
With fDialog
.Title = "Select folder and click
OK"
.AllowMultiSelect = False
.InitialView = msoFileDialogViewList
If .Show <> -1 Then
MsgBox
"Cancelled By User", , "List Folder Contents"
Exit
Sub
End
If
strPath =
fDialog.SelectedItems.Item(1)
If Right(strPath, 1) <> "\" Then
strPath = strPath + "\"
End
With
If
Documents.Count > 0 Then
Documents.Close SaveChanges:=wdPromptToSaveChanges
End
If
If Left(strPath, 1) = Chr(34) Then
strPath =
Mid(strPath, 2, Len(strPath) - 2)
End
If
strFileName =
Dir$(strPath & "*.dot")
While
Len(strFileName)
<> 0
Set oDoc = Documents.Open(strPath & strFileName)
strDocName = ActiveDocument.FullName
intPos =
InStrRev(strDocName, ".")
strDocName =
Left(strDocName, intPos - 1)
strDocName =
strDocName & ".dotx"
oDoc.SaveAs FileName:=strDocName, _
FileFormat:=wdFormatXMLTemplate
oDoc.Close SaveChanges:=wdDoNotSaveChanges
strFileName =
Dir$()
Wend
End
Sub
Antwort = "Normal_Building_Blocks.dotx"
If Len(Antwort) > 0 Then
For iOffset
= Len(Antwort) To 1 Step -1
If Mid(Antwort, iOffset, 1) = "." Then
' Letzten Punkt gefunden
sExtension = Mid(Antwort, iOffset + 1)
sFilename = Left(Antwort, iOffset -
1)
Exit For
End If
Next
strDateiendung = "." & sExtension
End If
‚ strDateiendung liefert die Endung mit .dotx
Public Function ZeitMessung()
Dim StartZeit As Currency,
Dauer As Currency
DoEvents
StartZeit = Timer
'
Hier steht der Code,
'
dessen Laufzeit gemessen werden soll
Stop
Dauer = Format(Timer - StartZeit, "0.00")
MsgBox "Dauer: " & Dauer & " s", , "Laufzeitmessung"
Debug.Print Dauer
End Function
Public Sub WindowTitleInfo()
' Pfad im Titelbalken von Word anzeigen
If Windows.Count > 0 Then
If Left(ActiveDocument.Name, 8) =
"Dokument" Then
ActiveWindow.Caption
= ActiveDocument.Name & " - ungespeichert!"
Else
strWoerter = ActiveDocument.BuiltInDocumentProperties(wdPropertyWords)
'
Change the window's caption
ActiveWindow.Caption
= ActiveDocument.FullName
& " " & _
" " & Format(ActiveDocument.BuiltInDocumentProperties
_
(wdPropertyCharsWSpaces), "(#,##0 Zeichen -" & " " & strWoerter
& " Wörter)")
End If
End
If
End
Sub
'Das Löschen von Forms, Modulen oder
Klassen zur Laufzeit aus einer Vorlage geht erfolgt direkt über die
'Angabe des Namens. Befindet sich z.B.
das Modul Modul1 in der Dokumentvorlage normal.dot, kann es mit folgendem
'Aufruf gelöscht werden:
'Achtung:
'Das Modul o.a. wird direkt und ohne
Sicherheitsabfrage gelöscht.
'Es wird auch nicht, wie beim manuellen
Löschen in der IDE, erst ein export angeboten!
Sub Modulloeschen()
With NormalTemplate.VBProject.VBComponents
.Remove .Item("Modul2")
End
With
End
Sub
'Dieser direkte Aufruf beinhaltet aber
auch ein Risiko: Wird das Makro ein zweites mal aufgerufen oder stimmt der
'Modul-Name nicht, wird die
Fehlermeldung 9 ("Index ausserhalb des gültigen Bereichs")
ausgegeben, da das
'angegebene Modul nicht mehr in der
Liste der Module vorhanden ist.
'Um Fehler zu vermeiden, sollte daher
vor dem Löschen zuerst geprüft werden, ob das Modul, die Form oder die
'Klasse in der Dokumentvorlage
vorhanden ist. Dieses kann nur mit einer Prüfung aller enthaltenen Komponenten
'(VBComponents) erreicht werden. Dazu
wird eine Laufvariable i verwendet, die über alle Komponenten läuft.
'Der zu entfernde (Modul-)Name wird in
der Variablen sName eingetragen. Nur wenn der Name gefunden wird,
'wird das Modul entfernt und anschliessend
die Suche beendet, da der Name eineindeutig ist.
Sub Moduleloeschen2()
Dim i As
Integer
Dim sName As
String
For i = 1 To
NormalTemplate.VBProject.VBComponents.Count
sName =
NormalTemplate.VBProject.VBComponents.Item(i).Name
If sName = "Modul2" Then
With NormalTemplate.VBProject.VBComponents
.Remove .Item(sName)
End With
Exit For
End
If
Next i
End
Sub
Sub Modulloeschen3()
'
Von einem AktivenDokument (Template) ein Modul löschen
Set VBComp = ActiveDocument.VBProject.VBComponents("VorDemDrucken")
Application.ActiveDocument.VBProject.VBComponents.Remove VBComp
End Sub
'Mit der Import-Methode können einem
Projekt ein Formular, ein Modul, eine Klasse usw. hinzugefügt werden.
'Diese müssen in Form einer Datei
vorliegen und besitzen eine der folgenden Endungen (*.frm,*.bas,*.cls).
Sub ModulImport()
Dim sName As
String
sName = "C:\TEMP\VorDemDrucken.bas"
ActiveDocument.VBProject.VBComponents.Import (sName)
End
Sub
'Häufig möchte man wissen, welche
Verweise in einem Projekt verwendet werden.
'Z.B. wenn ein Makro auf einem anderen
Rechner nicht funktioniert und Fehlermeldungen zurückliefert.
'Mit folgendem kleinen Makro wird für
das aktuelle Projekt ActiveVBPRoject die Beschreibung der Verweise
'nacheinander in einer MessageBox
ausgegeben.
Sub VBEVerweise()
For i = 1 To
VBE.ActiveVBProject.References.Count
msg = msg & VBE.ActiveVBProject.References.Item(i).Description & vbCrLf
Next i
antw = MsgBox(msg, vbInformation, "Auflistung der Verweise")
End Sub
Private
Sub ModulVorhandenLoeschenImportieren()
For i = 1 To
ActiveDocument.VBProject.VBComponents.Count
If ActiveDocument.VBProject.VBComponents.Item(i).Name = "VorDemDrucken" Then
Set modul
= ActiveDocument.VBProject.VBComponents("VorDemDrucken")
ActiveDocument.VBProject.VBComponents.Remove modul
Set modul
= Nothing
Set modul
= ActiveDocument.VBProject.VBComponents.Import("C:\Abfall\Modul\VorDemDrucken.bas")
modul.Name = "Modul_NeuerName"
Exit Sub
End If
Next i
End
Sub
Public
Sub ModulUmbenennen()
For i = 1 To
ActiveDocument.VBProject.VBComponents.Count
If ActiveDocument.VBProject.VBComponents.Item(i).Name = "VorDemDrucken" Then
Set modul
= ActiveDocument.VBProject.VBComponents("VorDemDrucken")
modul.Name = "Modul_NeuerName"
Exit Sub
End If
Next i
End
Sub
' Mudulname welcher importiert werden
soll
sName = "C:\Abfall\Modul\VorDemDrucken.bas"
ActiveDocument.VBProject.VBComponents.Import (sName)
Modul Anzahl
abfragen
intModulCount = ActiveDocument.VBProject.VBComponents.Count
Public
Sub ModulExport()
For i = 1 To
ActiveDocument.VBProject.VBComponents.Count
If ActiveDocument.VBProject.VBComponents.Item(i).Name = "VorDemDrucken" Then
Set modul
= ActiveDocument.VBProject.VBComponents("VorDemDrucken")
modul.Export
"C:\temp\" & modul.Name & ".bas"
Exit Sub
End If
Next i
End Sub
Sub DateiSuchenAnzahlSeiten()
On Errog GoTo Fehler:
Dim strPfadNamen As String
Dim strDateiNamenPfad As String
Dim strAnzahlSeitenTotal As Integer
Dim strFilename As String
Dim strFName As String
Dim strPfadNeuA As String
' Pfad mittels InputBox abfragen
strDateiNamenPfad = InputBox("Bitte nachfolgend den ganzen Pfad eingeben von welchem die Vorlagen mit den Textmarken ins Textmarken- vorkommen.dot" & _
" aufgenommen werden müssen." & vbCrLf & vbCrLf & "z.B. E:\daten\winword\vorlagen_produktiv\001", " Angabe des Pfades des Ordner der die Dokumente enthält.")
strFilename = "*.doc"
strPfadNeuA = strDateiNamenPfad & "\"
If strDateiNamenPfad = Empty Then
' Nichts da nichts eingegeben wurde oder Abbrechen gewählt wurde.
Else
strFName = Dir(strPfadNeuA &
strFilename)
Do While strFName
<> ""
' Dokument Schreibgeschützt öffnen
Documents.Open FileName:=strPfadNeuA & strFName, ReadOnly:=True
'-----------------------------------------------------------------------
strAktivDocName = ActiveDocument.Name
' ' Anzahl Seiten in die Veriable lesen.
strAnzahlSeiten = ActiveDocument.ComputeStatistics(wdStatisticPages)
strAnzahlSeitenTotal = strAnzahlSeitenTotal + strAnzahlSeiten
' Ins Ini schreiben Pfad.
System.PrivateProfileString(FileName:=strPfadNeuA & "AnzSeiten.ini", _
Section:="Dokumente Seiten zählen / Pfad", key:=strDateiNamenPfad & "\") = vbTab & "" & vbTab & "Datum des Eintrags " & Date & " / " & Time 'Ins INI schreiben
' Ins Ini schreiben wie viele Seiten das
Dokument hatte.
System.PrivateProfileString(FileName:=strPfadNeuA & "AnzSeiten.ini", _
Section:="Dokumente Seiten zählen", key:=strAktivDocName) = vbTab & strAnzahlSeiten & vbTab & "Datum des Eintrags " & Date & " / " & Time 'Ins INI schreiben
' Ins Ini schreiben wie viele Seiten es Total
hatte.
System.PrivateProfileString(FileName:=strPfadNeuA & "AnzSeiten.ini", _
Section:="Dokumente Seiten zählen Total", key:="Total Seiten gezählt: ") = vbTab & strAnzahlSeitenTotal & vbTab & "Datum des Eintrags " & Date & " / " & Time 'Ins INI schreiben
'-----------------------------------------------------------------------
' Dokument wird ohne Speichern
geschlossen
ActiveDocument().Close SaveChanges:=wdDoNotSaveChanges
' End If
strFName = Dir()
Loop
End
If
GoTo Ende:
Fehler:
MsgBox "Es muss ein Pfad eingegeben werden der auf diesem PC auch verbunden ist." & vbCrLf & _
"Der Pfad sollte z.B. wie folgt eingegeben werden: E:\daten\winword\vorlagen_produktiv\001", _
vbCritical, " Textmarkenvorkommen aller Vorlagen erstellen..."
Ende:
End Sub
' Angepasst: 11.05.2011 ITS/P.Steiner
' Construct für Dokumente gemäss einem
Verzeichnis zu bearbeiten
Sub DateiSuchenAnzahlSeiten()
On Errog GoTo Fehler:
Dim strPfadNamen As String
Dim strDateiNamenPfad As String
Dim strAnzahlSeitenTotal As Integer
Dim strFilename As String
Dim strFName As String
Dim strPfadNeuA As String
' Pfad mittels InputBox abfragen
strDateiNamenPfad = InputBox("Bitte nachfolgend den ganzen Pfad eingeben von welchem die Vorlagen mit den Textmarken ins Textmarken- vorkommen.dot" & _
" aufgenommen werden müssen." & vbCrLf & vbCrLf & "z.B. E:\daten\winword\vorlagen_produktiv\001", " Angabe des Pfades des Ordner der die Dokumente enthält.")
' Sucht in einem vorgegebenen
Verzeichnis nach Dateien und listete diese
' in einer MsbBox den Vollen Namen
inkl. Pfad der Datei aus.
strFilename = "*.doc"
strPfadNeuA = strDateiNamenPfad & "\"
If strDateiNamenPfad = Empty Then
' Nichts da nichts eingegeben wurde oder Abbrechen gewählt wurde.
Else
strFName = Dir(strPfadNeuA &
strFilename)
Do While strFName
<> ""
' Dokument Schreibgeschützt öffnen
Documents.Open FileName:=strPfadNeuA & strFName, ReadOnly:=True
'---------------
B e g i n n D o k u m e n t h ä n d l i
n g ---------------------------------
strAktivDocName = ActiveDocument.Name
' Hier der Teil was mit dem
grad geöffneten Dokument geschehen soll
'---------------
E n d e D o k u m e n t h ä n d l i
n g ---------------------------------
'
' Dokument wird ohne Speichern
geschlossen
ActiveDocument().Close SaveChanges:=wdDoNotSaveChanges
' End If
strFName = Dir()
Loop
End
If
GoTo Ende:
Fehler:
MsgBox "Es muss ein Pfad eingegeben werden der auf diesem PC auch verbunden ist." & vbCrLf & _
"Der Pfad sollte z.B. wie folgt eingegeben werden: E:\daten\winword\vorlagen_produktiv\001", _
vbCritical, " Textmarkenvorkommen aller Vorlagen erstellen..."
Ende:
End Sub
Sub FormatvorlageKopieren()
' Kopieren der Formatvorlage Kopfzeile
vom Normal.dotm in die aktuell geöffnete Vorlage
strNormalDotm = NormalTemplate
strAktivDocName = ActiveDocument.FullName
Application.OrganizerCopy Source:=NormalTemplate, Destination:=strAktivDocName, Name:="Kopfzeile", Object:=wdOrganizerObjectStyles
End Sub
Sub FormatvorlageNeuSetzen()
'
Dim intBZähler As Integer 'Zälervarable als Integer festlegen.
intBZähler = 1 'Variablenwert definieren
Do While intBZähler <= 10 'Anzahl Durchläufe festlegen
With Selection 'Beginn Zeile springen und bis Ende Absatz markieren
.StartOf Unit:=wdParagraph, Extend:=wdMove
.MoveDown
Unit:=wdParagraph, Count:=1, Extend:=wdExtend
End With
If Selection.Style = "CodeTitelüberschrift" Then
Selection.Style = ActiveDocument.Styles("CodeTitelüberschrift")
End If
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.HomeKey Unit:=wdLine
intBZähler = intBZähler + 1 'Counter angeben mit welchem wert gezählt wird
Loop 'Wieder an Anfang
intBZähler = 1
End Sub
Sub DeleteHeaderFooter()
Dim oRange As Range
For Each oRange In ActiveDocument.StoryRanges
If oRange.Information(wdHeaderFooterType) <> -1 Then
'oRange.Select
oRange.Delete
End If
Next oRange
End Sub
Sub AlleFelderAktualisieren()
Dim rngDoc As Range
Dim oDoc As Document
Set oDoc = ActiveDocument
For Each rngDoc In oDoc.StoryRanges
rngDoc.Fields.Update
While Not (rngDoc.NextStoryRange Is Nothing)
Set rngDoc
= rngDoc.NextStoryRange
rngDoc.Fields.Update
Wend
Next rngDoc
End Sub
Sub FelderSperrenOderNicht()
'
Bezieht sich auf die Markierten Felder
Selection.WholeStory '
Alles Markieren
Selection.Fields.Locked = False '= Feldsperre
aufheben (Ctrl + Shift + F11)
Selection.Fields.Locked = True '=
Sperren (Ctrl + F11)
End Sub
Sub TestObLocked()
'In diesem Beispiel wird eine Meldung
angezeigt, wenn einige Felder im aktiven Dokument geschützt sind.
Set theFields = ActiveDocument.Fields
If theFields.Locked
= wdUndefined Then
MsgBox "Some fields are locked"
ElseIf
theFields.Locked = False Then
MsgBox "No fields are locked"
ElseIf
theFields.Locked = True Then
MsgBox "All fields are locked"
End
If
End
Sub
Autotext aus aktiver Vorlage entfernen
Set myTemplate = ActiveDocument.AttachedTemplate
myTemplate.AutoTextEntries("autotextname1").Delete
oder
ActiveDocument.AttachedTemplate.AutoTextEntries("autotextname2").Delete
oder
Sub AutoTexteLoeschen()
strtemplate = ActiveDocument.AttachedTemplate
Dim objTemplate As
Template
Set objTemplate = Templates(1)
'AT mit dem Namen 0 1 2 3 wird gelöscht
objTemplate.BuildingBlockEntries("0").Delete
objTemplate.BuildingBlockEntries("1").Delete
objTemplate.BuildingBlockEntries("2").Delete
objTemplate.BuildingBlockEntries("3").Delete
End Sub
oder
Sub autotexteloeschen_nok() ' Funktioniert jedoch nicht
Dim atEntry As AutoTextEntry
Dim intResponse As
Integer
strtemplate = ActiveDocument.AttachedTemplate
For Each atEntry In _
ActiveDocument.AttachedTemplate.AutoTextEntries
intResponse = _
MsgBox("Do you
want to delete the " & atEntry.Name _
& " AutoText entry? Im Template:
" & strtemplate, vbYesNoCancel)
If intResponse
= vbYes Then
With ActiveDocument.AttachedTemplate
Application.OrganizerDelete _
Source:=.Path
& "\" & .Name, _
Name:=atEntry.Name, _
Object:=wdOrganizerObjectAutoText
End With
ElseIf intResponse
= vbCancel Then
Exit For
End If
Next atEntry
End
Sub
' Ganzes Dokument definieren und dann
was gesucht wird und auswählen
Set myrange = ActiveDocument.Range(Start:=0, End:=0)
myrange.Find.Execute FindText:="vertrag"
myrange.Select
Feldfunktion welche in
Textmarke eingepackt ist. Update / Unlink
If ActiveDocument.Bookmarks.Exists("SysVertragsspracheUnlink")
= True Then
ActiveDocument.Bookmarks("SysVertragsspracheUnlink").Range.Fields.Update
ActiveDocument.Bookmarks("SysVertragsspracheUnlink").Range.Fields.Unlink
End If
'oder
so
With ActiveDocument.Bookmarks("SysVertragsspracheUnlink").Range.Fields
.Update
.Unlink
End With
Sub IstDocSchonGeSavet()
Dim doc As Word.Document
Set doc = ActiveDocument
strWertObDocgespeichert = doc.Saved
If strWertObDocgespeichert = False Then
MsgBox "Dokument muss noch gespeichert werden!"
End If
End
Sub
' Die Variablen müssen/können hier als
Integer definiert werden. Falls ein Option Explicit vorhanden ist.
intJahr = Year(Date)
intMonat = Format(Date, "mm")
intTag = Format(Date, "dd")
intStunde = Format(Time, "hh")
intMinute = Format(Time, "nn")
intSekunde = Format(Time, "ss")
strDatumZeit = intJahr & intMonat & intTag & intStunde & intMinute & intSekunde
strDatumZeit2 = intJahr & "." & intMonat & "." & intTag & "-" &
intStunde & "." & intMinute
& "." & intSekunde
oder in einen ganzen String ausgeben:
ZeitZahl = Format(FileDateTime("C\Temp\gugus.doc"), "yyyymmddhhmmss")
Ergibt die Ausgabe des Datums in einer Zahl 20120327091253
yyyymmtthhmmss
'In diesem Beispiel wird jedes Dokument
in der RecentFiles-Auflistung geöffnet.
Sub OpenRecentFiles()
Dim rFile As RecentFile
For Each
rFile In RecentFiles
rFile.Open
Next rFile
End
Sub
'Um zu ermitteln, ob ein Dokument
geöffnet ist, können Sie die Documents-Auflistung mithilfe der For Each..
'Next-Anweisung durchlaufen. Im
folgenden Beispiel wird das Dokument Sample.doc aktiviert, wenn das Dokument
'geöffnet ist, oder Sample.doc wird
geöffnet, wenn dieses Dokument momentan nicht geöffnet ist.
Sub ActivateOrOpenDocument()
Dim doc As Document
Dim docFound As Boolean
For Each
doc In Documents
If InStr(1, doc.Name, "sample.doc",
1) Then
doc.Activate
docFound = True
Exit For
Else
docFound = False
End If
Next doc
If docFound
= False Then Documents.Open
FileName:="Sample.doc"
End Sub
Sub IniEintragMitDenZweiLetztenDokumenten()
' Wird im Editieren benötigt.
' Inkl. Nachfrage welches die letzte
aktuelle Datei ist, von 2 Dateien
Dim intDokLoop As Integer
Dim strDokZeit1 As String
Dim strDokZeit2 As String
' Resumen Next daher, da in den
Ini-File am Beginn noch keine Einträge vorhanden sind.
On Error Resume Next
PfadAngabenHolen 'Funktion zum Ermitteln aller nötigen Pfade aller Dateien (Modul: PfadFunktion)
strDoknameAktuell = ActiveDocument.Name
'
Ab hier im PrepareEditieren eintragen:
DokumentZeitZahl = Format(FileDateTime(strTempPfad & strDoknameAktuell), "yyyymmddhhmmss")
'Letzter Dokumentname aus dem Eitieren abfragen
strDokZeit1 = System.PrivateProfileString(FileName:=strIniDateiPfad & strDoknameEditIniDatei, _
Section:="LetzteDokumenteImEditieren", Key:="Dokumentzeit1") 'Vom INI lesen
strDokZeit2 = System.PrivateProfileString(FileName:=strIniDateiPfad & strDoknameEditIniDatei, _
Section:="LetzteDokumenteImEditieren", Key:="Dokumentzeit2") 'Vom INI lesen
If strDokZeit1 = "" Then
intDokLoop = 1
ElseIf
strDokZeit2 =
"" Then
intDokLoop = 2
ElseIf
strDokZeit1 >
strDokZeit2 Then
intDokLoop = 2
ElseIf
strDokZeit1 <
strDokZeit2 Then
intDokLoop = 1
Else
intDokLoop = 1
End If
'
Neu für letztes Dokument im Editieren
'
Dateiname des letzten Dokuments ins INI speichern. Damit es später
wieder abgerufen werden kann
System.PrivateProfileString(FileName:=strIniDateiPfad & strDoknameEditIniDatei, _
Section:="LetzteDokumenteImEditieren", Key:="Dokumentname" & intDokLoop) = strDoknameAktuell 'Ins INI schreiben
System.PrivateProfileString(FileName:=strIniDateiPfad & strDoknameEditIniDatei, _
Section:="LetzteDokumenteImEditieren", Key:="Dokumentzeit" & intDokLoop) = DokumentZeitZahl 'Ins INI schreiben
End Sub
' Muss über SendWindowMessage ein Feedbach an die Druckaktivität
' zurückgegeben werden. Nämlich.
For Each taskLoop In Tasks
If taskLoop.Name = ddetopic$ Then
taskLoop.SendWindowMessage 1024,
0, 0
End If
Next taskLoop
oder
' Über SendWindowMessage das Editier-Dokument
' in den Vordergrund holen
Dim taskLoop As Task
strDocName = ActiveDocument.Name
strDocNameTemp = strDocName &
" - Microsoft Word"
For Each
taskLoop In Tasks
If taskLoop.Name = strDocNameTemp
Then
taskLoop.Activate
End If
Next taskLoop
' Mit SetAttr das Attributt der Datei
zuerst auf Normal setzen und dann lsöchen.
' Kill wird generell nicht in den
Abfall sonder def. gelöscht.
'
SetAttr "C:\Abfall\Gugus\" & "Testdokument.docx", vbNormal
Zu gebrauchen bei liegengelassenen Word-Dateien
SetAttr "C:\Abfall\Gugus\" & "~$kument12 - Kopie.docx", vbNormal
Kill "C:\Abfall\Gugus\" & "~$kument12 - Kopie.docx"
aSec =
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
'Ausgeblendete Dateien anzeigen
System.PrivateProfileString(FileName:="", Section:=aSec, Key:="Hidden") = "00000001"
' Geschützte Systemdateien anzeigen
System.PrivateProfileString(FileName:="", Section:=aSec, Key:="ShowSuperHidden") = "00000001"
um zum Beispiel den Explorer und die Versteckten- und System-Dateien anzuzeigen:
Shell "Explorer.exe
/e, H:\Templates\WordStartUp\", vbNormalFocus
Shell "Explorer.exe /e, H:\Templates\Autotext\", vbNormalFocus
oder
Public
Sub Explorer()
Dim strAutoTextPfad As String
Dim strGeneralidotPfad As String
strAutoTextPfad
= Options.DefaultFilePath(wdUserTemplatesPath)
& Application.PathSeparator
& "Autotext" & Application.PathSeparator
Shell
"explorer.exe /n,/e, " & strAutoTextPfad, vbNormalFocus
'
Pfad für AutoStart:
strGeneralidotPfad
= Options.DefaultFilePath(wdStartupPath) & Application.PathSeparator
Shell
"explorer.exe /n,/e, " & strGeneralidotPfad, vbNormalFocus
End Sub
'Noch nicht getestet
Sub PfadOeffnen()
Dim Pfad
Dim Filename
Pfad =
ActiveWorkbook.Path
Filename =
ActiveWorkbook.Name
If Pfad <> "" Then
If Dir(Pfad,
vbDirectory) <> "" Then
If Right(Pfad,
1) <> "\" Then Pfad = Pfad & "\"
Shell "Explorer.exe /select,"
& Pfad & Filename, vbNormalFocus
Else
MsgBox "Path " & Pfad
& " does not exist!"
End If
Else
MsgBox "not saved yet"
End
If
End
Sub
Sub zeichenauflisten()
Dim intzaheler As Integer
intzaheler = 1
Selection.Text = intzaheler & vbTab
Selection.EndKey Unit:=wdLine
Do
While intzaheler <= 255
Selection.Text = Chr(intzaheler) '
Selection.EndKey Unit:=wdLine
intzaheler = intzaheler + 1
Selection.TypeParagraph
Selection.Text = intzaheler & vbTab
Selection.EndKey Unit:=wdLine
Loop
Selection.Text = Chr(11)
'Weicher Zeilenumbruch
Selection.Text = Chr(13) 'Absatzmarke (Wird daher der obere Loop etwas durcheinander gebracht)
End Sub
' Erstellt 22.08.2012 ITS/P.Steiner
' Um auf allen Druckvorlagen aus einem
Verzeichnis zu definieren aus welchem Einzugsschacht
' das Papier gezogen wird.
' Dies mittels setzen einer Textmarke
mit der Angabe aus welchem Schacht die Druckvorlage
' das Papier bezieht.
' Am Schluss wird ein Protokoll im
selben Verzeichnis ausgegeben.
'
Dim strTextmarkeDatei() As String
Dim strDateien() As String ' Dynamisches Datenfeld deklarieren
Dim strDruckerEinstellungSchacht() As String
Dim intZaehler As Integer
Dim strPfadNeuA As String
Dim intZaehlerMax As Integer
Public Sub SchachtTMSetzen()
'On Error GoTo Fehler:
Dim strPfadNamen As String
Dim strDateiNamenPfad As String
Dim strAnzahlSeitenTotal As Integer
Dim strFilename As
String
Dim strFName As
String
Dim strDateienTemp As String
Dim SuchText, SuchZeichen
Dim SuchZeichenPolice As String
Dim Pos As
Integer
Dim PosPol As
Integer
Dim PosPolkop As Integer
Dim intTrennblaetterZahl As Integer
Dim intZahlPolicen As Integer
Dim SuchZeichenPolicekopie As String
Dim strTextmarkeSchachtsetzen As String
Dim strSchachtdefinition As String
ReDim strDateien(1000000)
ReDim strTextmarkeDatei(1000000)
ReDim strDruckerEinstellungSchacht(1000000)
intZaehler = 0
intTrennblaetterZahl = 0
intZahlPolicen = 0
' Pfad mittels InputBox abfragen
strDateiNamenPfad = InputBox("Bitte nachfolgend den ganzen Pfad eingeben aus welchem alle enthaltenen Dateinamen aufgelistet" & _
" werden sollen." & vbCrLf & vbCrLf & "z.B. H:\DOutputSaveVVEV\pdf" & vbCrLf & _
" (ohne \ am Schluss)", " Angabe des Pfades des Ordner der die Dateien enthält")
strFilename = "*.dot*"
strPfadNeuA = strDateiNamenPfad & "\"
' Hier werden die Warnungen
ausgeschaltet!
Application.DisplayAlerts = False
If strDateiNamenPfad = Empty Then
'
Nichts eingegeben oder Abbrechen wurde gewählt.
GoTo Ende:
Else
strFName = Dir(strPfadNeuA & strFilename)
Do While strFName <> ""
'
strDateien(intZaehler) = strFName
'
Ab hier
--------------------------------------------------------------------
'
Dokument öffnen
ChangeFileOpenDirectory strPfadNeuA ' strPfadSpVork Variabel beinhaltet den Pfad für die zu öffnende Datei
Documents.Open FileName:=strFName, _
ConfirmConversions:=False, ReadOnly:=False,
AddToRecentFiles:=False, _
PasswordDocument:="",
PasswordTemplate:="", Revert:=False,
_
WritePasswordDocument:="3", WritePasswordTemplate:="", Format:=
_
wdOpenFormatAuto
' Beginn Dokument
Selection.HomeKey Unit:=wdStory
' Schacht abfragen
With
ActiveDocument.Styles(wdStyleNormal).Font
If .NameFarEast = .NameAscii
Then
.NameAscii
= ""
End If
.NameFarEast
= ""
End With
strSchachtdefinition = ActiveDocument.PageSetup.FirstPageTray
If strSchachtdefinition
= wdPrinterUpperBin Then 'Schacht 1
strTextmarkeSchachtsetzen = "SysEinzugsSchacht1"
strDruckerEinstellung = "Schacht 1"
ElseIf strSchachtdefinition = wdPrinterLowerBin Then 'Schacht 2
strTextmarkeSchachtsetzen = "SysEinzugsSchacht2"
strDruckerEinstellung = "Schacht 2"
ElseIf strSchachtdefinition = wdPrinterLargeCapacityBin Then 'Schacht 3
strTextmarkeSchachtsetzen = "SysEinzugsSchacht3"
strDruckerEinstellung = "Schacht 3"
ElseIf strSchachtdefinition = 256 Then 'Schacht 4
strTextmarkeSchachtsetzen = "SysEinzugsSchacht4"
strDruckerEinstellung = "Schacht 4"
ElseIf strSchachtdefinition = wdPrinterDefaultBin Then 'Standardfach 5 (also 4)
strTextmarkeSchachtsetzen = "SysEinzugsSchacht4"
strDruckerEinstellung = "Schacht Standardausgabefach"
ElseIf strSchachtdefinition = 257 Then 'Schacht 5
strTextmarkeSchachtsetzen = "SysEinzugsSchacht5"
strDruckerEinstellung = "Schacht 5"
ElseIf strSchachtdefinition = 258 Then 'Schacht 6
strTextmarkeSchachtsetzen = "SysEinzugsSchacht6"
strDruckerEinstellung = "Schacht 6"
ElseIf strSchachtdefinition = 259 Then 'Schacht 7
strTextmarkeSchachtsetzen = "SysEinzugsSchacht7"
strDruckerEinstellung = "Schacht 7"
ElseIf strSchachtdefinition <> "0" Then 'Schacht 7
strTextmarkeSchachtsetzen = "SysFehlerSchacht"
strDruckerEinstellung = "FehlerSchachtDefinition"
End If
'
Da der Schacht 3 bei einer Altlast nicht per Treiber gesteuert werden
konnte.
If ActiveDocument.Bookmarks.Exists("SysSchacht3") = True Then
strTextmarkeSchachtsetzen = "SysEinzugsSchacht3"
End If
strTextmarkeDatei(intZaehler) = strTextmarkeSchachtsetzen
strDruckerEinstellungSchacht(intZaehler) = strDruckerEinstellung
'
Textmarke setzen
'
Achtung für Briefpapier wurde manchmal Standard oder Schacht 5 gesetzt
Selection.HomeKey Unit:=wdStory
Selection.MoveDown Unit:=wdParagraph, Count:=3, Extend:=wdMove
ActiveDocument.Bookmarks.Add strTextmarkeSchachtsetzen
ActiveDocument.ActiveWindow.Close SaveChanges:=wdSaveChanges 'Dokument schliessen
mit speichern
'
Variablen leeren
strTextmarkeSchachtsetzen = ""
strDruckerEinstellung = ""
'
Bis hier
-------------------------------------------------------------------
intZaehler = intZaehler + 1
strFName = Dir()
Loop
intZaehlerMax = intZaehler
'
Protokoll erstellen:
ProtokollErstellen
End If
' Hier werden die Warnungen wieder
eingeschaltet!
Application.DisplayAlerts = True
GoTo Ende:
Fehler:
MsgBox "Es muss ein Pfad eingegeben werden der auf diesem PC auch verbunden ist." & vbCrLf & _
"Der Pfad sollte z.B. wie folgt eingegeben werden: E:\daten\winword\vorlagen_produktiv\001", _
vbCritical, " Textmarkenvorkommen aller Vorlagen erstellen..."
Ende:
End Sub
' Erstellt 19. April 2001 Pirmin
Steiner
' Dieses Makro erstellt eine Liste mit
allen Textmarkennamen und Dokumentnamen in denen sie vorkommen.
' Das Verzeichnis in welchem die
Vorlagen liegen kann am Beginn des Moduls in einem InpuBox angegeben werden.
' Jedes Dokument daraus wird geöffnet,
und nach Textmarken durchsucht.
' Geändert: 27.10.2008 ITS/Pirmin
Steiner
' Damit dieses Makro etwas schneller
abgeht wurden die Textmarken und Dokumentnamen nicht mehr
' in ein anderes Dokument geschrieben,
sondern in ein TXT-File.
' Das TXT-File heisst
Textmarkenvorkommen_Datum.txt und liegt danach im selben Verzeichnis in welchem
' diese Vorlage abgespeichert ist.
' Somit können nach Abschluss die Daten
aus dem TXT in ein Excel-File übernommen werden. Worin sie
' auch besser sortiert werden können.
'
Public Sub ProtokollErstellen()
'
Dim intNummerAbarb As String
Dim strPfad As
String
'
Dim Zeit1, Sekunde1, Stunde1
Zeit1 = Time ' Zeitangabe zuweisen.
Zeit2 = Time ' Zeitangabe zuweisen.
Zeit3 = Time ' Zeitangabe zuweisen.
Stunde1 = Hour(Zeit1)
Minute1 = Minute(Zeit2)
Sekunde1 = Second(Zeit3)
strProtokollDatum = Date & "_" & Stunde1 & Minute1 & Sekunde1
intNummerAbarb =
0
'
'strPfad
= ActiveDocument.AttachedTemplate.Path & Application.PathSeparator
'& vbCrLf & Nummerierung &
vbTab & "Dokument" & vbTab & "Textmarke
gesetzt" & vbTab & "Druckereinstellung"
'Dim strPfadNamen As String
'Dim strDateiNamenPfad As String
intZaehler = 0
intZaehlerMax = intZaehlerMax - 1
'----------------------------------------------------------------------------------------------------
' Hier wird abgefragt ob es den
eintrag 'Textmarke und Dokumentnamen schon gibt.
' Wenn es diesen im
Zusammenfassungs-Dokument schon gibt wird dieser Eintrag nicht
' vorgenommen.
For intZaehler = 0 To intZaehlerMax ' Anzahl Durchläufe festlegen
' Ins INI-File schreiben
intNummerAbarb = Format(intNummerAbarb, "000000000") 'Format bestimmen
System.PrivateProfileString(FileName:=strPfadNeuA & "Protokoll_" & strProtokollDatum & ".txt", _
Section:="Protokoll: Textmarken in Dokumenten gesetzt", Key:=intNummerAbarb) = " " & strDateien(intZaehler) & vbTab & strTextmarkeDatei(intZaehler) & vbTab & strDruckerEinstellungSchacht(intZaehler)
intNummerAbarb = intNummerAbarb + 1
Count = Count + 1 ' Counter angeben mit welchem wert
' intZaehler = intZaehler + 1
Next
'----------------------------------------------------------------------------------------------------
'
Ende Datum um Zeit ins Txt- File schreiben.
System.PrivateProfileString(FileName:=strPfadNeuA & "Protokoll_" & strProtokollDatum & ".txt", _
Section:="Protokoll-Ende",
Key:="Zeit") = " " & Date & " " & Time
End Sub
' Erstellt 22.08.2012 ITS/P.Steiner
' Um auf allen Druckvorlagen aus einem
Verzeichnis zu definieren aus welchem Einzugsschacht
' das Papier gezogen wird.
' Dies mittels setzen einer Textmarke
mit der Angabe aus welchem Schacht die Druckvorlage
' das Papier bezieht.
' Hier wird abgefragt welcher Schacht
auf der Vorlage zuvor definiert wurde.
' Also Abfrage welche Textmarke im
Dokument enthalten ist (SysEinzugsSchacht4 oder SysEinzugsSchacht5 usw.)
' Dann wird der Schacht auf dem neuen
Treiber wieder gesetzt.
' Dies wie folgt:
'
' Schacht auf Schacht auf
' HP9050-Treiber LexmarkT654-Treiber Papierart
'
-------------------------------------------------------------------
' 1 keiner keine
' 2 1 Policenpapier
' 3 2 ESR
' 4 3 Briefpapier
' 5 4 weisses Papier
' 6 5 Archpapier
(farbig)
' 7 Universalzuführung spez
' Am Schluss wird ein Protokoll im
selben Verzeichnis ausgegeben.
'
Dim strTextmarkeDatei() As String
Dim strDateien() As String ' Dynamisches Datenfeld deklarieren
Dim strDruckerEinstellungSchacht() As String
Dim intZaehler As Integer
Dim strPfadNeuA As String
Dim intZaehlerMax As Integer
Dim strSchachtdefinition As String
Dim strTextmarkeSchachtsetzen As String
Dim strSchachtsetzen As String
Dim strSchachtsetzenNew As String
Public Sub SchachtSetzenLexmarkDrucker()
'On Error GoTo Fehler:
Dim strPfadNamen As String
Dim strDateiNamenPfad As String
Dim strAnzahlSeitenTotal As Integer
Dim strFilename As String
Dim strFName As String
Dim strDateienTemp As String
Dim SuchText, SuchZeichen
Dim SuchZeichenPolice As String
Dim Pos As
Integer
Dim PosPol As
Integer
Dim PosPolkop As Integer
Dim intTrennblaetterZahl As Integer
Dim intZahlPolicen As Integer
Dim SuchZeichenPolicekopie As String
ReDim strDateien(1000000)
ReDim strTextmarkeDatei(1000000)
ReDim strDruckerEinstellungSchacht(1000000)
intZaehler = 0
intTrennblaetterZahl = 0
intZahlPolicen = 0
' Pfad mittels InputBox abfragen
strDateiNamenPfad = InputBox("Bitte nachfolgend den ganzen Pfad eingeben aus welchem alle enthaltenen Dateinamen aufgelistet" & _
" werden sollen." & vbCrLf & vbCrLf & "z.B. H:\DOutputSaveVVEV\pdf" & vbCrLf & _
" (ohne \ am Schluss)", " Angabe des Pfades des Ordner der die Dateien enthält")
strFilename = "*.dot*"
strPfadNeuA = strDateiNamenPfad & "\"
' Hier werden die Warnungen
ausgeschaltet!
Application.DisplayAlerts = False
If strDateiNamenPfad = Empty Then
'
Nichts eingegeben oder Abbrechen wurde gewählt.
GoTo Ende:
Else
strFName = Dir(strPfadNeuA & strFilename)
Do While strFName <> ""
'
strDateien(intZaehler) = strFName
'
Ab hier
--------------------------------------------------------------------
'
Dokument öffnen
ChangeFileOpenDirectory strPfadNeuA ' strPfadSpVork Variabel beinhaltet den Pfad für die zu öffnende Datei
Documents.Open FileName:=strFName, _
ConfirmConversions:=False, ReadOnly:=False,
AddToRecentFiles:=False, _
PasswordDocument:="",
PasswordTemplate:="", Revert:=False,
_
WritePasswordDocument:="3", WritePasswordTemplate:="", Format:=
_
wdOpenFormatAuto
' Beginn Dokument
Selection.HomeKey Unit:=wdStory
'
Abfrage welche SysEinzugsSchacht-Textmarke im Dokument vorhanden ist
' Dann die Variabe strSchachtsetzen mit der Schachtinfo für den
Lexmark-Drucker abfüllen
'
If
ActiveDocument.Bookmarks.Exists("SysEinzugsSchacht1") = True Then
strSchachtsetzen =
"KeinSchacht"
End If
If
ActiveDocument.Bookmarks.Exists("SysEinzugsSchacht2") = True Then
strSchachtsetzen =
"Schacht1"
End If
If
ActiveDocument.Bookmarks.Exists("SysEinzugsSchacht3") = True Then
strSchachtsetzen =
"Schacht2"
End If
If
ActiveDocument.Bookmarks.Exists("SysEinzugsSchacht4") = True Then
strSchachtsetzen =
"Schacht3"
End If
If
ActiveDocument.Bookmarks.Exists("SysEinzugsSchacht5") = True Then
strSchachtsetzen =
"Schacht4"
End If
If
ActiveDocument.Bookmarks.Exists("SysEinzugsSchacht6") = True Then
strSchachtsetzen =
"Schacht5"
End If
If
ActiveDocument.Bookmarks.Exists("SysEinzugsSchacht7") = True Then
strSchachtsetzen =
"Universalzuführung"
End If
If
ActiveDocument.Bookmarks.Exists("SysFehlerSchacht") = True Then
strSchachtsetzen = "SchachtFehler"
End If
If strSchachtsetzen = "" Then
strSchachtsetzen = "SchachtFehler Leer"
End If
'
Schacht setzen unter dem neuen Lexmark T654 Drucker Treiber welche neu
auf der Vorlage liegt
With ActiveDocument.Styles(wdStyleNormal).Font
If .NameFarEast = .NameAscii
Then
.NameAscii
= ""
End If
.NameFarEast
= ""
End With
If strSchachtsetzen = "KeinSchacht" Then 'Schacht 1 ursprünglich -> gehört auf weisse Papier -> Neu Schacht 4
strSchachtsetzenNew = "SysEinzugsSchacht4"
strDruckerEinstellung = "KeinSchacht -> Schacht 4"
ActiveDocument.PageSetup.FirstPageTray = 257
ActiveDocument.PageSetup.OtherPagesTray = 257
ElseIf strSchachtsetzen = "Schacht1" Then 'Schacht 2
strSchachtsetzenNew = "SysEinzugsSchacht1"
strDruckerEinstellung = "Schacht 1"
ActiveDocument.PageSetup.FirstPageTray = wdPrinterUpperBin
ActiveDocument.PageSetup.OtherPagesTray = wdPrinterUpperBin
ElseIf strSchachtsetzen = "Schacht2" Then 'Schacht 3
strSchachtsetzenNew = "SysEinzugsSchacht2"
strDruckerEinstellung = "Schacht 2"
ActiveDocument.PageSetup.FirstPageTray = wdPrinterLowerBin
ActiveDocument.PageSetup.OtherPagesTray = wdPrinterLowerBin
ElseIf strSchachtsetzen = "Schacht 3" Then 'Schacht 4
strSchachtsetzenNew = "SysEinzugsSchacht3"
strDruckerEinstellung = "Schacht 3"
ActiveDocument.PageSetup.FirstPageTray = wdPrinterMiddleBin
ActiveDocument.PageSetup.OtherPagesTray = wdPrinterMiddleBin
ElseIf strSchachtsetzen = "Schacht 4" Then 'Standardfach 5 (also 4)
strSchachtsetzenNew = "SysEinzugsSchacht4"
strDruckerEinstellung = "Schacht 4"
ActiveDocument.PageSetup.FirstPageTray = 257
ActiveDocument.PageSetup.OtherPagesTray = 257
ElseIf strSchachtsetzen = "Schacht 5" Then 'Schacht 6
strSchachtsetzenNew = "SysEinzugsSchacht5"
strDruckerEinstellung = "Schacht 5"
ActiveDocument.PageSetup.FirstPageTray = 258
ActiveDocument.PageSetup.OtherPagesTray = 258
ElseIf strSchachtsetzen = "Universalzuführung" Then 'Schacht 7
strSchachtsetzenNew = "SysUniversalzuführung"
strDruckerEinstellung = "Schacht Universalzuführung"
ActiveDocument.PageSetup.FirstPageTray = wdPrinterPaperCassette
ActiveDocument.PageSetup.OtherPagesTray = wdPrinterPaperCassette
ElseIf strSchachtsetzen <> "0" Then 'Schacht 7
strSchachtsetzenNew = "SysFehlerSchacht"
strDruckerEinstellung = "FehlerSchachtDefinition"
ActiveDocument.PageSetup.FirstPageTray = 257
ActiveDocument.PageSetup.OtherPagesTray = 257
End If
''
Da der Schacht 3 bei einer Altlast nicht per Treiber gesteuert werden
konnte.
' If
ActiveDocument.Bookmarks.Exists("SysSchacht3") = True Then
' strTextmarkeSchachtsetzen =
"SysEinzugsSchacht3"
'
End If
strTextmarkeDatei(intZaehler) = strSchachtsetzenNew
strDruckerEinstellungSchacht(intZaehler) = strDruckerEinstellung
'
Textmarke setzen
'
Achtung für Briefpapier wurde manchmal Standard oder Schacht 5 gesetzt
Selection.HomeKey Unit:=wdStory
Selection.MoveDown Unit:=wdParagraph, Count:=3, Extend:=wdMove
ActiveDocument.Bookmarks.Add strTextmarkeSchachtsetzen
ActiveDocument.ActiveWindow.Close SaveChanges:=wdSaveChanges 'Dokument schliessen
mit speichern
'
Variablen leeren
strSchachtsetzenNew = ""
strDruckerEinstellung = ""
'
Bis hier
-------------------------------------------------------------------
intZaehler = intZaehler + 1
strFName = Dir()
Loop
intZaehlerMax = intZaehler
'
Protokoll erstellen:
ProtokollErstellen
End If
' Hier werden die Warnungen wieder
eingeschaltet!
Application.DisplayAlerts = True
GoTo Ende:
Fehler:
MsgBox "Es muss ein Pfad eingegeben werden der auf diesem PC auch verbunden ist." & vbCrLf & _
"Der Pfad sollte z.B. wie folgt eingegeben werden: E:\daten\winword\vorlagen_produktiv\001", _
vbCritical, " Textmarkenvorkommen aller Vorlagen erstellen..."
Ende:
End Sub
' Erstellt 19. April 2001 Pirmin
Steiner
' Dieses Makro erstellt eine Liste mit
allen Textmarkennamen und Dokumentnamen in denen sie vorkommen.
' Das Verzeichnis in welchem die
Vorlagen liegen kann am Beginn des Moduls in einem InpuBox angegeben werden.
' Jedes Dokument daraus wird geöffnet,
und nach Textmarken durchsucht.
' Geändert: 27.10.2008 ITS/Pirmin
Steiner
' Damit dieses Makro etwas schneller
abgeht wurden die Textmarken und Dokumentnamen nicht mehr
' in ein anderes Dokument geschrieben,
sondern in ein TXT-File.
' Das TXT-File heisst
Textmarkenvorkommen_Datum.txt und liegt danach im selben Verzeichnis in welchem
' diese Vorlage abgespeichert ist.
' Somit können nach Abschluss die Daten
aus dem TXT in ein Excel-File übernommen werden. Worin sie
' auch besser sortiert werden können.
'
Public Sub ProtokollErstellen()
'
Dim intNummerAbarb As String
Dim strPfad As
String
'
Dim Zeit1, Sekunde1, Stunde1
Zeit1 = Time ' Zeitangabe zuweisen.
Zeit2 = Time ' Zeitangabe zuweisen.
Zeit3 = Time ' Zeitangabe zuweisen.
Stunde1 = Hour(Zeit1)
Minute1 = Minute(Zeit2)
Sekunde1 = Second(Zeit3)
strProtokollDatum = Date & "_" & Stunde1 & Minute1 & Sekunde1
intNummerAbarb =
0
'
'strPfad
= ActiveDocument.AttachedTemplate.Path & Application.PathSeparator
'& vbCrLf & Nummerierung &
vbTab & "Dokument" & vbTab & "Textmarke
gesetzt" & vbTab & "Druckereinstellung"
'Dim strPfadNamen As String
'Dim strDateiNamenPfad As String
intZaehler = 0
intZaehlerMax = intZaehlerMax - 1
'----------------------------------------------------------------------------------------------------
' Hier wird abgefragt ob es den
eintrag 'Textmarke und Dokumentnamen schon gibt.
' Wenn es diesen im
Zusammenfassungs-Dokument schon gibt wird dieser Eintrag nicht
' vorgenommen.
For intZaehler = 0 To intZaehlerMax ' Anzahl Durchläufe festlegen
' Ins INI-File schreiben
intNummerAbarb = Format(intNummerAbarb, "000000000") 'Format bestimmen
System.PrivateProfileString(FileName:=strPfadNeuA & "Protokoll_" & strProtokollDatum & ".txt", _
Section:="Protokoll: Textmarken in Dokumenten gesetzt", Key:=intNummerAbarb) = " " & strDateien(intZaehler) & vbTab & strTextmarkeDatei(intZaehler) & vbTab & strDruckerEinstellungSchacht(intZaehler)
intNummerAbarb = intNummerAbarb + 1
Count = Count + 1 ' Counter angeben mit welchem wert
' intZaehler = intZaehler + 1
Next
'----------------------------------------------------------------------------------------------------
'
Ende Datum um Zeit ins Txt- File schreiben.
System.PrivateProfileString(FileName:=strPfadNeuA & "Protokoll_" & strProtokollDatum & ".txt", _
Section:="Protokoll-Ende",
Key:="Zeit") = " " & Date & " " & Time
End Sub
Sub RechtsAusrichten()
Dim sRight As String * 100 'String fester Länge deklarieren
Dim sMsg As String 'MsgBox-Text
sMsg = "Text in MsgBox rechts"
RSet sRight = sMsg
MsgBox "gaga" & sRight, vbExclamation, Title:=sMsg
End Sub
' Pfad in der Registry angeben
aSecBetriebs =
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\Environment"
' Lesen des Normal Simplex Druckers
strBetriebs = System.PrivateProfileString(FileName:="", _
Section:=aSecBetriebs,
Key:="PROCESSOR_ARCHITECTURE")
'
Retourwert 32 Bit = x86
'
Retourwert 64 Bit = AMD64 oder IA64
If strBetriebs = "AMD64" Or strBetriebs = "IA64" Then
strBit = "64 Bit"
Else
strBit = "32 Bit"
End
If
' Pfad in der Registry angeben
aSecBetr =
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
'
Lesen des ProductName
strWindowsEdition
= System.PrivateProfileString(FileName:="",
_
Section:=aSecBetr,
Key:="ProductName")
strWindowsServicePack
= System.PrivateProfileString(FileName:="",
_
Section:=aSecBetr,
Key:="CSDVersion")
If strWindowsServicePack = ""
Then
strWindowsServicePack = "Service
Pack: -"
End
If
Sub RegistryEintraegeAendern()
'
' Pfad in der Registry angeben
aSec =
"HKEY_CURRENT_USER\Printers\VV Printer"
'
Lesen des Check Druckers
System.PrivateProfileString(FileName:="", _
Section:=aSec, Key:="Check") =
"\\genadlprnp001.generali.intra\PR0811644 - Check"
'
Lesen des FollowMe Druckers
System.PrivateProfileString(FileName:="", _
Section:=aSec, Key:="FollowMe") =
"\\GENADLPRNP002\FOLLOWME-COLOR"
End Sub
Sub AusgeblendeterTextErkennen()
If
Selection.Type = wdSelectionNormal Then
If Selection.Font.Hidden = Selection.Font.Hidden = True Then
MsgBox "There is hidden text in the selection."
End If
End
If
End
Sub
Public
Sub DatasetTest()
Dim strDataset() As String
Dim strListe As
String
Dim arrsplit As
Variant
Dim strDelimiter As String
Dim intZaehler As
Integer
Dim a As Integer
ReDim strDataset(10000)
' Dataset kann zum Beispiel folgender
String sein:
'
Daten01;Daten02;Daten03;Daten04;Daten05;Daten06;Daten07
' Dieser wird dann in einzelne Werte
(getrennt durch den Delimiter) aufgeteilt.
strDelimiter = ";" 'Trennung der Datenzeile mit...
If ActiveDocument.Bookmarks.Exists("dataset") = True Then
'Existiert die Textmarke
strListe = ActiveDocument.Bookmarks("dataset").Range.Text
arrsplit = Split(strListe, strDelimiter) 'Festzustellen wann fertig ist.
'Hier noch in die einzelnen Verte abfüllen (sind jedoch in
arrSplit(0),arrSplit(1),usw schon enthalten)
If strListe = "" Then
'Nichts machen, Variabel ist ja
leer
Else
For intZaehler
= LBound(arrsplit) To UBound(arrsplit)
strDataset(a) =
arrsplit(intZaehler)
a = a + 1
Next intZaehler
End If
End If
End Sub
' Hier als Beispiel für einen String,
der aufgefüllt wurde um die Papierquelle der einezelnen Seiten aufzuschlüsseln.
Public Sub SeitePapierart()
Dim strSeiten() As String
ReDim strSeiten(9)
Dim strPapierart() As String
ReDim strPapierart(9)
Dim strSeitePapier() As String
ReDim strSeitePapier(9)
Dim arrsplit() As String
strDelimiter = ";"
strSubDelimiter = ","
strSeitenPapierart = "Seite1,Briefpapier;Seite2,Policenpapier;Seite3,Weissespapier;Seite4,MTpapier;Seite5,ESRpapier"
arrsplit = Split(strSeitenPapierart, strDelimiter) ' Grobsplittung ;
For i = 0 To
UBound(arrsplit)
strSeitePapier() = Split(arrsplit(i), strSubDelimiter) ' Feinsplittung
strSeiten(i) = strSeitePapier(0)
strPapierart(i) = strSeitePapier(1)
Next i
'
Zum besseren Verständniss, die Aufsplittung in einzelne Variablen
str_01_Seite = strSeiten(0)
str_01_Paperart = strPapierart(0)
str_02_Seite = strSeiten(1)
str_02_Paperart = strPapierart(1)
str_03_Seite = strSeiten(2)
str_03_Paperart = strPapierart(2)
str_04_Seite = strSeiten(3)
str_04_Paperart = strPapierart(3)
str_05_Seite = strSeiten(4)
str_05_Paperart = strPapierart(4)
str_06_Seite = strSeiten(5)
str_06_Paperart = strPapierart(5)
str_07_Seite = strSeiten(6)
str_07_Paperart = strPapierart(6)
str_08_Seite = strSeiten(7)
str_08_Paperart = strPapierart(7)
str_09_Seite = strSeiten(8)
str_09_Paperart = strPapierart(8)
str_10_Seite = strSeiten(9)
str_10_Paperart = strPapierart(9)
End Sub
Sub AnzalStrinsAusgeben()
arLines =
Split("Test1.Text.tess",
".")
For i = 0 To
UBound(arLines)
MsgBox i
Next i
End
Sub
Sub AnzahlZeichenHatDerString()
Dim intLaenge As Integer
intLaenge = Len("1234")
MsgBox intLaenge ' Ergebnis ist 4
End Sub
Option
Explicit
Sub TestPrinter()
Debug.Print Application.ActivePrinter
ChangePrinter
"FreePDF*"
Debug.Print Application.ActivePrinter
ChangePrinter
"*HP LaserJet 5*"
Debug.Print Application.ActivePrinter
End
Sub
Sub ListAllPrinters()
Dim WshNetwork As
Object, objPrinters As Object, i As Integer
Set WshNetwork =
CreateObject("WScript.Network")
Set objPrinters = WshNetwork.EnumPrinterConnections
For i = 0 To
objPrinters.Count -
1 Step 2
Debug.Print
objPrinters.Item(i + 1)
& " an " & objPrinters.Item(i)
Next
Set WshNetwork = Nothing
End
Sub
Function
ChangePrinter(ByVal
strPrinter As String) As
Boolean
Dim WshNetwork As
Object, objPrinters As Object, i As Integer
Set WshNetwork =
CreateObject("WScript.Network")
Set objPrinters = WshNetwork.EnumPrinterConnections
For i = 1 To
objPrinters.Count Step
2
If objPrinters.Item(i)
Like strPrinter Then
WshNetwork.SetDefaultPrinter
objPrinters.Item(i)
ChangePrinter = True
Exit For
End
If
Next
Set WshNetwork = Nothing
End
Function
Sub DocumentRange()
Set myrange = ActiveDocument.Range 'Ganzes Dokument in Range
myrange.Select 'Ganzes Dokument markieren
Selection.EndKey 'Die Markierung aufheben! Ansonsten wird weiter markiert.
Selection.HomeKey Unit:=wdStory 'Oder zu Beginn springen
End Sub
Könnte auch einfach mit Selection.WholeStory erfolgen
Sub DokumentAnAdresseSenden()
Dim outl As Object
Dim Mail As Object
Set outl =
CreateObject("Outlook.application")
Set Mail =
outl.createitem(olmailitem)
Mail.Subject
= "Mein Betreff"
Mail.to =
"xxx@yyyyyx.de"
Mail.attachments.Add ActiveDocument.Path & "\" & ActiveDocument.name
Mail.Display
Set outl = Nothing
Set Mail = Nothing
End Sub
' Listet (schreibt diese ins Dokument)
die Verweise des Normal.dotm auf
Sub VBEVerweiseNormal()
Dim intVerweisZaehler As Integer
Dim strVBVerweis As String
Dim strVBVerweisWert As String
Dim strVBZusammenfassung As String
Dim strVBVerweiseVon As String
Dim vbp As Object 'VBProject
Set vbp = NormalTemplate.VBProject '
For intVerweisZaehler = 1 To vbp.References.Count
strVBVerweiseVon = vbp.name
strVBVerweis = vbp.References(intVerweisZaehler).name
strVBVerweisWert = vbp.References(intVerweisZaehler).FullPath
strVBZusammenfassung = strVBZusammenfassung & strVBVerweis & vbCrLf & strVBVerweisWert & vbCrLf
' msg = msg & vbp.References(i).name &
vbCrLf & vbp.References(i).FullPath & vbCrLf
Next intVerweisZaehler
'Call MsgBox(msg, vbInformation,
"Auflistung der Verweise für: " & vbp.name)
'Selection.TypeText
Text:="Auflistung der Verweise für:
" & strVBVerweiseVon & vbCrLf &
"----------------------------------" & vbCrLf &
strVBZusammenfassung
MsgBox "Auflistung der Verweise für: " & strVBVerweiseVon & vbCrLf & "----------------------------------" & vbCrLf & strVBZusammenfassung
End Sub
Sub DatumPruefenGroeserKleiner()
Dim strBriefdatumPlusAlsDatum As Date
Dim datdatumheute As Date
intBriefdatumPlus = 7
strBriefdatumPlusAlsDatum = "12.03.2013"
datdatumheute = "01.03.2013"
Prüfen = IIf(strBriefdatumPlusAlsDatum > datdatumheute, "Grösser", "Kleiner")
End Sub
' Gibt ein Fehler beim Einzelschritt
Sub Verweishinzufuegen()
On
Error Resume Next
VBE.ActiveVBProject.References.AddFromFile "H:\Templates\WordStartUp\generali.dotm"
End Sub
Sub VerweishinzufuegenTwo()
Dim I As Integer
Dim strDateiPfad(1) As String 'gilt für 1 Verweise (klar!)
strDateiPfad(1)
= "H:\Templates\WordStartUp\generali.dotm"
' strDateiPfad(2) =
"C:\WINDOWS\system32\stdole2.tlb"
' strDateiPfad(3) =
"C:\WINDOWS\system32\MSCOMCTL.OCX"
' strDateiPfad(4) =
"C:\Programme\Microsoft Office\Office10\MSCAL.OCX"
On Error GoTo fehler
'Hier werden die Verweise zugewiesen.
'Falls ein Verweis schon existiert, wird ein Fehler 32813 ausgeworfen,
'der in der Fehlerbehandlung abgefangen wird.
For I = 1 To 1
VBE.ActiveVBProject.References.AddFromFile
strDateiPfad(I)
Next I
Exit Sub
fehler:
If Err.Number = 32813 Then Resume Next
End
Sub
oder:
NormalTemplate.VBProject.References.AddFromFile
_
FileName:="C:\My Documents\RefMe.dotm"
oder:
' Fügt ein Verweis beim Aktiven Projekt
hinzu
VBE.ActiveVBProject.References.AddFromFile "H:\Templates\WordStartUp\RefMe.dotm"
Modul in Normal.dotm importieren
Sub NormalImport()
'Import the BAS file into Normal.
NormalTemplate.VBProject.VBComponents.Import _
FileName:="C:\My Documents\AddMeModule.bas"
'
Könnte dann auch gestartet werden
'Run
the named macro.
Application.Run "AddMeMacro"
End Sub
Modul von einer anderen Vorlage ins Normal.dotm kopieren
'Das folgende Beispielmakro kopiert ein
Modul namens "CopyMeModule" aus einer Vorlage "CopyMod.dot"
in die Vorlage "Normal.dotm": (ungetestet)
Sub OrgCopy()
'Specifies the source, destination, name
' and the type of object being copied.
Application.OrganizerCopy Source:="C:\My Documents\CopyMod.dotm",
_
Destination:=NormalTemplate.FullName, Name:="CopyMeModule",
_
Object:=wdOrganizerObjectProjectItems
End Sub
Public Sub AbfragenZahl()
'Abfrage ob die Variable eine Zahl
enthält
Dim strEingabe As String
strEingabe = "01.03.2013"
If IsNumeric(strEingabe) Then
MsgBox strEingabe & " ist eine Nummerische Zahl."
Else
MsgBox strEingabe & " ist keine Nummerische Zahl."
End If
'Abfrage ob die Variable ein Datum
enthält
strEingabe = "2013.03.08"
If IsDate(strEingabe) Then
'wenn ja umwandeln in ein gewünschtes Format
strEingabe = Format(strEingabe, "dd.mm.yyyy")
MsgBox strEingabe & " ist ein Datum."
Else
MsgBox strEingabe & " ist keine Datum."
End If
End Sub
Public Sub VariableInhaltZeichenErsetzen()
strdateinamelang = "Produkt_SP75O1/2/3/4_FA"
' Einzelne Zeichen eines Strings
ersetzen? Zum Beispiel / durch -
' Das geht mit der Replace-Funktion von
VB 6 so:
' alle '/' durch '-' ersetzen
sString = Replace(strdateinamelang, "/", "-")
' oder alle "a" durch
"e" ersetzen
sString =
"xxxxayyyyyammmmm"
sString = Replace(sString, "a", "e")
End Sub
'
strTextDatei = strPfadNeuA & strFName
strTextDatei = "C:\TEMP\" & "Testfile.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
strTextinhalt = (fso.OpenTextFile(strTextDatei).readall)
Sub AbsatzmarkeInSelectionErsetzen()
strbetreff = Selection.Text
strbetreff = Replace(strbetreff,
Chr(13), Chr(11))
Selection.TypeText strbetreff
End
Sub
In Variable diese zu ersetzen geht leider nicht. Daher einen kleinen Umgweg mit eingefügten Text markieren suchen ersetzen und wieder einfügen.
strTextDatei = strPfadNeuA & strFName
'
strTextDatei = "C:\TEMP\" & "Testfile.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
strTextinhalt = (fso.OpenTextFile(strTextDatei).readall)
Selection.Style = ActiveDocument.Styles("Überschrift 2")
Selection.TypeText strFName 'Titel
Selection.TypeParagraph
Selection.Style = ActiveDocument.Styles("tarife_1") ' Nachfolgende Formatvorlage
ActiveDocument.Bookmarks.Add Range:=Selection.Range, name:="SysBeginn"
Selection.TypeText strTextinhalt 'Text
ActiveDocument.Bookmarks.Add Range:=Selection.Range, name:="SysEnde"
Set myRange
= ActiveDocument.Bookmarks("SysBeginn").Range
myRange.SetRange
Start:=myRange.Start, _
End:=ActiveDocument.Bookmarks("SysEnde").Range.End
myRange.Select
strbetreff = Replace(myRange,
Chr(13), Chr(11))
Selection.TypeText strbetreff
Selection.EndKey 'Die Markierung aufheben! Ansonsten wird weiter markiert.
Selection.TypeParagraph
Selection.TypeParagraph
Sub FooterTextReplace()
Dim oSection As
Word.Section
Dim oRange As Word.Range
Dim var
For Each
oSection In ActiveDocument.Sections()
For var
= 1 To 3
Set oRange
= oSection.Footers(var).Range
oRange.Find.Execute FindText:=" \* MERGEFORMAT ", _
ReplaceWith:="", Replace:=wdReplaceAll
Set oRange
= Nothing
Next
Next
End
Sub
Sub WoerterZahlen()
Dim intAnzahlWoerter As Integer
Dim strSuchWort As
String
strSuchWort =
" \* MERGEFORMAT "
' With ActiveDocument.Content.Find
With
ActiveDocument.Selection.Text
Do While .Execute(FindText:=strSuchWort, Forward:=True, Format:=True, _
MatchWholeWord:=True) = True
intAnzahlWoerter = intAnzahlWoerter
+ 1
Loop
End With
MsgBox "Das Wort: '" & strSuchWort & "' wurde " & intAnzahlWoerter & " x gefunden."
End Sub
Sub WoerterZahlenvonMarkierung()
Dim intAnzahlWoerter As Integer
Dim strSuchWort As String
strSuchWort = " \* MERGEFORMAT "
With Selection.Find
Do While .Execute(FindText:=strSuchWort, Forward:=True, Format:=True, _
MatchWholeWord:=True) = True
intAnzahlWoerter = intAnzahlWoerter
+ 1
Loop
End With
'
MsgBox "Das Wort: '" & strSuchWort & "' wurde " & intAnzahlWoerter & " x gefunden."
End Sub
oder, so, dass die Markierung welche zuvor war wieder erstellt wird. Markierung bleibt
Sub WoerterZahlenvonMarkierungBehalten()
Dim intAnzahlWoerter As Integer
Dim strSuchWort As String
strSuchWort =
" \* MERGEFORMAT "
With Selection.Find
ActiveDocument.Bookmarks.Add Range:=Selection.Range, name:="SysMarkierung"
Set myRange
= ActiveDocument.Bookmarks("SysMarkierung").Range
myRange.SetRange
Start:=myRange.Start, _
End:=ActiveDocument.Bookmarks("SysMarkierung").Range.End
Do While .Execute(FindText:=strSuchWort) = True
intAnzahlWoerter =
intAnzahlWoerter + 1
Loop
End With
myRange.Select
'myRange markieren
'
MsgBox "Das Wort: '" & strSuchWort & "' wurde " & intAnzahlWoerter & " x gefunden."
'Selection.EndKey
'Die Markierung aufheben!
ActiveDocument.Bookmarks("SysMarkierung").Delete
End
Sub
Sub TexdateiErstellenReinschreiben()
Open "C:\TEMP\Textdatei.txt" For Output As #1
Print #1, "Hallo dies ist der Inhalt der Textdatei.txt"
Close #1
End Sub
'Dokument ".doc" erstellen
und speichern:
Documents.Add DocumentType:=wdNewBlankDocument
ActiveDocument.SaveAs FileName:="C:\TEMP\doutput.doc", FileFormat:=wdFormatDocument
ActiveDocument.ActiveWindow.Close SaveChanges:=wdSaveChanges
'Dokument ".docx" erstellen
und speichern:
Documents.Add DocumentType:=wdNewBlankDocument
ActiveDocument.SaveAs2 FileName:="C:\TEMP\doutput.docx", FileFormat:=wdFormatXMLDocument
ActiveDocument.ActiveWindow.Close SaveChanges:=wdSaveChanges
'Dokument ".docm" erstellen
und speichern:
Documents.Add DocumentType:=wdNewBlankDocument
ActiveDocument.SaveAs2 FileName:="C:\TEMP\doutput.docm", FileFormat:=wdFormatXMLDocumentMacroEnabled
ActiveDocument.ActiveWindow.Close SaveChanges:=wdSaveChanges
dotx =
wdFormatXMLTemplate
dotm = wdFormatXMLTemplateMacroEnabled
|
Name |
Value |
Description |
|
wdFormatDocument |
0 |
Microsoft
Office Word 97 - 2003 binary
file format. |
|
wdFormatDOSText |
4 |
Microsoft DOS text format. |
|
wdFormatDOSTextLineBreaks |
5 |
Microsoft DOS
text with line breaks preserved. |
|
wdFormatEncodedText |
7 |
Encoded text format. |
|
wdFormatFilteredHTML |
10 |
Filtered HTML format. |
|
wdFormatFlatXML |
19 |
Open XML file
format saved as a single XML file. |
|
wdFormatFlatXML |
20 |
Open XML file
format with macros enabled saved as a single XML file. |
|
wdFormatFlatXMLTemplate |
21 |
Open XML
template format saved as a XML single file. |
|
wdFormatFlatXMLTemplateMacroEnabled |
22 |
Open XML
template format with macros enabled saved as a single XML file. |
|
wdFormatOpenDocumentText |
23 |
OpenDocument Text format. |
|
wdFormatHTML |
8 |
Standard HTML format. |
|
wdFormatRTF |
6 |
Rich text format (RTF). |
|
wdFormatStrictOpenXMLDocument |
24 |
Strict Open
XML document format. |
|
wdFormatTemplate |
1 |
Word template format. |
|
wdFormatText |
2 |
Microsoft Windows text format. |
|
wdFormatTextLineBreaks |
3 |
Windows text
format with line breaks preserved. |
|
wdFormatUnicodeText |
7 |
Unicode text format. |
|
wdFormatWebArchive |
9 |
Web archive format. |
|
wdFormatXML |
11 |
Extensible
Markup Language (XML) format. |
|
wdFormatDocument97 |
0 |
Microsoft Word 97 document format. |
|
wdFormatDocumentDefault |
16 |
Word default
document file format. For
Word, this is the DOCX format. |
|
wdFormatPDF |
17 |
PDF format. |
|
wdFormatTemplate97 |
1 |
Word 97 template format. |
|
wdFormatXMLDocument |
12 |
XML document format. |
|
wdFormatXMLDocumentMacroEnabled |
13 |
XML document
format with macros enabled. |
|
wdFormatXMLTemplate |
14 |
XML template format. |
|
wdFormatXMLTemplateMacroEnabled |
15 |
XML template
format with macros enabled. |
|
wdFormatXPS |
18 |
XPS format. |
' Erstellt 18.06.2013 ITS/P.Steiner
' Das Briefdatum -1 Tagen rechnen.
' Diese dann auf die neue Textmarke
neues Tagum legen und die Textmarke
' wieder neu setzen
Dim Datum1 As Date ' Variablen deklarieren.
Dim IntervallTyp As Variant
Dim Zahl As
Integer
Dim strBriefdatum As Date
Public
Sub MAIN()
'
If
ActiveDocument.Bookmarks.Exists("briefdatum") = True Then
strBriefdatum = ActiveDocument.Bookmarks("briefdatum").Range.Text ' TM Inhalt in Variable lesen
IntervallTyp = "d" ' "d" gibt Tag als Intervall an.
Zahl = -1
strDatumNeu = DateAdd(IntervallTyp, Zahl, strBriefdatum)
If ActiveDocument.Bookmarks.Exists("SysNeuesDatum") Then
Set rng
= ActiveDocument.Bookmarks("SysNeuesDatum").Range
rng.Text
= strDatumNeu
ActiveDocument.Bookmarks.Add "SysNeuesDatum", rng
End If
End
If
End
Sub
Sub WordAlsPDF_Speichern()
' Erstellt: ITS/P.Steiner 18.09.2013
' Word-Dokument wird mit gleichem
Dateinamen am selben Speicher-Ort
' als PDF-Datei abgespeichert.
' Sollte schon eine PDF-Datei am selben
Ort vorhanden sein, wird
' diese ohne Meldung überschrieben.
' Wird mit dem ShortCut Ctrl + Alt + 5
gestartet
On
Error GoTo PDFError:
Dim Pfad As
String
Dim strPfad As
String
Dim strDoknamePDF As String
Dim strDateiVorhanden As String
strPfad = ActiveDocument.Path
If strPfad <> "" Then
strPfad = strPfad & Application.PathSeparator
End
If
strDoknamePDF = ActiveDocument.Name
'Dateinamen kürzen. So, dass dieser
ohne Endung (Extension besteht)
Pos =
InStr(strDoknamePDF, ".")
If Pos > 0 Then
strDoknamePDF = Left(strDoknamePDF, Pos - 1)
End
If
ActiveDocument.ExportAsFixedFormat OutputFileName:=strPfad
& strDoknamePDF, ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=True, OptimizeFor:=wdExportOptimizeForPrint, Range:=
_
wdExportAllDocument,
From:=1, To:=1,
Item:=wdExportDocumentContent, _
IncludeDocProps:=True, KeepIRM:=True,
CreateBookmarks:= _
wdExportCreateNoBookmarks,
DocStructureTags:=True, BitmapMissingFonts:= _
True, UseISO19005_1:=False
'Bei Problemen
ExportFormat:=wdExportFormatPDF ändern auf ExportFormat:=17
' Abfragen ob es die neue Datei
"PDF" gibt
strDateiVorhanden = Dir(strPfad & strDoknamePDF & ".pdf")
If strDateiVorhanden <> "" Then
MsgBox "Dokument als PDF erstellt: OK"
Else
MsgBox "Dokument nicht als PDF erstellt: NOK"
End
If
GoTo PDFEnde:
PDFError:
MsgBox "Dokument nicht als PDF erstellt: NOK"
PDFEnde:
End Sub
' Prozedur welche die Funktion aufruft
und den ermittelten Wert zurückbekommt.
' Beim Aufruf können Werte mittels
Variablen mitgegeben werden (am Besten nicht die gleichen Variablen verwenden).
' Die mitgabe der Werte wird mittels
die erste, zweite usw. mitgegeben. Darum können (sollen) die Variablen
' auch unterschiedlich heissen.
Sub TestLaufFunktion()
Dim intSpracheUebergabe As Integer
Dim datDatumNeu As Date
datDatumNeu = "12.07.2013"
intSpracheUebergabe = 4
' 1.Variable
, 2.Variable
strDatumLongSprach = FormatDat(datDatumNeu, intSpracheUebergabe)
'
strDatumLongSprach = FormatDat("31.10.2013", 1) ' oder so
MsgBox strDatumLongSprach
End Sub
' In dieser Funktion wird das Datum im
Long Format zurückgegeben (Oktober 2013). Da es nicht Sprachabhängig geht
' hier diese Funktion bei der man auch
die Sprache mitgeben und im Long Format zurückerhält.
Public
Function FormatDat(Datum
As Date, intSprache As
Integer) As String
' 1.Variable , 2.Variable
Dim DD As
String
Dim MMM As String
Dim YYYY As String
If intSprache = 1 Then
DD = Format(Datum, "dd")
MMM = Choose(Month(Datum), "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")
YYYY = Format(Datum, "yyyy")
FormatDat = MMM & " " & YYYY
ElseIf intSprache = 2 Then
DD = Format(Datum, "dd")
MMM = Choose(Month(Datum),
"janvier", "février", "mars", "avril",
"mai", "juin", "juillet", "août",
"septembre", "octobre", "novembre", "décembre")
YYYY = Format(Datum, "yyyy")
FormatDat = MMM & " " & YYYY
ElseIf intSprache = 3 Then
DD = Format(Datum, "dd")
MMM = Choose(Month(Datum), "gennaio",
"febbraio", "marzo", "aprile",
"maggio", "giugno", "luglio", "agosto",
"settebre", "ottobre", "novembre", "dicembre")
YYYY = Format(Datum, "yyyy")
FormatDat = MMM & " " &
YYYY
ElseIf intSprache = 4 Then
DD = Format(Datum, "dd")
MMM = Choose(Month(Datum), "january",
"february", "march", "april", "may",
"june", "july", "august", "september",
"october", "november", "December")
YYYY = Format(Datum, "yyyy")
FormatDat = MMM & " " &
YYYY
End If
End Function
' Erstellt: 31.10.2013 ITS/rol/stp
' Anhand des Briefdatums wird auf die
Textmarke SysNeuesDatum nur der
' Monat und das Jahr gelegt (November
2013). Jedoch wird, wenn das Briefdatum nach dem 16. des Monats ist,
' 2 Monate und sonst 1 Monat
dazugezählt.
' Da VBA eigentlich keine
Sprachübersetzung liefert, (es wird die Sprache der Installation geliefert)
' wird der Monat für das Long Dat in
der unteren Funktion in die benötigte Sprache übersetzt.
'
Dim IntervallTyp As Variant
Dim intMonatDazu As Integer
Dim datBriefdatum As Date
Dim datDatumNeu As Date
Dim datTagDate As Integer
Dim intDokumentSprache As Integer
Dim datSysbriefdatumplusLong As Variant
Public
Sub MAIN()
'
If
ActiveDocument.Bookmarks.Exists("sprache") = True Then
intDokumentSprache = ActiveDocument.Bookmarks("sprache").Range.Text
If ActiveDocument.Bookmarks.Exists("briefdatum") = True Then
datBriefdatum = ActiveDocument.Bookmarks("briefdatum").Range.Text
'
datBriefdatum = Date ' Oder
einfach das heutige aktuelle Datum
' Abfrage welchen Tag es ist.
datTagDate = Format(datBriefdatum, "dd")
' Wenn es nach dem 16. des
Monates ist dann wird 2 Monate gewartet, sonst nur 1 Monat
If datTagDate >= 16 Then
intMonatDazu = 2
Else
intMonatDazu = 1
End If
IntervallTyp = "m" ' "m" gibt Monat als Intervall an.
datDatumNeu = DateAdd(IntervallTyp, intMonatDazu, datBriefdatum)
'
Hier der Aufruf der Funktion und Rückgabe des Wertes
'
Mitgegeben wird, das Datum und die Sprache
strDatumLongSprach = FormatDat(datDatumNeu, intDokumentSprache)
If ActiveDocument.Bookmarks.Exists("SysNeuesDatum") Then
Set rng = ActiveDocument.Bookmarks("SysNeuesDatum").Range
rng.Text
= strDatumLongSprach
ActiveDocument.Bookmarks.Add "SysNeuesDatum", rng 'TM wieder setzen
End If
End If
End
If
End Sub
' Da es für das Long Datum keine
Übersetzung gibt (habe jedenfalls keine gefunden)
' Wird der Monat hier in der Funktion
in die verlangte Sprache übersetzt.
' Die Funktion erhält mit Variablen das
Datum und die benötigte Sprache
Public
Function FormatDat(Datum
As Date, intSprache As
Integer) As String
Dim strTag As
String
Dim strMonat As String
Dim strJahr As String
If intSprache = 1 Then ' Deutsch
strMonat = Choose(Month(Datum), "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")
ElseIf
intSprache = 2 Then ' Französisch
strMonat = Choose(Month(Datum),
"janvier", "février", "mars", "avril",
"mai", "juin", "juillet", "août",
"septembre", "octobre", "novembre",
"décembre")
ElseIf
intSprache = 3 Then ' Italienisch
strMonat = Choose(Month(Datum),
"gennaio", "febbraio", "marzo",
"aprile", "maggio", "giugno", "luglio",
"agosto", "settebre", "ottobre",
"novembre", "dicembre")
ElseIf
intSprache = 4 Then ' Englisch
strMonat = Choose(Month(Datum),
"january", "february", "march",
"april", "may", "june", "july",
"august", "september", "october",
"november", "december")
ElseIf
intSprache = 11 Then ' Spanisch
strMonat = Choose(Month(Datum),
"enero", "febrero", "marzo", "abril",
"mayo", "junio", "julio", "agosto",
"septiembre", "octubre", "noviembre",
"diciembre")
End
If
'strTag
= Format(Datum, "dd")
strJahr = Format(Datum, "yyyy")
FormatDat = strMonat & " " & strJahr
'
End Function
Sub Monatsende()
Dim DaDatum As Date
DaDatum = "20.02.13"
MsgBox "Monatsende " & DateSerial(Year(DaDatum), Month(DaDatum) + 1, 1) - 1
End Sub
Sub QuartalErmitteln()
MsgBox "Das Datum ist im Quartal: " & Quartal("05.11.2012")
End
Sub
Function
Quartal(datWert As Date) As Integer
Dim intMonat
As Integer
intMonat = Month(datWert)
If intMonat
= 1 Or intMonat
= 2 Or intMonat
= 3 Then
Quartal = 1
ElseIf intMonat
= 4 Or intMonat
= 5 Or intMonat
= 6 Then
Quartal = 2
ElseIf intMonat
= 7 Or intMonat
= 8 Or intMonat
= 9 Then
Quartal = 3
ElseIf intMonat
= 10 Or intMonat
= 11 Or intMonat
= 12 Then
Quartal = 4
End If
End Function
Sub Test_AnzWo()
AnzWo Year(Date)
End
Sub
Sub AnzWo(XJahr As
Integer)
Dim DieWochen
As Integer, i As
Integer
For i = 31 To 28 Step -1
DieWochen = DIN_KW(DateSerial(XJahr, 12, i))
If DieWochen > 1 Then Exit For
Next
MsgBox DieWochen
End
Sub
Public
Function DIN_KW(DasDatum
As Date) As Byte
Dim KW As Date
KW = 4 +
DasDatum - Weekday(DasDatum, 2)
DIN_KW = (KW - DateSerial(Year(KW), 1, -6)) \ 7
End
Function
yyyy Jahr
q Quartal
m Monat
y Tag des Jahres
d Tag
w Wochentag
ww Woche
h Stunde
n Minute
s Sekunde
Sub AnzalWochenSeitDatumErmitteln()
Dim TheDate As Date ' Declare variables.
Dim Msg
TheDate = "01.11.2013"
Msg = "Anzahl Wochen seit dann: " & DateDiff("ww", TheDate, Now)
MsgBox Msg
End Sub
oder mehr angaben:
Sub TestRechnen()
Dim inttage As Integer
Dim lonStunden As
Long
Dim lonKosten As
Long
Dim strEingabedatum As Date
Dim intAnzWochen As Integer
strEingabedatum = "14.08.2013"
inttage = (DateDiff("d", Date, strEingabedatum)) * -1
intAnzWochen = DateDiff("ww", strEingabedatum, Date)
intAnzStunden = DateDiff("h", strEingabedatum, Now)
lonStunden = inttage * 24
lonKosten = inttage * 8
Kosten = Format(lonKosten, "##,##0.00")
MsgBox "Es sind bis Heute :" & vbCr & _
"Stunden " & vbTab & intAnzStunden & vbCr & _
"Tage " & vbTab & inttage & vbCr & _
"Wochen " & vbTab & intAnzWochen & vbCr & _
"Kosten " & vbTab & Kosten & vbCr
'"Anzahl Wochen seit dann: "
End Sub
Public Sub SonderZeichenEntfernen()
' Z.B. bei Erstellung eines Dateinamens
oder Ordners
' Da dürfen diese Sonderzeichen nicht
enthalten sein
Dim strSchadenNr As String
Dim Regex
strSchadenNr = "1\2/3:4*5?6<7>8|9 10"
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.Pattern = "(\/|:|\\|\*|\?|""|<|>|\||\.)"
.Global = True
strSchadenNr = .Replace(strSchadenNr, "")
End With
End Sub
'Denn FileCopy geht nicht, wenn eine
Datei von Office geöffnet ist.
Option
Explicit
'
Benötigte API-Deklaration
Private
Declare Function CopyFile Lib "kernel32" _
Alias "CopyFileA" ( _
ByVal lpExistingFileName As String, _
ByVal lpNewFileName As
String, _
ByVal bFailIfExists As Long) As Long
Sub TestDateiKopieren()
Dim strQuelldatei As String
Dim strZieldatei As String
Dim strDateiVorhandenStartup
strQuelldatei = "C:\TEMP\0000.docx" ' Namen und Pfad der Quelldatei1 festlegen.
strZieldatei = "C:\TEMP\1111.docx" ' Namen und Pfad der Zieldatei1 festlegen.
'
MsgBox FileCopy(strQuelldatei, strZieldatei) ' Quell- in Zieldatei1
kopieren.
FileCopy strQuelldatei, strZieldatei ' Quell- in Zieldatei1 kopieren.
strDateiVorhandenStartup = Dir("C:\TEMP\1111.docx")
If strDateiVorhandenStartup = "1111.docx" Then
MsgBox "Die Datei 1111.docx wurde kopiert."
Else
MsgBox "Die Datei AutomSchachtUmstBriefpVaduz.dotm konnte nicht kopiert werden. Oder ist schon vorhanden."
End If
End Sub
' Ersetzen des FileCopy-Befehls von VB
:-)
Public
Function FileCopy(ByVal
sSourceFile As String, _
ByVal sDestFile As
String, _
Optional ByVal bAlwaysOverwrite As Boolean = True) As Boolean
Dim nResult As Long
nResult = CopyFile(sSourceFile, sDestFile,
CLng(Abs(Not bAlwaysOverwrite)))
FileCopy = (nResult <> 0)
End
Function
Private
Declare Function OpenClipboard& Lib "user32"
(ByVal hwnd As Long)
Private
Declare Function EmptyClipboard Lib "user32" () As Long
Private
Declare Function CloseClipboard& Lib "user32"
()
Private
Sub SChlieessenn()
'Workbook_BeforeClose(Cancel
As Boolean)
ClearClipboard
End
Sub
Public
Sub ClearClipboard()
OpenClipboard 0&
EmptyClipboard
CloseClipboard
End
Sub
oder
Sub ClearClear()
'Es muss ein Verweis auf Microsoft
Forms 2.0 Object Library gesetzt sein
'direkt oder indirekt!!
Dim o As DataObject
Set o = New DataObject
o.SetText ""
o.PutInClipboard
Set o = Nothing
End
Sub '
Sub mehrere_Bereiche3()
Dim RaBereich As Range
Dim intSpalte As
Integer
intSpalte =
ActiveCell.Column
' Cells(Zeile, Spalte)
Set RaBereich = Union(Range(Cells(1, 1), Cells(1, 1)), _
Range(Cells(3,
intSpalte), Cells(3, intSpalte)), _
Range(Cells(5, intSpalte), Cells(8,
intSpalte)), _
Range(Cells(10, intSpalte), Cells(16,
intSpalte)), _
Range(Cells(18, intSpalte), Cells(26,
intSpalte)), _
Range(Cells(28, intSpalte), Cells(30,
intSpalte)))
RaBereich.Select
End Sub
Sub DateienOeffnenUndEtwasMachen()
' Erstellt 11.03.2010
' Modul um Dateien in einem Verzeichnis
abzuarbeiten.
On Error GoTo Fehler:
Dim strPfadNamen As String
Dim strDateiNamenPfad As String
'Dim strAnzahlSeitenTotal As Integer
Dim strFilename As String
Dim strFName As String
Dim strPfadNeuA As String
Dim strDateien() As String ' Dynamisches Datenfeld deklarieren
Dim intZaehler As Integer
Dim intZaehlerMax As Integer
'ReDim strDateien(1000000)
intZaehler = 0
'intTrennblaetterZahl = 0
'intZahlPolicen = 0
' Pfad mittels InputBox abfragen
strDateiNamenPfad = InputBox("Bitte nachfolgend den ganzen Pfad eingeben aus welchem alle enthaltenen Dateinamen aufgelistet" & _
" werden sollen." & vbCrLf & vbCrLf & "z.B. H:\DOutputSaveVVEV\pdf" & vbCrLf & _
" (ohne \ am Schluss)", " Angabe des Pfades des Ordner der die Dateien enthält")
strFilename = "*.*"
strPfadNeuA = strDateiNamenPfad & "\"
'strZielordner = strPfadNeuA &
"\" & "SaveMitLogo" & "\"
If strDateiNamenPfad = Empty Then
'
Nichts eingegeben oder Abbrechen wurde gewählt.
GoTo Ende:
Else
'
AddIns("H:\Templates\Autotext\autotext.dotx").Installed = True
' Documents.Add
DocumentType:=wdNewBlankDocument
strFName = Dir(strPfadNeuA &
strFilename)
Do While strFName <> ""
'
' Dokument Schreibgeschützt
öffnen
' Documents.Open
FileName:=strPfadNeuA & strFName, ReadOnly:=True
' Documents.Open
FileName:=strPfadNeuA & strFName
'
' strDateiname =
ActiveDocument.FullName
' strDateiname =
ActiveDocument.Name
' Hier etwas machen....
' If ActiveDocument.Saved = False
Then ActiveDocument.Save
' ActiveDocument.PrintOut
' ActiveDocument().Close
SaveChanges:=wdDoNotSaveChanges 'Schiessen ohne Speichern
ReDim Preserve
strDateien(intZaehler)
strDateien(intZaehler) = strFName
intZaehler = intZaehler + 1
'
strFName = Dir()
Loop
intZaehlerMax = intZaehler
End
If
intZaehler = 0
'
AddIns("H:\Templates\Autotext\autotext.dotx").Installed =
False
GoTo Ende:
Fehler:
MsgBox "Es muss ein Pfad eingegeben werden der auf diesem PC auch verbunden ist." & vbCrLf & _
"Der Pfad sollte z.B. wie folgt eingegeben werden: E:\daten\winword\vorlagen_produktiv\001", _
vbCritical, " Textmarkenvorkommen aller Vorlagen erstellen..."
Ende:
End Sub
Sub DateienSortierenDrucken()
' Erstellt: 21.11.2014 ITS/Pirmin
Steiner
' Makro um Dateinen aus einem
Verzeichnis aufzulisten.
' Mit dem Befehl:
' strFName = Dir(strPfadNeuA &
strFilename)
' Do While strFName <>
""
' werden die Dateinen nicht nach Name
sondern nach Datum gelistet.
' Auch wenn es nicht den Anschein macht
:-)
' In diesem Modul werden die Dateien in
einer Datei "DateinamenListe.txt" aufgelistet.
' Danach sortiert und in der Datei
"DateinamenListeSortiert.txt" ausgegeben
' Wenn gewünscht können die Sortierten
Dateien aufgelistet werden.
' Anderenfalls stehen einfach die
Listen, Sortiert und nicht zur verfügung.
'
On Error GoTo Fehler:
Dim strPfadNamen As String
Dim strDateiNamenPfad As String
Dim strAnzahlSeitenTotal As Integer
Dim strFilename As String
Dim strFName As
String
Dim strPfadNeuA As
String
Dim strDateien() As String ' Dynamisches Datenfeld deklarieren
Dim intZaehler As Integer
Dim intFF As Integer
Dim strDatei As String
Dim strDateinameListe As String
Dim strDateinameListeSort As String
Dim fg() As String
Dim x
Dim xx
Dim i As Integer
Dim intFrageDrucken As Integer
Dim intErgebnisDrucken As Integer
Dim intFlagDrucken As Integer
'ReDim strDateien(1000000)
intZaehler = 0
' Pfad mittels InputBox abfragen
strDateiNamenPfad = InputBox("Bitte nachfolgend den ganzen Pfad eingeben aus welchem alle enthaltenen Dateinamen aufgelistet" & _
" werden sollen." & vbCrLf & vbCrLf &
"z.B. R:\ITS_Adliswil\TEAMS\Druck\Test" & vbCrLf
& _
" (ohne \ am Schluss)", " Angabe des Pfades des Ordner der die Dateien enthält")
' Abfragen ob die Dokumente gedruckt
werden sollen
If strDateiNamenPfad <> "" Then
intFrageDrucken = MsgBox("Sollen alle sortierten Dokumente ausgedruckt werden = JA ?" & vbCrLf & _
"Oder sollen nur Listen im Verzeichnis erstellt werden = Nein ?" & vbCrLf & vbCrLf & _
"Es können nur Dateien welche über Winword ausgedruckt werden können, ausgedruckt." & vbCrLf & vbCrLf & _
"(Im augewählten Verzeichnis benötigt es Schreibrechte !)", vbYesNo + vbQuestion, _
" Dokumente Drucken ... ? ")
If intFrageDrucken = 6 Then
intErgebnisDrucken = 1
End If
If intFrageDrucken
= 7 Then
intErgebnisDrucken = 0
End If
End
If
strFilename = "*.*"
strPfadNeuA =
strDateiNamenPfad & "\"
strDateinameListe = "DateinamenListe.txt"
strDateinameListeSort = "DateinamenListeSortiert.txt"
If strDateiNamenPfad = Empty Then
'
Nichts eingegeben oder Abbrechen wurde gewählt.
GoTo Ende:
Else
strDatei = strPfadNeuA & "\" & strDateinameListe
intFF = FreeFile
Open strDatei For Output As #intFF ' Öffnet oder erstellt Textdatei zum hineinschreiben
strFName = Dir(strPfadNeuA & strFilename)
Do While strFName
<> ""
Print #intFF, strPfadNeuA & strFName
ReDim Preserve strDateien(intZaehler)
strDateien(intZaehler) = strFName
intZaehler = intZaehler + 1
'
strFName = Dir()
Loop
Close #intFF ' schliesst die Textdatei
End If
intZaehler = 0
' Dateiliste Sortieren !!!
' -------------------------
'einlesen der unsortierten date
i = 0
Open strDatei For Input As #1 'unsortierte Datei name anpassen
Do
While Not EOF(1)
Line Input #1,
TZ
ReDim Preserve fg(i)
fg(i) = TZ
i = i + 1
Loop
'
'
Sortieren "http://www.office-loesung.de/ftopic456749_0_0_asc.php"
For xx = 0 To
UBound(fg) - 1
For x = 0 To UBound(fg) - 1
If fg(x)
> fg(x + 1) Then
ret = fg(x)
fg(x) = fg(x + 1)
fg(x + 1)
= ret
End If
Next x
Next xx
Close #1
If intErgebnisDrucken = 1 Then
' Fals es Feldfunktionen für das Add-In autotext.dotx hat:
AddIns("H:\Templates\Autotext\autotext.dotx").Installed
= True
End
If
'Ausgeben der sortierten Datei
Open strPfadNeuA & strDateinameListeSort For Output As #1 'sortiertei date namen anpassen
For x = 0 To
UBound(fg) '- 1
If fg(x) <> "" Then Print #1, fg(x)
If fg(x) = strDateiNamenPfad & "\" & strDateinameListe Or fg(x) = strDateiNamenPfad & "\" & strDateinameListeSort Then
' Dateilisten sollen ja nicht gedruckt werden.
intFlagDrucken = 1
End If
If intFlagDrucken
= 0 Then
If intErgebnisDrucken = 1 Then
' Dokument ausdrucken
Application.PrintOut FileName:=fg(x)
End If
End If
intFlagDrucken = 0
Next x
Close
#1
If intErgebnisDrucken = 1 Then
' Fals es Feldfunktionen für das Add-In autotext.dotx hat:
AddIns("H:\Templates\Autotext\autotext.dotx").Installed
= False
End If
GoTo Ende:
Fehler:
MsgBox "Es muss ein Pfad eingegeben werden welcher auch vorhanden ist." & vbCrLf & _
"Auch müssen in diesem Verzeichnis die Schreibrechte vorhanden sein!" & vbCrLf & _
"Ebenso müssen die Dateien über Winword gedruckt werden können!" & vbCrLf & vbCrLf & _
"Der Pfad sollte z.B. wie folgt eingegeben werden: E:\daten\winword\vorlagen_produktiv\001", _
vbCritical, " Dokumente auflisten und ausdrucken ..."
Ende:
End Sub
Sub AddInEntfernen()
'
Add-In in "Dokumentvorlagen und Add-Ins" suchen und wenn
vorhanden, löschen (entfernen).
'
On Error Resume next, weil es sonst ein Fehler gibt, wenn das Add-In in
den "Dokumentvorlagen und Add-Ins"
'
aufgeführt ist, aber effektiv nicht vorhanden ist.
On Error GoTo Ende:
For Each ad
In AddIns
If (ad.Installed = False Or ad.Installed = True) Then
If ad.Name =
"BackstageSave.dotx" Then
' On Error Resume next, weil es
sonst ein Fehler gibt, wenn das Add-In in den
' "Dokumentvorlagen und
Add-Ins"
' aufgeführt ist, aber effektiv
nicht vorhanden ist.
On Error Resume Next
AddIns(ad).Delete
Err.Clear
On
Error GoTo Ende:
End If
End If
Next ad
GoTo SuperEnde:
Ende:
MsgBox "Error hier"
SuperEnde:
Err.Clear
End
Sub
Sub atributeaendern()
Dim fso As Object
Dim f As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("H:\Templates\WordStartUp\generali.dotm")
If f.Attributes
> 0 Then
If f.Attributes Mod 2 = 1 Then 'wenn
Schreibschutz aktiv...
f.Attributes = f.Attributes
- 1 '...deaktivieren
End If
End
If
End
Sub
Sub ZeichenZaehlen()
Dim intWords As Variant
Dim intChars As
Variant
intWords = ActiveDocument.BuiltInDocumentProperties(wdPropertyWords)
intChars = ActiveDocument.BuiltInDocumentProperties(wdPropertyCharsWSpaces)
MsgBox
"Diese Datei besteht aus " & intWords _
& "
Wörtern und " & intChars & " Zeichen (inkl. Leerzeichen)."
End
Sub
intWords = ActiveDocument.BuiltInDocumentProperties(wdPropertyWords)
intLines = ActiveDocument.BuiltInDocumentProperties(wdPropertyLines)
intChars = ActiveDocument.BuiltInDocumentProperties(wdPropertyCharsWSpaces)
Sub ZeichenZaehlen()
Dim intWords As
Variant
Dim intChars As
Variant
strAuswahl = Selection.Text
intWords = ActiveDocument.BuiltInDocumentProperties(wdPropertyWords)
intChars = ActiveDocument.BuiltInDocumentProperties(wdPropertyCharsWSpaces)
MsgBox
"Diese Datei besteht aus " & intWords _
& "
Wörtern und " & intChars & " Zeichen (inkl. Leerzeichen)."
End Sub
Sub ZeichenZaehlen2()
' Anzahl Paragraphen (Absatzmarken) hat
das ganze Dokument
MsgBox ActiveDocument.Paragraphs.Count & "
characters are selected"
' Wie viele Zeichen hat die markierte
Zeile
MsgBox Selection.Characters.Count & "
characters are selected"
End Sub
Sub DateinameExtrahieren()
'
Dim strDateiname As String
strDateiname = "C:\Abfall\Dateiliste.txt "
Dim i As
Integer
i = Len(strDateiname)
Do
While Mid(strDateiname,
i, 1) <> "\"
i = i - 1
Loop
strDateinameNeu = Right(strDateiname, Len(strDateiname) - i)
End Sub
Oder ganz einfach:
strDateiname = "C:\Abfall\Dateiliste.txt "
strDateiname = Dir(strDateiname)
' Nur Verzeichnis auf FullPfad erhalten
sFullpath = "C:\Abfall\Dateiliste.txt "
sDirectory =
Left(sFullpath, InStrRev(sFullpath, "\") - 1)
' eventuell noch mit & "\"
Ursprung:
'Verzeichnis
sDirectory =
Left(sFullpath, InStrRev(sFullpath, "\") - 1)
'Dateiname
sFilename =
Mid(sFullpath, InStrRev(sFullpath, "\") + 1,
Len(sFullpath))
'Extension
(Dateityp)
sExtension =
Right(sFullpath, Len(sFullpath) - InStrRev(sFullpath, "."))
'Dateiname ohne Extension
sFilenameWithoutExtension = Replace(sFilename, "." & sExtension, "")
Sub FeldEinfuegen()
Selection.Fields.Add
Range:=Selection.Range,
Text:="page", Preserveformatting:=True
End
Sub
Sub UsernameEifuegen()
Selection.Collapse Direction:=wdCollapseStart
Set myField = ActiveDocument.Fields.Add(Range:=Selection.Range, _
Type:=wdFieldUserName)
End
Sub
PreserveFormatting
Optional Variant
True, um die dem Feld zugewiesene Formatierung bei Aktualisierungen beizubehalten.
Sub DeleteUnusedStylesinDoc()
'Nicht verwendete Formatvorlagen
löschen
'(Integrierte Formatvorlagen können
nicht gelöscht werden.)
Dim sty As Style
On Error Resume
Next '<- w i c h t i g
For Each sty
In ActiveDocument.Styles
If sty.InUse = True Then
With
ActiveDocument.Range.Find
.ClearFormatting
.Style =
sty.NameLocal
If .Execute(FindText:="", Format:=True, _
Wrap:=wdFindStop) = False Then
sty.Delete
End If
End With
End If
Next
End Sub
'Noch nicht getestet
Sub PrintStyles()
'Namen der benutzerdefinierten
Formatvorlagen
'im Direktfenster ausgeben.
Dim sty As Style
For Each sty
In ActiveDocument.Styles
If sty.BuiltIn = False Then
Debug.Print
sty.NameLocal
End If
Next
End Sub
Sub AnzahlWorte()
Dim rngRange As Word.Range
Dim lngAnzahlWorte As Long
Dim strText As
String
Dim lngL As
Long
Dim strDasWort4 As
String
Dim lngWortNr As
Long
Set rngRange = ActiveDocument.Range
lngAnzahlWorte =
rngRange.ComputeStatistics(wdStatisticWords)
'MsgBox
lngAnzahlWorte, , "Anzahl Worte im Doument"
strText =
rngRange.Text
strText = Replace(strText, ".",
" ", 1, -1, 1)
strText = Replace(strText, ",", " ", 1, -1, 1)
strText = Replace(strText, "?", " ", 1, -1, 1)
strText = Replace(strText, "!", " ", 1, -1, 1)
strText = Replace(strText, ":", " ", 1, -1, 1)
strText = Replace(strText, vbCr, " ", 1, -1, 1)
strText = Replace(strText, vbLf, " ", 1, -1, 1)
strText = Replace(strText, "(", " ", 1, -1, 1)
strText = Replace(strText, ")", " ", 1, -1, 1)
strText = Replace(strText, Chr(11),
" ", 1, -1,
1)
strText = Replace(strText, Chr(7),
" ", 1, -1,
1)
'ggf weitere Zeichen ergänzen
strText = Trim(strText)
Do
While Len(strText)
<> lngL
lngL = Len(strText)
strText = Replace(strText,
" ", " ", 1, -1, 1)
Loop
lngAnzahlWorte =
UBound(Split(strText, " ", -1, 1))
MsgBox lngAnzahlWorte, , "Anzahl Worte im Doument"
'wie oft kommt das 4. Wort im Documet
im Gesamten Text vor:
lngWortNr = 1
strDasWort4 = Split(strText, " ", -1, 1)(lngWortNr - 1)
lngAnzahlWorte = (Len(strText) - Len(Replace(strText, strDasWort4, "", 1, -1, 1))) / Len(strDasWort4)
MsgBox lngAnzahlWorte, , "So oft gibts das Wort: " & strDasWort4
End Sub
' Das wdDoc verliert seine Gültigkeit
wenn das Dokument nicht mehr geöffnet ist.
Dim wdApp As Object,
wdDoc As Object
Sub DokumentAlsOjecktDeclarieren()
'
Set wdApp =
GetObject(, "Word.Application")
Set wdDoc = wdApp.Documents("29095730686000.docx") ' Das Dokument muss offen sein, sonst Fehler
Documents(wdDoc).Activate
'
Oder zuerst abfragen ob die Variable nicht leer ist
If Not wdDoc Is Nothing Then
Documents(wdDoc).Activate
End If
End
Sub
' Erläuterung:
' Set wdApp = GetObject(,
"Word.Application")
Verwendet die bestehende Winword Instanz
' Set wdApp = GetObject("",
"Word.Application") Erstellt
eine neue Winword Instanz (zusätzliche)
================================= Neu nach dem ins Internet gestellt ==========================================
' Erstellt eine x-Belibige Datei in
einem Verzeichnis. Diese ist jedoch nicht konform und kann danach auch nicht
geöffnet oder verwendet werden.
Sub EineDateiErstellen()
Open "C:\TEMP\Image.tif" For Output As #1
Close #1
Open "C:\TEMP\Image.GRP" For Output As #1
Close #1
End Sub
Sub Umgebungsvariablen()
Dim i As
Integer, env As String
Do
i = i + 1
env = Environ(i)
Debug.Print
i, env
Loop Until env = ""
End
Sub
On Resume Next wieder aufheben
Sub FehlerResumeNextWiederAufheben()
'
Dim blgPDFonAction As Boolean
strPfadDoutputINISave =
"H:\Templates16\WordStartUp\DoutputSave.ini"
On Error Resume Next
'[mach Was, wo Fehler entstehen dürfen]
blgPDFonAction = System.PrivateProfileString(FileName:=strPfadDoutputINISave,
_
Section:="DoutputSave",
Key:="AlsPDF") 'Vom INI lesen
On Error GoTo 0
'[mach was, wo keine Fehler mehr entstehen
dürfen]
blgPDFonAction = System.PrivateProfileString(FileName:=strPfadDoutputINISave,
_
Section:="DoutputSave",
Key:="AlsPDF") 'Vom INI lesen
End Sub
' Variable verwenden, welche dann als
Docvariable den Wert übernehmen soll
strDatumTextmarke = "briefdatum"
' Im einen Template
' Zuerst aber die Dokumentvariable
löschen aus dem Dokument, damit diese sicher frei ist
' Da es nur mit einem Error
festgestellt werden kann ob die Variable schon besteht
On
Error Resume Next
ActiveDocument.Variables("DatumLangTMNamen").Delete
ActiveDocument.Variables.Add Name:="DatumLangTMNamen",
Value:=strDatumTextmarke
'
Das löschen einer Docvariable ist nicht einfach. Eine möglichkeit wäre (benötigt jedoch ein OnErrorResNext):
strVal = ActiveDocument.Variables("DatumLangTMNamen").Value
If Err.Number <> 0 Then
MsgBox strVal
MsgBox Err.Number
End If
' Im anderen Template bei welchem die
Variable verwendet werden soll (übergabe des Variablen Wertes)
strDatumTextmarke = ActiveDocument.Variables("DatumLangTMNamen").Value
' Dafür benötigt es zwei Textmarken im
Dokument: [briefdatum] und [SysDokSprache]
Public Sub LangesDatumErstellen()
'
Dim intFindZaehler As Integer
Dim strTag As String
Dim strMonat As String
Dim strJahr As String
Dim Datum As Date
Dim strSysDokSprache As Integer
Dim FormatDat As
Variant
If
ActiveDocument.Bookmarks.Exists("briefdatum") Then
Datum = ActiveDocument.Bookmarks("briefdatum").Range.Text
Else
GoTo Ende:
End
If
If ActiveDocument.Bookmarks.Exists("SysDokSprache") Then
strSysDokSprache = ActiveDocument.Bookmarks("SysDokSprache").Range.Text
Else
'
Sonst setzen wir die Sprache deutsch :-)
strSysDokSprache = 1
End If
'
Deutsch
If strSysDokSprache = 1 Then
strTag = Format(Datum, "d")
strMonat = Choose(Month(Datum), "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")
strJahr = Format(Datum, "yyyy")
FormatDat = strTag & ". " & strMonat & " " & strJahr
'
Französisch
ElseIf strSysDokSprache = 2 Then
strTag = Format(Datum,
"d")
strMonat = Choose(Month(Datum),
"janvier", "février", "mars", "avril",
"mai", "juin", "juillet", "août",
"septembre", "octobre", "novembre", "décembre")
strJahr = Format(Datum, "yyyy")
If strTag = "1" Then
strTag = strTag & "er"
End If
FormatDat = strTag & " " & strMonat & " " & strJahr
'
Italienisch
ElseIf strSysDokSprache = 3 Then
strTag = Format(Datum,
"d")
strMonat = Choose(Month(Datum),
"gennaio", "febbraio", "marzo",
"aprile", "maggio", "giugno", "luglio",
"agosto", "settebre", "ottobre",
"novembre", "dicembre")
strJahr = Format(Datum, "yyyy")
If strTag
= "1" Then
strTag = strTag & Chr(176) 'ev. 186
End If
FormatDat = strTag & " " & strMonat & " " & strJahr
'
Englisch
ElseIf strSysDokSprache = 4 Then
strTag = Format(Datum,
"d")
strMonat = Choose(Month(Datum),
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December")
strJahr = Format(Datum, "yyyy")
FormatDat = strTag & " " & strMonat & " " & strJahr
End If
' Dann die Textmarke mit dem langen
Datum überschreiben und wieder setzen
Set rng = ActiveDocument.Bookmarks(strDatumTextmarke).Range
rng.Text
= FormatDat
ActiveDocument.Bookmarks.Add strDatumTextmarke, rng
' Definition, was Höhergestellt werden
soll.
ReDim strFindText(0)
strFindText(0) = "er "
' strFindText(1) = "st "
' strFindText(2) = "th"
'
Do While intFindZaehler
<= 0
Set myRange
= ActiveDocument.Bookmarks(strDatumTextmarke).Range
myRange.Find.Execute FindText:=strFindText(intFindZaehler), MatchCase:=True, Forward:=True ' mit Gross/Kl.schreibung beachten und erstes Vorkommen im String
If myRange.Find.Found = True Then
myRange.Font.Superscript = True
End If
intFindZaehler = intFindZaehler + 1
Loop
Ende:
End Sub
Sub SpeicherortFuerDateien()
' Abfragen der Speicherorte für Dateien
' Dokumente
strDokumentePfad = Options.DefaultFilePath(wdDocumentsPath)
'"h:\documents"
'ClipArt-Bilder
?
'Benutzervorlagen
strNormaldotmPfad
= Options.DefaultFilePath(wdUserTemplatesPath) '
& "\"
'"h:\templates"
'
Arbeitsgruppenvorlagen
strArbeitsgruppenPfad
= Options.DefaultFilePath(wdWorkgroupTemplatesPath)
'"\\generali.intra\office\2010\templates"
'Autowiederherstellen-Dokumente
strAutowiederherstellenPfad = Options.DefaultFilePath(wdUserOptionsPath)
'"h:\documents"
'Wörterbücher
strWorterbuecherPfad = Options.DefaultFilePath(wdToolsPath)
'"h:\cfg"
'Autostrart
strGeneralidotmPfad = Options.DefaultFilePath(wdStartupPath) '& "\"
'"h:\templates\wordstartup"
'Winword.exe
Pfad
strApplicationWinwordPfad
= Application.Path
& "\Winword.EXE"
'"C:\Program
Files (x86)\Microsoft Office\Office14\Winword.EXE"
End
Sub
Sub Autotexte_in_Array()
Dim Autotext
As AutoTextEntry
Dim MyTemplate As Template
Dim z As Long
'die
aktuelle Vorlage zuordnen
Set MyTemplate = ActiveDocument.AttachedTemplate
'das Array dimensionieren
ReDim Eintrag_(2, MyTemplate.AutoTextEntries.Count)
z = 0
'alle Autotexte auslesen
For Each Autotext In ActiveDocument.AttachedTemplate.AutoTextEntries
Eintrag_(0, z) = Autotext.Name
Eintrag_(1, z) = Autotext.Value
z = z + 1
Next Autotext
End
Sub
Sub EmailDirektSenden()
Dim objOutlook As
Object
Dim objMail As Object
Set objOutlook =
CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.To = "pirmin.steiner@generali.com" ' Mehrere Adressaten Trennung mit Semilikon ;
.CC = ""
.BCC = ""
.Subject = "Betreffnis: VBA Nachricht"
.Body = "Anrede Text" & vbLf & "Text 1. Zeile Text 1. Zeile Text 1. Zeile" & vbLf & _
"Text 2. Zeile Text 2. Zeile Text 2. Zeile" & vbLf & _
"Text 3. Zeile Text 3. Zeile Text 3. Zeile" & vbLf & _
"Text 4. Zeile Text 4. Zeile Text 4. Zeile"
'
.Attachments.Add "C:/Beispiel_1.xlsx" 'Mehrere Anhänge fügen
Sie am einfachsten über mehrere Zeilen ein.
'
.Attachments.Add "C:/Beispiel_2.xlsx"
.Send 'Sendet die Email direkt automatisch
End With
End Sub
Attribute VB_Name = "BriefdatumLang"
' In dieser Funktion wird das Datum im
Long Format zurückgegeben (1. Oktober 2018). Sprachabhängig
' Die Sprache wird anhand der Textmarke
[SysDokSprache], welche in der angehängten 1ten-Seite vorhanden ist, abgefragt.
'
' Da es nicht möglich ist, die Variable
(welche Textmarke mit einem langen Datum versehen werden soll) vom Template ins
' Generali.dotm VBA zu übergeben, wird
hier eine erstellte Dokumentvariable verwendet.
' Der Aufruf erfolgt im VorDemDrucken
im betroffenen Template und enhält folgende Zeilen (briefdatum kann eine andere
TM sein):
'
-------------------------------------------------------------------------------------------------------------------------------
''
Hier wird angegeben, welche Textmarke denn mit dem langen Datum replace
werden soll (Sprache wird im Generali.dotm abgefragt)
'
strDatumTextmarke = "briefdatum"
'
' Dann die Variabele mit dem Textmarkennamen in die Dokumentvariable
aufnehmen
'
' Damit diese im ins Generali.dotm weitergegeben werden kann.
'
' Zuerst aber die Dokumentvariable löschen aus dem Dokument, damit diese
sicher frei ist
' On Error Resume Next
'
ActiveDocument.Variables("DatumLangTMNamen").Delete
' ActiveDocument.Variables.Add
Name:="DatumLangTMNamen", Value:=strDatumTextmarke
' If
ActiveDocument.Bookmarks.Exists(strDatumTextmarke) Then
' Application.Run
"ProjectGenerali.BriefdatumLang.MAIN"
' End If
'
-------------------------------------------------------------------------------------------------------------------------------
'
' Diese Variabele ist im Modul
PfadFunktion deklariert
'
Public strDatumTextmarke As String
'
Public
Sub MAIN()
'
Dim intFindZaehler As Integer
Dim strTag As String
Dim strMonat As String
Dim strJahr As String
Dim Datum As Date
'
' Dokumentvariable
"DatumLangTMNamen" in die Variable strDatumTextmarke zurückholen und
dann weiterverarbeiten
strDatumTextmarke = ActiveDocument.Variables("DatumLangTMNamen").Value
If ActiveDocument.Bookmarks.Exists(strDatumTextmarke) Then
Datum = ActiveDocument.Bookmarks(strDatumTextmarke).Range.Text
Else
GoTo Ende:
End
If
If ActiveDocument.Bookmarks.Exists("SysDokSprache") Then
strSysDokSprache = ActiveDocument.Bookmarks("SysDokSprache").Range.Text
Else
'
Sonst setzen wir die Sprache deutsch :-)
strSysDokSprache = 1
End If
'
Deutsch
If strSysDokSprache = 1 Then
strTag = Format(Datum, "d")
strMonat = Choose(Month(Datum), "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")
strJahr = Format(Datum, "yyyy")
FormatDat = strTag & ". " & strMonat & " " & strJahr
'
Französisch
ElseIf strSysDokSprache = 2 Then
strTag = Format(Datum,
"d")
strMonat = Choose(Month(Datum),
"janvier", "février", "mars", "avril",
"mai", "juin", "juillet", "août",
"septembre", "octobre", "novembre",
"décembre")
strJahr = Format(Datum, "yyyy")
If strTag = "1" Then
strTag = strTag & "er"
End If
FormatDat = strTag & " " & strMonat & " " & strJahr
'
Italienisch
ElseIf strSysDokSprache = 3 Then
strTag = Format(Datum,
"d")
strMonat = Choose(Month(Datum),
"gennaio", "febbraio", "marzo",
"aprile", "maggio", "giugno", "luglio",
"agosto", "settembre", "ottobre",
"novembre", "dicembre")
strJahr = Format(Datum, "yyyy")
If strTag
= "1" Then
strTag = strTag & Chr(176) 'ev. 186
End If
FormatDat = strTag & " " & strMonat & " " & strJahr
'
Englisch
ElseIf strSysDokSprache = 4 Then
strTag = Format(Datum,
"d")
strMonat = Choose(Month(Datum),
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December")
strJahr = Format(Datum, "yyyy")
FormatDat = strTag & " " & strMonat & " " & strJahr
End If
' Dann die Textmarke mit dem langen
Datum überschreiben und wieder setzen
Set rng = ActiveDocument.Bookmarks(strDatumTextmarke).Range
rng.Text
= FormatDat
ActiveDocument.Bookmarks.Add strDatumTextmarke, rng
If strSysDokSprache = 2 Then
' Definition, was
Höhergestellt werden soll.
ReDim strFindText(0)
strFindText(0) = "1er "
' strFindText(1) =
"st "
'
strFindText(2) = "th"
'
Do
While intFindZaehler <= 0
Set myRange
= ActiveDocument.Bookmarks(strDatumTextmarke).Range
myRange.Find.Execute FindText:=strFindText(intFindZaehler), MatchCase:=True, Forward:=True ' mit Gross/Kl.schreibung beachten und erstes Vorkommen im String
If myRange.Find.Found = True Then
' Neu definieren, da der 1er janvier (franz) am Schluss
auch ein er hat.
strFindText(0) = "er "
myRange.Find.Execute FindText:=strFindText(intFindZaehler), MatchCase:=True, Forward:=True ' mit Gross/Kl.schreibung beachten und erstes Vorkommen im String
myRange.Font.Superscript = True
End If
intFindZaehler = intFindZaehler
+ 1
Loop
End If
Ende:
End
Sub
Zahl:
'Formatierung einer Zahl mit Hochkomma
/ oder mit Nachkomma "##,##0.00"
lngZahl = Format(lngZahl, "##,##0")
Datum:
Mit VorNullen:
Set currProj = ActiveDocument.VBProject
MsgBox currProj.Name
Dim i As Long
i = ActiveDocument.VBProject.VBComponents.Count
Sub MAIN()
On
Error GoTo Fehler:
Dim oFSO As Object 'für das FileSystemObject
Set oFSO = CreateObject("Scripting.FileSystemObject")
If
Not oFSO Is Nothing Then
If Not oFSO.FolderExists("H:\Templates16\Brandic") Then
If oFSO.CreateFolder("H:\Templates16\Brandic")
<> "" Then
' MsgBox "OK, Ordner neu
angelegt!"
Else
' MsgBox "Ordner konnte nicht
neu angelegt werden!"
End If
Else
' MsgBox "Ordner existiert
bereits!"
End If
Set oFSO = Nothing
End If
' Ordner "d:\temp" mit allen
Unterordnern
' und Dateien nach "e:\temp"
kopieren
DirCopy
"\\gch.generali.ch\Roleshares\Office2016\UserStandardFileSources\Brandic",
"H:\Templates16\Brandic"
MsgBox "Die Daten wurden korrekt kopiert. Alles klar."
GoTo Ende:
Fehler:
MsgBox "Die Daten konnten nicht kopiert werden. Bitte beim Druck-Team melden."
Ende:
End Sub
' Funktion um alle Dateien eines Ordner
zu ermitteln
Private
Function ReadFilesFromDir(ByVal
sPath As String, _
Optional sFilter As
String = "*.*") As Variant
Dim sFilename
As String
Dim nCount As Long
ReDim sFiles(0) As String
If Right$(sPath,
1) <> "\" Then sPath = sPath & "\"
nCount = 0
sFilename = Dir(sPath & sFilter, vbNormal)
While sFilename
<> ""
If sFilename
<> "." And
sFilename <> ".." Then
ReDim Preserve
sFiles(nCount)
sFiles(nCount) = sFilename
nCount = nCount + 1
End If
sFilename = Dir
Wend
ReadFilesFromDir = sFiles
End Function
' Funktion, um alle Ordner einer Ebene
zu ermitteln
Private
Function ReadDirs(ByVal
sPath As String) As
Variant
Dim sFilename
As String
Dim nCount As Long
ReDim sFiles(0) As String
If Right$(sPath,
1) <> "\" Then sPath = sPath & "\"
nCount = 0
sFilename = Dir(sPath, vbDirectory)
While sFilename
<> ""
If sFilename
<> "." And
sFilename <> ".." And _
GetAttr(sPath & "\" &
sFilename) = vbDirectory Then
ReDim Preserve
sFiles(nCount)
sFiles(nCount) = sFilename
nCount = nCount + 1
End If
sFilename = Dir
Wend
ReadDirs = sFiles
End Function
'Die Hauptfunktion:
' Ordner inkl. aller Dateien und
Unterordner kopieren
Public
Function DirCopy(ByVal
sDir As String, _
ByVal dDir As String)
Dim dcV As Variant, dcI As Integer
On Error Resume Next
' zunächst alle Dateien ermitteln
If sDir = dDir Then Exit
Function
dcV = ReadFilesFromDir(sDir)
' Ziel-Verzeichnis erstellen
MkDir dDir
' alle Dateien kopieren
For dcI = 0 To
UBound(dcV)
FileCopy sDir & "\" &
dcV(dcI), dDir & "\" & dcV(dcI)
Next dcI
' Jetzt alle Unterordner ermitteln und Dateien kopieren
dcV = ReadDirs(sDir)
For dcI = 0 To UBound(dcV)
' Es kann
vorkommen, dass jemand den Ordner in sich
' selbst kopieren will - was eine Endlosschleife gäbe:
If dcV(dcI) = "" Then Exit For
'
Ziel-Unterordner erstellen:
MkDir dDir & "\" & dcV(dcI)
' Rekursiver Funktionsaufruf, um den Unterordner
' zu erstellen und die Dateien zu kopieren
DirCopy sDir & "\" &
dcV(dcI), dDir & "\" & dcV(dcI)
Next dcI
End
Function
Public
Sub Foldercopy()
Dim FsyObjekt
As Object
Set FsyObjekt
= CreateObject("Scripting.FileSystemObject")
FsyObjekt.CopyFolder
"c:\temp", "c:\temp2"
End Sub
Sub ListCOMs()
' Listet alle Add-Ins auf welche nicht
aktiviert sind.
Dim i As
Integer, str As String
Application.COMAddIns.Update
For i = 1 To
Application.COMAddIns.Count
str = str & Application.COMAddIns(i).Connect
& vbTab & Application.COMAddIns(i).Description
& vbCrLf
Next i
MsgBox str
End
Sub
Sub UninstallAllWordAddins()
Dim oAddin As AddIn
On
Error GoTo ErrAddin
For Each oAddin In AddIns
If oAddin.Installed Then
MsgBox oAddin.Name
oAddin.Installed
= False
End If
Next oAddin
If
Not oAddin Is Nothing Then Set oAddin = Nothing
ErrAddin:
If Err
<> 0 Then
Err.Clear
End If
End Sub
MsgBox "Der persönliche AutoText >> mrunterschrift << " & vbCrLf & "im Normal.dotm fehlt! " & _
"Bitte diesen AutoText gemäss Anleitung erfassen und erneut drucken." & vbCrLf & vbCrLf & "", _
vbExclamation + vbSystemModal, " AutoText für Untrschrift nicht vorhanden ..."
Bestimmter AutoText aus Normal.dotm abrufen und wenn vorhanden einfügen
Public Sub AutoTextAusgebenAlsText()
On Error GoTo Fehler:
Dim intBZähler As Integer
Dim intAnzAT As Integer
Dim intMRATFlag As Integer
'strNormalDotm = NormalTemplate
'strNormalDotmPath =
NormalTemplate.FullName
intBZähler = 1
intMRATFlag = 0
intAnzAT = NormalTemplate.AutoTextEntries.Count
Do While intBZähler <= intAnzAT 'Anzahl Durchläufe festlegen
strNameAutotext = NormalTemplate.AutoTextEntries(intBZähler).Name
If strNameAutotext = "mrunterschrift" Then
intMRATFlag = 1
If ActiveDocument.Bookmarks.Exists("Sysmrunterschrift") Then
Set myRange = ActiveDocument.Bookmarks("Sysmrunterschrift").Range
myRange.SetRange
start:=myRange.start, _
End:=ActiveDocument.Bookmarks("Sysmrunterschrift").Range.End
myRange.Select
NormalTemplate.AutoTextEntries("mrunterschrift").Insert Where:=Selection.Range 'Autotext einfügen
End If
End If
intBZähler = intBZähler + 1 'Angeben um welchen Wert der Zähler erhöt wird
Loop 'Wieder an Anfang
' Falls der AutoText nicht vorhanden
ist.
If intMRATFlag = 0 Then
MsgBox "Der persönliche AutoText '' mrunterschrift '' " & vbCrLf & "im Normal.dotm fehlt! " & _
"Bitte diesen AutoText gemäss Anleitung erfassen und erneut drucken.", _
vbExclamation + vbSystemModal, " AutoText für Untrschrift nicht vorhanden ..."
If ActiveDocument.Bookmarks.Exists("Sysmrunterschrift") Then
Set myRange
= ActiveDocument.Bookmarks("Sysmrunterschrift").Range
myRange.SetRange
start:=myRange.start, _
End:=ActiveDocument.Bookmarks("Sysmrunterschrift").Range.End
myRange.Select
Selection.Text = "*** Hier bitte die Unterschrift einfügen. ***"
Selection.EndKey
End If
End If
GoTo Ende:
Fehler:
MsgBox "Es ist ein Fehler aufgetreten beim Einfügen der persönlichen Unterschrift." & vbCrLf & _
"Bitte Dokument prüfen und bei einem Fehler im Dokument korrigieren. " & _
"Sollte dieser Fehler mehrmals erscheinen bitte beim Support melden.", _
vbExclamation, " Fehler in AutoText für Untrschrift Einfügen..."
Ende:
End Sub
'Alle Files von einem Typ in einen
anderen Ordner verschieben.
Public Sub Dateien_verschieben()
Dim strQuelle As String
Dim strZiel As String
Dim objFSO As Object
strQuelle = "C:\Temp\*.pdf"
strZiel = "C:\Temp\pdf\"
If Dir(strQuelle) = "" Then MsgBox
"Nix da!": Exit Sub
Set objFSO
= CreateObject("Scripting.FileSystemObject")
objFSO.MoveFile
strQuelle, strZiel
Set objFSO
= Nothing
End Sub
' Zallenformat erstellen für Tausender
Dezimalstellen, damit diese je nach
' Höhe der Zahl richtig formatiert wird.
Dim strZahlUnformatiert As String
Dim strFormatierungWert As String
Dim strZahlFormatiert As String
Sub FormatAufrufTest()
strZahlUnformatiert = 10000000
strZahlFormatiert = strZahlUnformatiert
strFormatierung = ZahlenFormat(strZahlUnformatiert)
strZahlFormatiert = Format(strZahlFormatiert, strFormatierungWert)
MsgBox strZahlFormatiert
End Sub
' Das Problem ist, dass wenn die Zahl kleiner
ist, werden die Tausendertrennzeichen davor die
' definiertenTausendertrennzeichnen trotzdem
aufgeführt werden.
' Somit die Kürzung je nach Grösse der Zahl
Public
Function ZahlenFormat(strFormatierung
As String) As String
If strZahlUnformatiert < 1000 Then
strFormatierung = "###"
ElseIf strZahlUnformatiert < 1000000 Then
strFormatierung = "#'###"
ElseIf strZahlUnformatiert < 1000000000 Then
strFormatierung = "#'###'###"
ElseIf strZahlUnformatiert < 1000000000000# Then
strFormatierung = "#'###'###'###"
Else
strFormatierung = "#'###'###'###'###"
End If
strFormatierungWert = strFormatierung
End Function
Besser geht es mit dem folgenden Befehl. Dieser habe ich leider erst später erfahren.
strTest1 = Format(4.45, "Standard") ' ergibt "4.5"
strTest2 = Format(10000000000.45, "Standard") ' ergibt "10'000'000'000.45"
'ohne die lästigen ''' vor der Zahl.
Wie wir gewünscht haben.
'Für Zahlformate können Sie die
folgenden vordefinierten Formatstring verwenden:
'Formatstring Bedeutung
'"General Number" Zeigt die
Zahl ohne Tausendertrennzeichen an.
'"Currency" Zeigt die Zahl
ggf. mit Tausendertrennzeichen an. Die Zahl hat zwei Nachkommastellen.
'Die Ausgabe hängt von den
Systemeinstellungen für das Gebietsschema ab.
'"Fixed" Zeigt mindestens
eine Stelle links und zwei Stellen rechts des Dezimalzeichens an.
'"Standard" Zeigt die Zahl
mit Tausendertrennzeichen sowie mit mindestens einer Stelle links und
'zwei Stellen rechts des
Dezimalzeichens an.
'"Percent" Zeigt die Zahl
multipliziert mit 100 und einem rechts angehängten Prozentzeichen (%)
'an. Die Zahl hat immer zwei
Nachkommastellen.
'"Scientific" Verwendet das
wissenschaftliche Standardformat.
'"Yes/No" Zeigt
"Nein" an, wenn die Zahl 0 ist, und andernfalls "Ja".
'"True/False" Zeigt False an,
wenn die Zahl 0 ist, und andernfalls True.
'"On/Off" Zeigt
"Aus" an, wenn die Zahl 0 ist, und andernfalls "Ein".
'Beispiele:
MsgBox Format(0.234, "General Number") ' ergibt "0,234"
MsgBox Format(1234.456, "Standard") ' ergibt "1.234,46"
MsgBox Format(0.456, "Fixed") ' ergibt "0,46"
MsgBox Format(1234.456, "Fixed") ' ergibt "1234,46"
MsgBox Format(0.5, "Percent") ' ergibt "50,00%"
MsgBox Format(0.5, "Scientific") ' ergibt "5,00E-01"
MsgBox Format(0, "True/False") ' ergibt Falsch
MsgBox Format(1, "True/False") ' ergibt Wahr
'Herausfinden ob etwas Markiert ist.
Mit Select funktioniert dies nicht
Sub WasMarkiert()
With Selection.Range
If .Start = .End Then
Application.StatusBar = "Nichts markiert"
Else
Application.StatusBar = "Markiert ist: " & Selection.Range.Text
End If
End With
End
Sub
Sub GeschuetztesLeerzeichenErsetzen()
'Aufruf mit Shortcut Alt + Z
'Den Cursor kann man links oder rechts
vom zu änderden Leerzeichen stellen.
'Auch kann man das Leerzeichen schon
markieren. Es wird dann automatisch durch
'ein "Geschütztes
Leerzeichen" ausgetauscht. Es werden nur normale Leerzeichen ersetzt.
Dim intAsciZeichen As Integer
Dim strSchonMarkiert As String
'Zuerst schauen ob schon etwas markiert ist
With Selection.Range
If .Start = .End Then
'Application.StatusBar =
"Nichts markiert"
Else
'Application.StatusBar =
"Markiert ist: " & Selection.Range.Text
intAsciZeichen = Asc(Selection.Text)
If intAsciZeichen
= 32 Then
Selection.TypeText Chr(160)
End If
Exit Sub
End If
End With
'Sonst Links schauen
Selection.MoveLeft Unit:=wdCharacter, count:=1, Extend:=wdExtend
intAsciZeichen = Asc(Selection.Text)
If intAsciZeichen
= 32 Then
Selection.TypeText Chr(160)
Exit Sub
End If
'Und sonst Rechts schauen
Selection.MoveRight Unit:=wdCharacter, count:=2, Extend:=wdExtend
intAsciZeichen = Asc(Selection.Text)
If intAsciZeichen
= 32 Then
Selection.TypeText Chr(160)
Exit Sub
End If
Selection.MoveLeft Unit:=wdCharacter, count:=1
End Sub
Option
Explicit
Private Declare Function
ShellExecuteA Lib "shell32.dll"
( _
ByVal hwnd As Long,
ByVal lpOperation As String, _
ByVal lpFile As
String, ByVal lpParameters As String, _
ByVal lpDirectory As
String, ByVal nShowCmd As Long _
) As Long
Sub PrintPDF()
' Printet alle Dokumente (pdfs) welche im
angegebenen Verzeichnis sind
' Mit "Print" auf den ausgewählten
Drucker in Winword
Dim strPath As
String
Dim FSO As Object,
F1 As Object
' Stellt den Standardprinter ein.
ActivePrinter = ""
strPath = "H:\Abfall\pdf\"
Dim intFrageDrucken As Integer
intFrageDrucken = MsgBox("Wurden der Printer auf Duplex gestellt?" & vbCrLf & _
"Adobe ist geschlossen?", vbYesNo + vbQuestion, _
" Einstellungen ...")
If intFrageDrucken = 6 Then
strPath = InputBox("Bitte Pfad zu den PDF's welche gedruckt werden sollen eingeben.")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FSO
= FSO.Getfolder(strPath)
For Each
F1 In FSO.Files
If LCase(CStr(F1.Path)) Like "*.pdf"
Then
ShellExecuteA 0&, "Print", F1.Path,
vbNullString, vbNullString, 0
End If
Next F1
End If
If intFrageDrucken
= 7 Then
Exit Sub
End If
MsgBox "Druck ist Fertig."
End Sub
Sub LeerzeichenVorAbsatzEntfernen()
' ShortCut Alt + n im Normal.dotm
fixiert (muss separat erstellt werden)
' Erstellt: 11.11.2022 Pirmin Steiner
' Entfernt alle Leerzeichen vor den
Absatzmarken
' Dies wird manchmal bei neuen
Briefbestellungen so in den Texten
' angeliefert. Mit diesem Makro kann
man diese alle gesammt entfernen.
With Selection.Find
.Text =
" ^p"
.Replacement.Text = "^p"
.Forward = True
.Wrap =
wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Public Sub FunktionTesten()
Dim strFunktionsTest As String
strFunktionsTest = WertRueckgabe
MsgBox WertRueckgabe
End Sub
Function WertRueckgabe() As String
WertRueckgabe = "6"
End Function
' Jedoch gibt es immer noch die Begrenzung der
Zeilen.
Sub TestGrosseMsgBox()
Dim WshShell As
Object
Dim intMSGBOX As
Integer
Set WshShell =
CreateObject("WScript.Shell")
'Syntax Popup(Text,[Timer in Sekunden],[Titel],[Value
Button])
intMSGBOX = WshShell.Popup("Test Nachricht ", 1, "Test MSGB", 64)
'Beispiel
lang
intMSGBOX = WshShell.Popup("Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
" Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht" & _
"Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht Test Nachricht", 0, "Test MSGB", 64)
End Sub
Public Sub SeitenfarbeAendern()
'
ActiveDocument.Background.Fill.ForeColor.ObjectThemeColor = wdThemeColorAccent1
ActiveDocument.Background.Fill.ForeColor.TintAndShade
= 0.6
ActiveDocument.Background.Fill.Visible = msoTrue
ActiveDocument.Background.Fill.Solid
ActiveDocument.ActiveWindow.View.DisplayBackgrounds = True
End Sub
' Estellt: 10.03.2023 Pirmin Steiner
' Beim Öffnen des Dokumentes wird automatisch
ein Mail mit einem Text drin
' an eine bestimmte Mailadresse gesendet.
' Das Abgehende Mail wird jedoch nicht im
Gesendete oder im Papierkorb angezeigt.
' Ohne Spuren :-)
' Läuft automatisch ab, beim Öffnen. Wenn ein
Template damit ausgestattet werden soll,
' dann müsste noch ein Modul mit AutoNew
erstellt werden mit dem Link auf das AutoOpen.
' Modul wird am Besten geschützt um ganz
verborgen zu bleiben.
' Extras... Eigenschaften von Project...
Schutz... (Project für Anzeige sperren)
Dim strMailadressen As String
Dim strUser As
String
Public Sub MAIN()
strUser = Environ("USERNAME")
If strUser <>
"---p103595" Then
DokumentAnAdresseSenden
End If
End Sub
Sub DokumentAnAdresseSenden()
Dim outl As Object
Dim Mail As Object
Dim olmailitem As
Variant
Set outl =
CreateObject("Outlook.application")
Set Mail =
outl.createitem(olmailitem)
' Mail.Subject = "Betreff"
Mail.Body =
"542"
Mail.To =
"p.steiner@email.com"
Mail.DeleteAfterSubmit
= True
Mail.Send
Set outl = Nothing
Set Mail = Nothing
End Sub
Public
Sub GibtEsDenPfad()
Dim bolDir As Boolean
strOneDrivePath
= Environ("OneDriveCommercial") &
Application.PathSeparator
bolDir =
CreateObject("Scripting.FileSystemObject").FolderExists(strOneDrivePath)
' Liefert Wahr oder Falsch
End Sub
Sub SuchenErsetzenDruchgestrichenAufHidden()
Dim oRng As Word.Range
Set oRng = ActiveDocument.Range
With oRng.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text =
"*"
.MatchWildcards
= True
.Font.StrikeThrough = True
.Replacement.Font.Hidden = True
'
.Replacement.Text = "" ' oder einfach löschen
.Execute Replace:=wdReplaceAll
End With
End
Sub
Sub SuchenErsetzenLeerzeichen()
' Es wird folgendes ersetzt:
' doppelte Leerschläge
' Leerschlag und ,
' Leerschlag und .
' Duchlauf wird 2x gemacht
'
Dim intZaehlerLoop As Integer
intZaehlerLoop = 1
Do While intZaehlerLoop <= 2
Set myRange2
= ActiveDocument.Content
myRange2.Find.Execute FindText:=" ", ReplaceWith:=" ", _
Replace:=wdReplaceAll
Set myRange
= ActiveDocument.Content
myRange.Find.Execute FindText:=" .",
ReplaceWith:=".", _
Replace:=wdReplaceAll
Set myRange1
= ActiveDocument.Content
myRange1.Find.Execute FindText:=" ,",
ReplaceWith:=",", _
Replace:=wdReplaceAll
intZaehlerLoop = intZaehlerLoop + 1
Loop
End Sub
' Erstellt IT/P.Steiner
' Welche Variabel von den 3 Variablen
hat den Grössten Inhalt:
'
Sub AnalyzeVariables1()
Dim var1 As Double
Dim var2 As Double
Dim var3 As Double
Dim maxVar As Double
Dim maxVarName
As String
' Hier
kannst du die Werte für die Variablen festlegen
var1 = 10
var2 = 25
var3 = 15
' Initialisiere maxVar mit dem Wert von var1 und maxVarName mit dem
Namen der Variable
maxVar = var1
maxVarName = "var1"
' Vergleiche maxVar mit den anderen Variablen und aktualisiere sie falls
nötig
If var2 > maxVar Then
maxVar = var2
maxVarName = "var2"
End If
If var3
> maxVar Then
maxVar = var3
maxVarName = "var3"
End If
' Gib das
Ergebnis in einer MsgBox aus
MsgBox "Die Variable " & maxVarName & " hat den grössten Inhalt von " & maxVar
End Sub
Sub AnalyzeVariables()
Dim var1 As Double
Dim var2 As Double
Dim var3 As Double
Dim maxValue As Double
' Set the values of the variables
var1 = 25
var2 = 42
var3 = 18
' Find the maximum value among the
variables
maxValue = var1
If var2
> maxValue Then
maxValue = var2
End If
If var3
> maxValue Then
maxValue = var3
End If
' Display the result
MsgBox "Variable 1: " & var1 & vbCrLf
& _
"Variable 2: " & var2 & vbCrLf
& _
"Variable 3: " & var3 & vbCrLf
& _
"The maximum value is: " & maxValue, vbInformation,
"Variable Analysis"
End Sub
'Abfrage welche Textmarke auf welcher
Seite im Dokument steht und ausgeben.
'Auf dem Dokument müssen die drei
Textmarken vorhanden sein.
'
Sub SeitenNummerAbfragen()
'
Dim doc As Document
'
Set doc = ActiveDocument
Dim SeiteAbschnitt As Range
Dim SeiteAbschnitt_3a As Range
Dim SeiteAbschnitt_3b As Range
' Hier die Namen der Textmarken festlegen
Set SeiteAbschnitt = ActiveDocument.Bookmarks("SysAbschnitt").Range
Set SeiteAbschnitt_3a = ActiveDocument.Bookmarks("SysAbschnitt_3a").Range
Set SeiteAbschnitt_3b
= ActiveDocument.Bookmarks("SysAbschnitt_3b").Range
' Analyse
der Seitennummer für jede Textmarke
Dim PageAbschnitt As Long
Dim PageAbschnitt_3a
As Long
Dim PageAbschnitt_3b As Long
PageAbschnitt = SeiteAbschnitt.Information(wdActiveEndAdjustedPageNumber)
PageAbschnitt_3a = SeiteAbschnitt_3a.Information(wdActiveEndAdjustedPageNumber)
PageAbschnitt_3b = SeiteAbschnitt_3b.Information(wdActiveEndAdjustedPageNumber)
' Ergebnis in einer MsgBox anzeigen
Dim result As String
result = "Die SysAbschnitt befindet sich auf Seite " & PageAbschnitt & vbCrLf & _
"Die SysAbschnitt_3a befindet sich auf Seite " & PageAbschnitt_3a & vbCrLf & _
"Die SysAbschnitt_3b befindet sich auf Seite " & PageAbschnitt_3b
MsgBox result
End Sub
' Zeichen in ASCII-Code umwandeln
Sub ZeichenInAsciCode()
Dim iAscCode As
Integer
iAscCode = Asc(Selection.Text)
MsgBox iAscCode
End
Sub
Sub TextmarkenLeeren()
If
ActiveDocument.Bookmarks.Exists("rkwtextfast") Then
Set rng
= ActiveDocument.Bookmarks("rkwtextfast").Range
rng.Text
= ""
ActiveDocument.Bookmarks.Add "rkwtextfast", rng
End If
If
ActiveDocument.Bookmarks.Exists("rkwtextfast_3a") Then
Set rng
= ActiveDocument.Bookmarks("rkwtextfast_3a").Range
rng.Text
= ""
ActiveDocument.Bookmarks.Add "rkwtextfast_3a", rng
End If
If
ActiveDocument.Bookmarks.Exists("rkwtextfast_3b") Then
Set rng
= ActiveDocument.Bookmarks("rkwtextfast_3b").Range
rng.Text
= ""
ActiveDocument.Bookmarks.Add "rkwtextfast_3b", rng
End If
End Sub
' Hier ein Beispiel welches alle Bilder
auf 14 cm anpasst
Sub Alle_Bilder_Breite_Anpassen()
' Es werden alle Bilder im Worddokument
in der Breite angepasst.
Dim inlineShape As inlineShape
Dim shape As shape
' Loop through all inline shapes (images in
text)
For Each
inlineShape In ActiveDocument.InlineShapes
' Set the width to 14 cm (397.32
points)
inlineShape.Width
= 397
Next inlineShape
' Loop through all shapes (floating images)
For Each
shape In ActiveDocument.Shapes
' Check if the shape is a picture
If shape.Type = msoPicture Then
' Set the width to 14 cm (397.32
points)
' 1 cm = ca. 28.35 points
shape.Width
= 397
End If
Next shape
End
Sub
' Oder nur ein Bild das Markiert ist
wird angepasst
Sub Markiertes_Bild_Breite_Anpassen()
' Es wird nur das markierte Bild in der
Breite angepasst.
Dim selectedShape As inlineShape
Dim selectedFloatingShape
As shape
' Prüfen,
ob ein InlineShape ausgewählt ist
If Selection.InlineShapes.Count > 0 Then
Set selectedShape
= Selection.InlineShapes(1)
' 1 cm = ca. 28.35 points
selectedShape.Width
= 396.85 ' 14 cm
in Punkten
' Prüfen,
ob ein Shape (floating image) ausgewählt ist
ElseIf Selection.ShapeRange.Count > 0 Then
Set selectedFloatingShape
= Selection.ShapeRange(1)
' 1 cm = ca. 28.35 points
selectedFloatingShape.Width = 396.85 ' 14 cm in Punkten
Else
MsgBox "Bitte wähle ein Bild aus. Ein Bild muss ausgewählt sein, damit die Breite angepasst werden kann."
End If
End Sub
' Erstellt KIT/P.Steiner 11.07.2024
'Beide Versionen ergeben das gleiche Resulatat
'Kurze
Version
Sub ShowWordBetweenBracesKurz()
Dim cursorPos
As Range
Dim searchRange
As Range
Dim startPos
As Long
Dim endPos As Long
' Set the cursor position
Set cursorPos
= Selection.Range
' Initialize the positions
startPos = -1
endPos = -1
' Search for the '}' character to the left
of the cursor
Set searchRange
= cursorPos.Duplicate
searchRange.Find.ClearFormatting
With searchRange.Find
.Text =
"}"
.Forward
= False
.Wrap =
wdFindStop
End With
If searchRange.Find.Execute Then
endPos = searchRange.Start
End If
' Search for the '{' character to the left
of the '}' position
If endPos
<> -1 Then
Set searchRange
= ActiveDocument.Range(0, endPos)
searchRange.Find.ClearFormatting
With searchRange.Find
.Text
= "{"
.Forward
= False
.Wrap
= wdFindStop
End With
If searchRange.Find.Execute Then
startPos = searchRange.Start
End If
End If
' Check if both positions are found and
valid
If startPos
<> -1 And endPos
<> -1 And startPos
< endPos Then
' Extract the word between '{' and '}'
Set searchRange = ActiveDocument.Range(startPos + 1,
endPos)
MsgBox "Das Wort zwischen den Klammern ist: " & searchRange.Text
Else
MsgBox "Keine gültige Klammerung gefunden."
End If
End Sub
'Längere
Version
Sub ShowWordBetweenBracesOK()
Dim cursorPos
As Range
Dim startPos
As Long
Dim endPos As Long
Dim searchRange
As Range
Dim foundText
As String
' Set the cursor position
Set cursorPos
= Selection.Range
' Initialize the positions
startPos = -1
endPos = -1
' Search for the '{' character to the left
of the cursor
Set searchRange
= cursorPos.Duplicate
searchRange.MoveStart
wdCharacter, -Len(cursorPos.Text)
searchRange.Find.ClearFormatting
With searchRange.Find
.Text =
"{"
.Forward
= False
.Wrap =
wdFindStop
End With
If searchRange.Find.Execute Then
startPos = searchRange.Start
End If
' Search for the '}' character to the left
of the cursor
Set searchRange
= cursorPos.Duplicate
searchRange.MoveStart
wdCharacter, -Len(cursorPos.Text)
searchRange.Find.ClearFormatting
With searchRange.Find
.Text =
"}"
.Forward
= False
.Wrap =
wdFindStop
End With
If searchRange.Find.Execute Then
endPos = searchRange.Start
End If
' Check if both positions are found
If startPos
<> -1 And endPos
<> -1 And startPos
< endPos Then
' Extract the word between '{' and '}'
Set searchRange
= ActiveDocument.Range(Start:=startPos + 1, End:=endPos)
foundText = searchRange.Text
MsgBox "Das Wort zwischen den Klammern ist: " & foundText
Else
MsgBox "Keine gültige Klammerung gefunden."
End If
End Sub
' Dieses folgende Makro sucht den Text
zwischen { und } links vom Cursor, überprüft,
' ob eine Textmarke mit diesem Namen
existiert, fügt deren Inhalt an der
' aktuellen Cursorposition ein und stellt
sicher, dass der Cursor am Ende des
' eingefügten Textes steht.
' Hier wird zusätzlich noch das Wort inkl { }
gelöscht.
'
Sub ShowWordBetweenBracesAndInsertBookmarkContent()
Dim cursorPos
As Range
Dim searchRange
As Range
Dim startPos
As Long
Dim endPos As Long
Dim bookmarkName
As String
Dim bookmarkRange
As Range
' Set the cursor position
Set cursorPos
= Selection.Range
' Initialize the positions
startPos = -1
endPos = -1
' Search for the '}' character to the left
of the cursor
Set searchRange
= cursorPos.Duplicate
searchRange.Find.ClearFormatting
With searchRange.Find
.Text =
"}"
.Forward
= False
.Wrap =
wdFindStop
End With
If searchRange.Find.Execute Then
endPos = searchRange.Start
End If
' Search for the '{' character to the left
of the '}' position
If endPos
<> -1 Then
Set searchRange
= ActiveDocument.Range(0, endPos)
searchRange.Find.ClearFormatting
With searchRange.Find
.Text
= "{"
.Forward
= False
.Wrap
= wdFindStop
End With
If searchRange.Find.Execute Then
startPos = searchRange.Start
End If
End If
' Check if both positions are found and
valid
If startPos
<> -1 And endPos
<> -1 And startPos
< endPos Then
' Extract the word between '{' and '}'
Set searchRange
= ActiveDocument.Range(startPos
+ 1, endPos)
bookmarkName = searchRange.Text
' Find the bookmark with the extracted
name
If
ActiveDocument.Bookmarks.Exists(bookmarkName) Then
Set bookmarkRange
= ActiveDocument.Bookmarks(bookmarkName).Range
' Insert the bookmark content at
the cursor position
cursorPos.Text
= bookmarkRange.Text
' Move the cursor to the end of the
inserted text
cursorPos.Collapse
Direction:=wdCollapseEnd
cursorPos.Select
' Delete the text including the
braces
ActiveDocument.Range(startPos, endPos + 1).Delete
Else
MsgBox "Keine Textmarke mit dem Namen '" & bookmarkName & "' gefunden."
End If
Else
MsgBox "Keine gültige Klammerung gefunden."
End If
'
Textmakeninhalt wieder löschen und mit TM-Namen versehen. Ev. nicht nötig.
If
ActiveDocument.Bookmarks.Exists(bookmarkName) Then
Set rng
= ActiveDocument.Bookmarks(bookmarkName).Range
rng.Text
= bookmarkName
ActiveDocument.Bookmarks.Add bookmarkName, rng
End If
End Sub
' Erstellt 19.11.2024 IT/P.Steiner
' Dieses Skript durchsucht alle
Textmarken im aktiven Dokument und löscht diejenigen, deren Namen mit
"_Hlk" beginnen.
' Löscht alle Textmaken welche mit
_Hlk182906747 beginnen, wie z.B. _Hlk182906715, _Hlk182906731, , _Hlk182906747,
_Hlk182906774
Sub DeleteHlkBookmarks()
Dim bm As Bookmark
Dim bmName As String
For Each bm
In ActiveDocument.Bookmarks
bmName = bm.Name
If Left(bmName,
4) = "_Hlk" Then
bm.Delete
End If
Next bm
End Sub
'Dieses Skript überprüft, ob ein Bild
ausgewählt ist, und ändert dann die Breite auf 14 cm, wobei das
Seitenverhältnis beibehalten wird, sodass die Höhe automatisch angepasst wird.
Sub ResizeSelectedImage()
Dim shape As shape
'
Überprüfen, ob eine Form ausgewählt ist
If Selection.InlineShapes.Count > 0 Then
' InlineShape (eingebettetes Bild) bearbeiten
With Selection.InlineShapes(1)
.LockAspectRatio
= msoTrue
.Width
= CentimetersToPoints(14)
End With
ElseIf Selection.ShapeRange.Count > 0 Then
' Shape (freies Bild) bearbeiten
Set shape
= Selection.ShapeRange(1)
With shape
.LockAspectRatio
= msoTrue
.Width
= CentimetersToPoints(14)
End With
Else
MsgBox "Bitte wähle ein Bild aus.", vbExclamation
End If
End Sub
Sub DeaktiviereTypographischeAnfuehrungszeichen()
With Application.Options
' AutoFormat während der Eingabe: "Gerade" durch "typographische" Anführungszeichen deaktivieren
.AutoFormatAsYouTypeReplaceQuotes = False
' AutoFormat: "Gerade" durch "typographische" Anführungszeichen deaktivieren
.AutoFormatReplaceQuotes = False
End With
MsgBox "Die Einstellungen wurden erfolgreich geändert!", vbInformation, "Einstellungen aktualisiert"
End Sub
' Die MsgBox schliesst sich automatisch
nach 3 Sekunden
Sub MsgBoxSchliesstAutom()
Dim objShell As
Object
Set objShell =
CreateObject("WScript.Shell")
objShell.Popup "Das Fenster schliesst sich automatisch!", 3, "Info", 64
End Sub
Sub DatumPruefen()
Dim datVergleichsdatum As Date
datVergleichsdatum = DateSerial(2025, 9, 23)
If Date <= datVergleichsdatum Then
MsgBox "nein"
ElseIf Date > datVergleichsdatum Then
MsgBox "ja"
Else
MsgBox "heute ist der 23.09.2025"
End If
End Sub
Public
strDruckerEntf As String
Public
strDruckerPfad As String
Public Sub DruckerEntfernenRutine()
Dim DruckerListe(5) As String
DruckerListe(0) = "\\SP1600005.gch.generali.ch\FollowMe_VVxV"
DruckerListe(1) = "\\SP1600005\FollowMe_VVxV"
DruckerListe(2) = "\\SP1600005.gch.generali.ch\FollowMe_VVxV_DUPLEX"
DruckerListe(3) = "\\SP1600005\FollowMe_VVxV_DUPLEX"
DruckerListe(4) = "\\SP1600009.gch.generali.ch\FollowMe_VVxV"
DruckerListe(5) = "\\SP1600009.gch.generali.ch\FollowMe_VVxV_DUPLEX"
Dim i As Integer
For i =
LBound(DruckerListe) To UBound(DruckerListe)
If IstDruckerInstalliert(DruckerListe(i)) Then
NetzwerkDruckerEntfernen DruckerListe(i)
Else
' MsgBox "Drucker nicht
gefunden: " & DruckerListe(i), vbExclamation
End If
Next i
End
Sub
Function
IstDruckerInstalliert(DruckerName
As String) As Boolean
Dim objWMIService
As Object
Dim colPrinters
As Object
Dim objPrinter
As Object
Set objWMIService
= GetObject("winmgmts:\\.\root\cimv2")
Set colPrinters
= objWMIService.ExecQuery("Select * From Win32_Printer")
For Each
objPrinter In colPrinters
If objPrinter.name = DruckerName Then
IstDruckerInstalliert = True
Exit
Function
End If
Next
IstDruckerInstalliert = False
End Function
Public Sub NetzwerkDruckerEntfernen(ByVal DruckerPfad As String)
'On
Error Resume Next
Dim WshShell
As Object
Set WshShell
= CreateObject("WScript.Shell")
' Befehl
zum Entfernen des Netzwerkdruckers
Dim cmd As String
cmd = "rundll32 printui.dll,PrintUIEntry /dn /n """ & DruckerPfad & """"
' Ausführen
WshShell.Run cmd, 0, True
'Ende:
End Sub
Public Sub Alte_DruckerInstallieren()
' Drucker mit altem Server
Set WshNetwork = CreateObject("WScript.Network")
PrinterPath = "\\SP1600005.gch.generali.ch\FollowMe_VVxV"
WshNetwork.AddWindowsPrinterConnection PrinterPath
Set WshNetwork = CreateObject("WScript.Network")
PrinterPath =
"\\SP1600005\FollowMe_VVxV"
WshNetwork.AddWindowsPrinterConnection
PrinterPath
' Drucker mit altem Server
Set WshNetwork
= CreateObject("WScript.Network")
PrinterPath = "\\SP1600005.gch.generali.ch\FollowMe_VVxV_DUPLEX"
WshNetwork.AddWindowsPrinterConnection
PrinterPath
Set WshNetwork
= CreateObject("WScript.Network")
PrinterPath =
"\\SP1600005\FollowMe_VVxV_DUPLEX"
WshNetwork.AddWindowsPrinterConnection
PrinterPath
End Sub
Sub SchliesseDokumentUndTemplate()
Dim strDateinameTemp As String
strDateinameTemp = "Steiner.dotx"
' Dokument schliessen ohne speichern
If DocumentExists(strDateinameTemp) Then
Documents(strDateinameTemp).Close SaveChanges:=wdDoNotSaveChanges
End If
'
Verbindung zur Vorlage trennen
ActiveDocument.AttachedTemplate = ""
' Vorlage schliessen, falls noch geöffnet
Dim tpl As Template
For Each
tpl In Application.Templates
If LCase(tpl.Name) =
LCase(strDateinameTemp) Then
tpl.Saved
= True
tpl.Close
Exit For
End If
Next tpl
End
Sub
Oder nur Template
Sub SchliesseTemplateOhneSpeichern()
Dim doc As Document
Dim templateName
As String
templateName = "Druckerliste.dotm"
For Each
doc In Application.Documents
If LCase(doc.Name) =
LCase(templateName) Then
doc.Close SaveChanges:=wdDoNotSaveChanges
Exit For
End If
Next doc
End
Sub
Ev.
Dim tpl As Template
For Each tpl In Application.Templates
If LCase(tpl.Name) =
LCase(templateName) Then
tpl.Saved = True ' Verhindert Speichern
tpl.Close
Exit For
End If
Next tpl
' Erstellt: KIT/Pirmin Steiner
' Aus einem Verzeichnis werden alle
TXT-Files im Winword aufgelistet.
'
'
' VBA-Code, der:
'
' Alle .txt-Dateien aus einem
Verzeichnis lädt.
' Die Kodierung als UTF-8 interpretiert
(ohne Notepad++-Automatisierung, da Notepad++
' keine direkte
Kommandozeilen-Konvertierung bietet). Darum muss der Pfad auf Notepad++
stimmen.
' Die Inhalte korrekt in ein
Word-Dokument einfügt – mit Titel und Sprachüberschrift.
Public intFormatvorlageVorhanden As Integer
Sub ImportiereTexteMitWindows1252()
Dim Pfad As String
Dim Datei As String
Dim DateiInhalt As String
Dim DateiNameOhneEndung As String
Dim FSO As Object
Dim TextStream
As Object
Dim Sprache
As String
Dim SprachMap
As Object
' Neues
Dokument erstellen
Documents.Add DocumentType:=wdNewBlankDocument
'Formatvorlage erstellen, wenn noch nicht vorhanden
CurrierNewFormatvorlageErstellen
' Verzeichnis mit den .txt-Dateien
Pfad = "C:\TEMP\RKW-Texte_nicht_konvertiert\"
'
Initialisiere FileSystemObject
Set FSO =
CreateObject("Scripting.FileSystemObject")
'
Sprachzuordnung
Set SprachMap = CreateObject("Scripting.Dictionary")
SprachMap.Add "_d", "Deutsch"
SprachMap.Add "_f", "Französisch"
SprachMap.Add "_i", "Italienisch"
SprachMap.Add "_e", "Englisch"
' Titel des Dokuments
ActiveDocument.Paragraphs.Add.Range.Text = "Alle TBS aufgelistet"
Selection.Font.Color = wdColorRed
With ActiveDocument.Paragraphs.Last.Range.Font
.Bold = True
.Size = 26
.Color =
192
End With
' ActiveDocument.Paragraphs.Add
ActiveDocument.Paragraphs.Add
' Alle
.txt-Dateien im Verzeichnis
Datei = Dir(Pfad & "*.txt")
Do While Datei <> ""
DateiNameOhneEndung = FSO.GetBaseName(Datei)
' Sprachkennung ermitteln
Sprache = ""
Dim key
For Each key In SprachMap.Keys
If Right(DateiNameOhneEndung,
Len(key)) = key Then
Sprache = SprachMap(key)
Exit
For
End If
Next
If Sprache
<> "" Then
' Datei als Windows-1252 lesen
Set TextStream
= CreateObject("ADODB.Stream")
With TextStream
.Charset
= "windows-1252"
.Open
.LoadFromFile
Pfad & Datei
DateiInhalt = .ReadText
.Close
End With
' Inhalt ins Word-Dokument einfügen
With ActiveDocument
.Paragraphs.Add
' wie kann ich hier
blau... Selection.Font.Color =
wdColorBlue
.Paragraphs.Add.Range.Text = DateiNameOhneEndung
With .Paragraphs.Last.Range.Font
.Bold
= True
.Size = 14
.Color = wdColorBlue ' ? Hier wird die Schrift blau gesetzt
End With
.Paragraphs.Add
.Paragraphs.Add
.Paragraphs.Add.Range.Text = Sprache
With .Paragraphs.Last.Range.Font
.Bold
= True
.Size
= 14
End
With
.Paragraphs.Add
'
hier die Formatvorlage standard setzen
.Paragraphs.Last.Style = ActiveDocument.Styles("CurrierNew_TXTFiles")
.Paragraphs.Add.Range.Text = DateiInhalt
.Paragraphs.Last.Range.Font.Size = 11
.Paragraphs.Add
End With
End If
Datei = Dir
Loop
MsgBoxSchliesstAutomatisch
'
MsgBox "Alle Dateien wurden erfolgreich eingefügt.",
vbInformation
End Sub
Sub CurrierNewFormatvorlageErstellen()
' Prüfen ob es die Formatvorlage schon
gibt.
CheckStyleExists
If intFormatvorlageVorhanden = 0 Then
'
ActiveDocument.Styles.Add Name:="CurrierNew_TXTFiles", Type:= _
wdStyleTypeParagraph
ActiveDocument.Styles("CurrierNew_TXTFiles").AutomaticallyUpdate = False
With
ActiveDocument.Styles("CurrierNew_TXTFiles").Font
.Name = "Courier New"
.Size = 9
.Bold = False
.Italic
= False
.Underline
= wdUnderlineNone
.UnderlineColor
= wdColorAutomatic
.StrikeThrough
= False
.DoubleStrikeThrough
= False
.Outline
= False
.Emboss
= False
.Shadow
= False
.Hidden
= False
.SmallCaps
= False
.AllCaps
= False
.Color =
wdColorAutomatic
.Engrave
= False
.Superscript
= False
.Subscript
= False
.Scaling
= 100
.Kerning
= 0
.Animation
= wdAnimationNone
.Ligatures
= wdLigaturesNone
.NumberSpacing
= wdNumberSpacingDefault
.NumberForm
= wdNumberFormDefault
.StylisticSet
= wdStylisticSetDefault
.ContextualAlternates
= 0
End With
With
ActiveDocument.Styles("CurrierNew_TXTFiles").ParagraphFormat
.LeftIndent
= CentimetersToPoints(0)
.RightIndent
= CentimetersToPoints(0)
.SpaceBefore
= 0
.SpaceBeforeAuto
= False
.SpaceAfter
= 0
.SpaceAfterAuto
= False
.LineSpacingRule
= wdLineSpaceMultiple
.LineSpacing
= LinesToPoints(1.15)
.Alignment
= wdAlignParagraphLeft
.WidowControl
= True
.KeepWithNext
= False
.KeepTogether
= False
.PageBreakBefore
= False
.NoLineNumber
= False
.Hyphenation
= True
.FirstLineIndent
= CentimetersToPoints(0)
.OutlineLevel
= wdOutlineLevelBodyText
.CharacterUnitLeftIndent
= 0
.CharacterUnitRightIndent
= 0
.CharacterUnitFirstLineIndent
= 0
.LineUnitBefore
= 0
.LineUnitAfter
= 0
.MirrorIndents
= False
.TextboxTightWrap
= wdTightNone
.CollapsedByDefault
= False
End With
ActiveDocument.Styles("CurrierNew_TXTFiles"). _
NoSpaceBetweenParagraphsOfSameStyle = False
ActiveDocument.Styles("CurrierNew_TXTFiles").ParagraphFormat.TabStops. _
ClearAll
' Tabulatoren alle 1cm definieren
Dim i As Integer
For i = 1 To 17
ActiveDocument.Styles("CurrierNew_TXTFiles").ParagraphFormat.TabStops.Add _
Position:=CentimetersToPoints(i),
Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpaces
Next i
With
ActiveDocument.Styles("CurrierNew_TXTFiles").ParagraphFormat
With .Shading
.Texture
= wdTextureNone
.ForegroundPatternColor
= wdColorAutomatic
.BackgroundPatternColor
= wdColorAutomatic
End With
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
With .Borders
.DistanceFromTop
= 1
.DistanceFromLeft
= 4
.DistanceFromBottom
= 1
.DistanceFromRight
= 4
.Shadow
= False
End With
End With
ActiveDocument.Styles("CurrierNew_TXTFiles").Frame.Delete
End
If
End
Sub
Sub CheckStyleExists()
Dim styleName
As String
Dim styleExists
As Boolean
Dim s As Style
styleName = "CurrierNew_TXTFiles"
styleExists = False
For Each s
In ActiveDocument.Styles
If s.NameLocal = styleName Then
styleExists = True
Exit For
End If
Next s
If styleExists Then
intFormatvorlageVorhanden = 1
'
MsgBox "Die Formatvorlage '" & styleName & "' ist
vorhanden.", vbInformation
Else
intFormatvorlageVorhanden = 0
'
MsgBox "Die Formatvorlage '" & styleName & "' ist
NICHT vorhanden.", vbExclamation
End If
End Sub
' Die MsgBox schliesst sich automatisch
nach 3 Sekunden
Sub MsgBoxSchliesstAutomatisch()
Dim objShell As
Object
Set objShell =
CreateObject("WScript.Shell")
objShell.Popup "Alle Dateien wurden erfolgreich eingefügt.", 2, "Text-Files im Dokument ...", 64
End Sub
' Erstellt: 28.10.2025 IT/Pirmin
Steiner
' In den Brocker-Center drucken sie die
Policenvorschläge und Policenzusätze über den PDF-Batch
' Um die Dokumente an den Brocker zu
senden, damit dieser zum Kunden für die Unterschrift gehen kann.
' Leider ist dann das Logo nicht
aufgedruckt. Um es nicht fix einzubauen, da viele Tests auch im SPS
Druckcenter,
' habe ich dieses Funktion eingebaut.
' Es prüft im Winword unter Optionen -
Erweritert - Postanschrift ob da genau der Wert "PDF-Batch
Logodrucken"
' enthalten ist, dann wird das
Generali-Logo automatisch aufgedruckt. Nur bei PDF-Batch also.
' Alternativ kann der User aber auch
mit dem Shortcut Alt + K das Logo im Editieren ins Dokument einfügen.
' Der Seitenrand oben Abstand zur
Kopfzeile (zum Logo) wird auf 1 cm geändert.
'
Public Sub GeneraliLogoInserten()
'On Error GoTo LogoInsertenFehler:
Dim strAnschrift As String
strAnschrift = Application.UserAddress
PruefungKopfzeileObLeer
' intKopfzeileNichtLeer = 0 (Kopfzeile
ist leer)
' intKopfzeileNichtLeer = 1 (Kopfzeile
ist etwas enthalten)
If intKopfzeileNichtLeer = 0 Then
If strAnschrift
= "PDF-Batch Logodrucken" Then
ActiveDocument.PageSetup.HeaderDistance
= CentimetersToPoints(1)
If ActiveWindow.View.SplitSpecial
<> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView =
wdSeekCurrentPageHeader
InsertGeneraliBuildingBlock
' Application.Templates( _
'
"\\gch.generali.ch\roleshares\Office2016\BuildingBlocks\GENERALI_Buildingblocks.dotx"
_
'
).BuildingBlockEntries("Generali").Insert
Where:=Selection.Range, _
' RichText:=True
ActiveWindow.ActivePane.View.SeekView =
wdSeekMainDocument
End If
End
If
GoTo LogoInsertenOK:
LogoInsertenFehler:
' MsgBox welche sich automatisch
schliesse, damit nicht geblockt wird.
Dim objShell As
Object
Set objShell =
CreateObject("WScript.Shell")
objShell.Popup "Das Generali Logo konnte nicht automatisch eingefügt werden!", 1, "Generali Logo einfügen ...", 64
LogoInsertenOK:
End Sub
Sub InsertGeneraliBuildingBlock()
On
Error Resume Next
Dim tmpl As Template
Dim tmplPath
As String
tmplPath = "\\gch.generali.ch\roleshares\Office2016\BuildingBlocks\GENERALI_Buildingblocks.dotx"
' Prüfen,
ob Vorlage bereits geladen ist
Dim found As Boolean
found = False
For Each
tmpl In Application.Templates
If LCase(tmpl.FullName) = LCase(tmplPath) Then
found = True
Exit For
End If
Next
' Wenn nicht geladen, dann als Add-In laden
If Not found Then
AddIns.Add
FileName:=tmplPath, Install:=True
End If
' Jetzt Zugriff auf den Baustein
Application.Templates(tmplPath).BuildingBlockEntries("Generali").Insert _
Where:=Selection.Range, RichText:=True
End
Sub
'Erklärung der Änderungen:
'headerRange.InlineShapes.Count →
prüft eingebettete Bilder (z. B. Logos im Textfluss)
'header.Shapes.Count → prüft frei
platzierte Objekte (z. B. Textfelder, Logos ausserhalb des Textflusses)
'Leerzeichen werden ignoriert
Sub PruefeKopfzeileInhalt()
Dim header As HeaderFooter
Dim headerRange
As Range
Dim doc
As Document
Set doc = ActiveDocument
Set header = doc.Sections(1).Headers(wdHeaderFooterPrimary)
If header.Exists Then
Set headerRange
= header.Range
If Len(Trim(headerRange.Text)) > 1 Then
MsgBox "In der Kopfzeile befindet sich Text oder Inhalt.", vbInformation
ElseIf headerRange.InlineShapes.Count > 0 Or header.Shapes.Count > 0 Then
MsgBox "In der Kopfzeile befindet sich eine Grafik oder ein Objekt.", vbInformation
Else
MsgBox "Die Kopfzeile ist leer.", vbInformation
End If
Else
MsgBox "Keine Kopfzeile vorhanden.", vbExclamation
End If
End Sub
'Erstellt: 17.11.2025 KIT/Pirmin
Steiner
'
'Entfernt nur bei KLEINBUCHSTABEN g, q,
p, y, j, ss die Unterstreichung
'Print Nur; Kleinbuchstaben; werden;
betrachtet
'Print Kleinbuchstaben, die; unter;
die; Grundlinie; reichen, verlieren; ihre; Unterstreichung
'Print Grossbuchstaben; bleiben; immer;
unverändert
'? Funktioniert auch in Tabellen,
Kopf-/Fusszeilen, Textfeldern usw.
'Das Makro verändert nur die
Unterstreichung der betroffenen Zeichen; sonstige Formatierungen (Farbe,
Fettdruck usw.) bleiben erhalten.
'Es durchsucht das ganze Dokument inkl.
Tabellen, Kopf-/Fusszeilen und Textfelder.
'Bei sehr grossen Dokumenten kann es
einige Sekunden dauern - das Ergebnis zeigt die Anzahl bearbeiteter Zeichen an.
'-----
Option
Explicit
Sub RemoveUnderlineFromLowercaseDescenders()
' Entfernt
nur bei KLEINBUCHSTABEN g, q, p, y, j, ss die Unterstreichung,
' falls diese Zeichen unterstrichen sind.
Dim desc As String
desc = "gqpyj" ' nur Kleinbuchstaben
Dim story As Range
Dim r As Range
Dim i As Long
Dim ch As String
Dim removed
As Long
Application.ScreenUpdating = False
' Alle
Textbereiche im Dokument durchlaufen
Set story = ActiveDocument.StoryRanges(wdMainTextStory)
Do
Set r =
story.Duplicate
Call ProcessDescendersInRange(r,
desc, removed)
' auch
Text in Shapes (z. B. Textfelder) berücksichtigen
Dim shp As Shape
If story.ShapeRange.Count > 0 Then
For Each
shp In story.ShapeRange
If shp.TextFrame.HasText Then
Call
ProcessDescendersInRange(shp.TextFrame.TextRange, desc, removed)
End If
Next shp
End If
Set story
= story.NextStoryRange
Loop While Not story
Is Nothing
'
zusätzliche Shapes, die nicht in StoryRanges hängen
Dim s As Shape
For Each s
In ActiveDocument.Shapes
If s.TextFrame.HasText Then
Call ProcessDescendersInRange(s.TextFrame.TextRange,
desc, removed)
End If
Next s
Application.ScreenUpdating = True
MsgBox "Unterstreichungen entfernt bei: " & removed & " Kleinbuchstaben", vbInformation
End
Sub
Private
Sub ProcessDescendersInRange(rng
As Range, desc As
String, ByRef removed As Long)
Dim i As Long
Dim ch As String
For i = 1 To rng.Characters.Count
With rng.Characters(i)
If .Font.Underline
<> wdUnderlineNone Then
ch = .Text
' Nur echte Kleinbuchstaben
prüfen
If Len(ch) = 1 Then
If
ch Like "[a-zss]" Then
If InStr(desc, ch) > 0 Then
.Font.Underline =
wdUnderlineNone
removed = removed +
1
End If
End
If
End If
End If
End With
Next i
End Sub
Sucht in Winword Add-Ins nach einem bestimmten Pfad
welchen es nicht mehr gibt
z.B. \\vf160001-2 in zuletzt verwendeten Dateien
' Erstellt: 14.11.2025 KIT/Pirmin
Steiner
'
'Kurz zusammengefasst:
'
'Was drin ist
'
'Haupt-Sub SucheNachPfadErweitert
'
'alle Hilfsfunktionen(ScanMru,
ScanBackstage, ScanAddIns, ScanTemplates, ScanOptions, ScanRegistry,
'ScanRecentAndProfileLinks,
ScanFolderForLnk, ScanUrlFiles, ScanNetUse, ScanPrinters, ScanOfficeFileCache,
'ScanExplorerRecentDocs)
'
'Utility-Funktionen SafeStr und
InTextFind
'- Alles, was der Haupt-Sub aufruft,
ist im selben Modul enthalten.
'
'
'In Word: Entwickler-Tab - Makros -
SucheNachPfadErweitert ausführen (oder F5 im VBA-Editor).
'
'Ergebnis wird automatisch in einem
neuen Word-Dokument ausgegeben.
'
'Wichtig
'
'Suche steht standardmässig auf
Suchtext = "\\vf160001-2". Ist falls nötig anzupassen
'
'Das Modul nutzt WScript.Shell und
Scripting.FileSystemObject über CreateObject — keine zusätzlichen Verweise
'in den VBA-Referenzen nötig.
'
'Manche Checks (WMI, RegRead, net use)
brauchen entsprechende Benutzerrechte; Fehler werden still behandelt,
'sodass das Makro nicht abbricht.
'
'Wichtig:
'
'On Error Resume Next direkt vor
kritischen Zugriffen.
'
'Danach Err.Clear und On Error GoTo 0,
um die Fehlerbehandlung sauber zurückzusetzen.
'
'Das Makro überspringt nun
Ordner/Dateien ohne Berechtigung, anstatt abzustürzen.
'
'Ergänzt:
'Word nicht abstürzt
'Alle wichtigen Pfade und Referenzen
geprüft werden
'Hyperlinks nur in geöffneten
Dokumenten ausgelesen werden
'Templates nur Pfad + Name prüfen
(keine unsichtbare Öffnung)
'MRU, Add-Ins, Registry, RecentDocs,
.lnk, Office Cache, OLE-Objekte berücksichtigt werden
'Fehlerresistent gegenüber
Zugriffsproblemen
Option Explicit
'
============================================
' Vollständige und stabile
Word-Pfad-Suche
'
============================================
Sub MyWordScan_SucheAlteWordPfadReferenzen_Stabil()
Dim Suchtext As String
Dim report As String
Dim doc As Document
Suchtext = "\\vf160001-2" ' <-- hier alten Pfad eintragen
report = "Stabile Word-Pfad-Suche nach: " & Suchtext & vbCrLf & String(80, "-") & vbCrLf
' -------------------
' Word-interne Prüfpunkte
'
-------------------
report = report &
MyWordScan_ScanMruWord(Suchtext)
report = report &
MyWordScan_ScanTemplatesWord_Stabil(Suchtext)
report = report &
MyWordScan_ScanAddInsWord(Suchtext)
' -------------------
' Registry
' -------------------
report = report &
MyWordScan_ScanRegistryWordMRUFull(Suchtext)
report = report &
MyWordScan_ScanExplorerRecentDocsWord(Suchtext)
'
-------------------
' Verknüpfungen (.lnk) im Profil
'
-------------------
report = report &
MyWordScan_ScanRecentAndProfileLinks(Suchtext)
' -------------------
' Office File Cache / Autorecover
' -------------------
report = report &
MyWordScan_ScanOfficeFileCacheAndASD(Suchtext)
'
-------------------
' Hyperlinks und OLE-Objekte in geöffneten Dokumenten
' -------------------
report = report & MyWordScan_ScanHyperlinksAndOLE_Stabil(Suchtext)
' -------------------
' Ergebnis ausgeben
'
-------------------
Set doc = Documents.Add
doc.Content.Text = report
doc.Activate
MsgBox "Stabile Suche abgeschlossen. Ergebnis in neuem Dokument.", vbInformation
End Sub
'
============================================
'
Hilfsfunktionen
'
============================================
Private
Function MyWordScan_SafeStr(v
As Variant) As String
On Error Resume
Next
If IsNull(v)
Or IsEmpty(v) Then
MyWordScan_SafeStr = ""
Else
MyWordScan_SafeStr = CStr(v)
End If
On Error GoTo 0
End
Function
Private
Function MyWordScan_InTextFind(hay
As String, needle As
String) As Boolean
If Len(Trim(hay))
= 0 Then
MyWordScan_InTextFind = False
Else
MyWordScan_InTextFind = (InStr(1, hay, needle, vbTextCompare) > 0)
End If
End
Function
'
============================================
' 1)
Word MRU
'
============================================
Function
MyWordScan_ScanMruWord(find
As String) As String
Dim i As Long, txt As String,
s As String
txt = vbCrLf & "[Word MRU - Zuletzt geöffnete Dateien]" & vbCrLf
On Error Resume Next
For i = 1 To Application.RecentFiles.Count
s = MyWordScan_SafeStr(Application.RecentFiles(i).path)
If MyWordScan_InTextFind(s,
find) Then txt = txt & "Treffer
(RecentFiles): " & s & vbCrLf
Next i
On Error GoTo 0
MyWordScan_ScanMruWord = txt
End
Function
'
============================================
' 2) Templates (nur Name + Pfad)
'
============================================
Function
MyWordScan_ScanTemplatesWord_Stabil(find
As String) As String
Dim t As Template, txt As String
txt = vbCrLf &
"[Templates]" & vbCrLf
On Error Resume
Next
For Each t
In Application.Templates
txt = txt & "Template: "
& t.FullName & vbCrLf
If MyWordScan_InTextFind(t.FullName, find) Then txt
= txt & " Treffer Template:
" & t.FullName & vbCrLf
Next t
On Error GoTo 0
MyWordScan_ScanTemplatesWord_Stabil = txt
End
Function
'
============================================
' 3)
AddIns
'
============================================
Function
MyWordScan_ScanAddInsWord(find
As String) As String
Dim ai As AddIn, txt As String,
aiFull As String
txt = vbCrLf &
"[AddIns]" & vbCrLf
On Error Resume
Next
For Each ai
In Application.AddIns
aiFull = ""
If Len(Trim(MyWordScan_SafeStr(ai.path))) > 0 Then
aiFull = MyWordScan_SafeStr(ai.path)
If Right(aiFull,
1) <> "\" Then aiFull = aiFull & "\"
End If
aiFull = aiFull &
MyWordScan_SafeStr(ai.Name)
If MyWordScan_InTextFind(aiFull,
find) Then txt = txt & "Treffer
(AddIn): " & aiFull & vbCrLf
Next ai
On Error GoTo 0
MyWordScan_ScanAddInsWord = txt
End
Function
'
============================================
' 4)
Registry Word MRU
'
============================================
Function
MyWordScan_ScanRegistryWordMRUFull(find
As String) As String
Dim Wsh As Object: Set Wsh =
CreateObject("WScript.Shell")
Dim txt As String: txt = vbCrLf &
"[Registry Word MRUs]" & vbCrLf
Dim base As String: base =
"HKEY_CURRENT_USER\Software\Microsoft\Office\"
Dim versions,
v, key As String, value As Variant
versions = Array("14.0", "15.0",
"16.0", "12.0",
"11.0")
On Error Resume
Next
For Each v
In versions
key = base & v &
"\Word\File MRU"
value = Wsh.RegRead(key)
If Err.Number = 0 Then
If MyWordScan_InTextFind(CStr(value),
find) Then txt = txt & "Treffer File
MRU: " & key & vbCrLf
End If
Err.Clear
key = base & v &
"\Word\Place MRU"
value = Wsh.RegRead(key)
If Err.Number = 0 Then
If MyWordScan_InTextFind(CStr(value),
find) Then txt = txt & "Treffer Place
MRU: " & key & vbCrLf
End If
Err.Clear
Next v
On Error GoTo 0
MyWordScan_ScanRegistryWordMRUFull = txt
End
Function
'
============================================
' 5)
Explorer RecentDocs
'
============================================
Function
MyWordScan_ScanExplorerRecentDocsWord(find
As String) As String
Dim txt As String: txt = vbCrLf &
"[Explorer RecentDocs (Word)]" & vbCrLf
Dim Wsh As Object: Set Wsh =
CreateObject("WScript.Shell")
Dim baseKey
As String: baseKey =
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\Word"
On Error Resume
Next
Dim value As Variant
value = Wsh.RegRead(baseKey)
If Err.Number = 0 Then
If MyWordScan_InTextFind(CStr(value),
find) Then txt = txt & "Treffer
RecentDocs Word: " & baseKey & vbCrLf
End If
Err.Clear
On Error GoTo 0
MyWordScan_ScanExplorerRecentDocsWord = txt
End
Function
'
============================================
' 6)
Verknüpfungen (.lnk)
'
============================================
Function
MyWordScan_ScanRecentAndProfileLinks(find
As String) As String
Dim txt As String
txt = vbCrLf &
"[Verknüpfungen (.lnk) im Profil]"
& vbCrLf
Dim paths As Collection
Set paths =
New Collection
On Error Resume
Next
paths.Add Environ("APPDATA") &
"\Microsoft\Windows\Recent"
paths.Add Environ("USERPROFILE")
& "\Desktop"
paths.Add Environ("APPDATA") &
"\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
paths.Add Environ("APPDATA") &
"\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu"
paths.Add Environ("PROGRAMDATA")
& "\Microsoft\Windows\Start Menu\Programs"
paths.Add Environ("USERPROFILE") &
"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs"
paths.Add Environ("USERPROFILE")
On Error GoTo 0
Dim p As Variant
For Each p
In paths
txt = txt & "Ordner: "
& CStr(p) & vbCrLf
txt = txt &
MyWordScan_ScanFolderForLnk(CStr(p), find)
Next p
MyWordScan_ScanRecentAndProfileLinks = txt
End
Function
Function
MyWordScan_ScanFolderForLnk(folderPath
As String, find As
String) As String
Dim fso As Object: Set fso =
CreateObject("Scripting.FileSystemObject")
Dim out As String: out = ""
Dim shell As Object:
Set shell = CreateObject("WScript.Shell")
Dim fld,
fil, sc
On Error Resume
Next
If Len(Trim(folderPath))
= 0 Or Not fso.FolderExists(folderPath) Then
MyWordScan_ScanFolderForLnk = " Ordner nicht vorhanden oder kein Zugriff: " & folderPath & vbCrLf
Exit Function
End If
Set fld =
fso.GetFolder(folderPath)
For Each
fil In fld.Files
If LCase(Right(fil.Name, 4)) = ".lnk" Then
Set sc
= shell.CreateShortcut(fil.path)
If Err.Number = 0 Then
If MyWordScan_InTextFind(MyWordScan_SafeStr(sc.TargetPath), find) Or _
MyWordScan_InTextFind(MyWordScan_SafeStr(sc.WorkingDirectory),
find) Or _
MyWordScan_InTextFind(MyWordScan_SafeStr(sc.Arguments),
find) Then
out = out & " Treffer (.lnk):
" & fil.path & " -> Ziel:
" & MyWordScan_SafeStr(sc.TargetPath)
& vbCrLf
End If
End If
Err.Clear
End If
Next fil
Dim subFld
For Each
subFld In fld.SubFolders
out = out &
MyWordScan_ScanFolderForLnk(subFld.path, find)
Next subFld
If Len(out) = 0 Then out = "
Keine .lnk-Treffer gefunden oder kein
Zugriff." & vbCrLf
MyWordScan_ScanFolderForLnk = out
End
Function
'
============================================
' 7)
Office File Cache / Autorecover
'
============================================
Function
MyWordScan_ScanOfficeFileCacheAndASD(find
As String) As String
Dim txt As String: txt = vbCrLf &
"[Office File Cache / Autorecover]" & vbCrLf
Dim fso As Object: Set fso =
CreateObject("Scripting.FileSystemObject")
Dim paths As Variant
paths = Array( _
Environ("LOCALAPPDATA")
& "\Microsoft\Office\16.0\OfficeFileCache",
_
Environ("LOCALAPPDATA")
& "\Microsoft\Office\OfficeFileCache", _
Environ("LOCALAPPDATA")
& "\Microsoft\Office\15.0\OfficeFileCache",
_
Environ("APPDATA")
& "\Microsoft\Word" _
)
Dim p As Variant
For Each p
In paths
If fso.FolderExists(p) Then
Dim fld
As Object: Set fld
= fso.GetFolder(p)
Dim fil
As Object
For Each
fil In fld.Files
If MyWordScan_InTextFind(MyWordScan_SafeStr(fil.path), find) Then txt
= txt & "Treffer (Cache/ASD): " & fil.path
& vbCrLf
Next fil
End If
Next p
If Len(txt)
= 0 Then txt =
" Keine Treffer im Office Cache /
Autorecover gefunden." & vbCrLf
MyWordScan_ScanOfficeFileCacheAndASD = txt
End
Function
'
============================================
' 8)
Hyperlinks & OLE-Objekte in geöffneten Dokumenten
'
============================================
Function
MyWordScan_ScanHyperlinksAndOLE_Stabil(find
As String) As String
Dim txt As String: txt = vbCrLf & "[Hyperlinks & OLE in geöffneten Dokumenten]" & vbCrLf
Dim doc As Document,
hl As Hyperlink, shp As
Shape, oleObj As Object
On Error Resume
Next
For Each
doc In Application.Documents
txt = txt & "Dokument: " & doc.Name & vbCrLf
'
Hyperlinks
For Each
hl In doc.Hyperlinks
If MyWordScan_InTextFind(MyWordScan_SafeStr(hl.Address), find) Then
txt = txt & " Hyperlink: " & hl.Address & vbCrLf
End If
Next hl
' OLE-Objekte
For Each
shp In doc.Shapes
If shp.Type = msoLinkedOLEObject Or
shp.Type = msoOLEControlObject Or shp.Type =
msoEmbeddedOLEObject Then
Set oleObj
= Nothing
On
Error Resume Next
Set oleObj
= shp.OLEFormat.Object
On
Error GoTo 0
If Not
oleObj Is Nothing Then
If
MyWordScan_InTextFind(MyWordScan_SafeStr(oleObj.Name), find) Then
txt = txt &
" OLE-Objekt: " & oleObj.Name & vbCrLf
End
If
End If
End If
Next shp
Next doc
On Error GoTo 0
MyWordScan_ScanHyperlinksAndOLE_Stabil =
txt
End
Function
'Erstellt: KIT Pirmin Steiner
13.11.2025
'VBA-Makro, das die wichtigsten Stellen
in Word prüft und einen Bericht erzeugt,
'ob irgendwo noch
\\vf1600001-2.gch.generali.ch-Verweise vorhanden sind. Das Makro prüft:
'
'Normal.dotm und alle geladenen
Templates/Add-Ins (Application.Templates, Application.AddIns)
'
'Startup-Pfad und verschiedene
DefaultFilePaths aus Application.Options
'
'COM-AddIns und (sofern erlaubt)
VBA-Verweise in geöffneten Templates/Add-Ins (VBProject-References)
'
'einige typische Benutzerordner
(Templates, AddIns, AppData) auf Dateinamen/inhalt, die
\\vf1600001-2.gch.generali.ch enthalten könnten
'
'Wichtig:
'
'Für die Kontrolle der VBA-Verweise
muss in Word unter Datei > Optionen > Trust Center > Einstellungen für
das Trust Center
'> Makroeinstellungen die Option
„Zugriff auf das VBA-Projektobjektmodell vertrauen“ aktiviert sein. Falls nicht
gesetzt,
'meldet das Makro das und überspringt
die VBProject-Prüfung.
'
'Das Makro gibt einen ausführlichen
Bericht in einem neuen Word-Dokument aus.
Option
Explicit
'
Hauptprozedur
Public
Sub Main()
Dim report As String
report = "Prüfbericht auf Verweise '\\vf1600001-2.gch.generali.ch' - erstellt am " & Now & vbCrLf & String(70, "-") & vbCrLf & vbCrLf
' 1)
NormalTemplate
On Error Resume
Next
Dim normalTpl
As Template
Set normalTpl
= NormalTemplate
On Error GoTo 0
If Not normalTpl
Is Nothing Then
report = report &
ScanTemplate("Normal.dotm", normalTpl.FullName)
Else
report = report &
"NormalTemplate: nicht gefunden/kein Zugriff."
& vbCrLf & vbCrLf
End If
' 2) Alle geladenen Templates
Dim t As Template
For Each t
In Application.Templates
report = report &
ScanTemplate("Geladene Template", t.FullName)
Next t
' 3) Application.AddIns (Word AddIns
.Dot/.Dotm)
Dim ai As AddIn
For Each ai
In Application.AddIns
' Word
AddIn hat nicht immer .FullName -> zusammensetzen aus Path + Name
Dim aiFull As String
aiFull = ""
On Error
Resume Next
aiFull = ai.Path
& IIf(Right(ai.Path, 1) = "\" Or ai.Path = "", "", "\")
& ai.Name
On Error GoTo 0
report = report &
ScanTemplate("Application.AddIn", aiFull)
Next ai
' 4) Startup Pfad(s) und DefaultFilePaths
report = report & vbCrLf & "--- Standardpfade (Application.StartupPath
& DefaultFilePath) ---" & vbCrLf
On Error Resume
Next
report = report & "Application.StartupPath:
" & Application.StartupPath & vbCrLf
report = report &
"UserTemplatesPath: " & Application.Options.DefaultFilePath(wdUserTemplatesPath)
& vbCrLf
report = report &
"WorkgroupTemplatesPath: " & Application.Options.DefaultFilePath(wdWorkgroupTemplatesPath)
& vbCrLf
report = report & "StartupPath:
" & Application.Options.DefaultFilePath(wdStartupPath)
& vbCrLf
report = report &
"AutoRecoverPath: " & Application.Options.DefaultFilePath(wdAutoRecoverPath)
& vbCrLf
report = report &
"Benutzerdefinierte Standardpfade prüfen auf '\\vf1600001-2.gch.generali.ch'..." & vbCrLf
report = report & CheckStringForH(Application.StartupPath)
report = report & CheckStringForH(Application.Options.DefaultFilePath(wdUserTemplatesPath))
report = report & CheckStringForH(Application.Options.DefaultFilePath(wdWorkgroupTemplatesPath))
report = report & CheckStringForH(Application.Options.DefaultFilePath(wdStartupPath))
report = report & CheckStringForH(Application.Options.DefaultFilePath(wdAutoRecoverPath))
On Error GoTo 0
' 5) COM AddIns
report = report & vbCrLf & "--- COM AddIns ---" & vbCrLf
Dim cai As COMAddIn
If Application.COMAddIns.Count = 0 Then
report = report & "(keine COM AddIns geladen)" & vbCrLf
Else
For Each
cai In Application.COMAddIns
report = report & "ProgID:
" & SafeStr(cai.ProgID) & " |
Beschreibung: " & SafeStr(cai.Description)
& " | Connect: " & SafeStr(cai.Connect)
& vbCrLf
report = report &
CheckStringForH(SafeStr(cai.ProgID))
report = report &
CheckStringForH(SafeStr(cai.Description))
Next cai
End If
' 6) VBA-Projektverweise (benötigt
TrustOption)
report = report & vbCrLf & "--- VBA-Projektverweise in geladenen Templates (sofern erlaubt) ---" & vbCrLf
Dim allowVBAProject As Boolean
allowVBAProject =
IsVBProjectAccessAllowed()
If Not allowVBAProject Then
report = report
& "Zugriff auf das VBA-Projektobjektmodell ist deaktiviert. Aktivieren unter: Datei > Optionen > Trust
Center > Einstellungen für das Trust Center > Makroeinstellungen >
'Zugriff auf das VBA-Projektobjektmodell vertrauen'."
& vbCrLf
Else
On Error
Resume Next
Dim vbProj
As Object ' VBProject
For Each
t In Application.Templates
If t
Is Nothing Then GoTo NextTemplate
report = report &
"Template: " & t.FullName & vbCrLf
Set vbProj
= Nothing
Set vbProj
= t.VBProject
If Err.Number <> 0 Then
report =
report & " - Kein Zugriff auf
VBProject oder kein VBProject vorhanden." & vbCrLf
Err.Clear
Else
Dim ref
As Object
For Each
ref In vbProj.References
report = report &
" Reference: " &
SafeStr(ref.Name)
& " - " & SafeStr(ref.fullPath)
& vbCrLf
report = report &
CheckStringForH(SafeStr(ref.fullPath))
Next ref
End If
NextTemplate:
On Error
GoTo 0
Next t
End If
' 7) Suche
in typischen Ordnern nach Dateinamen mit \\vf1600001-2.gch.generali.ch (nur
Dateinamen, keine komplette Inhalts-Analyse binärer .dotm)
report = report & vbCrLf & "--- Schnellsuche in typischen Benutzerpfaden (Dateinamen / Verknüpfungen) ---" & vbCrLf
Dim userFolders As Variant
userFolders = Array(Environ("APPDATA") &
"\Microsoft\Templates", Environ("USERPROFILE")
& "\AppData\Roaming\Microsoft\AddIns", Environ("LOCALAPPDATA")
& "\Microsoft\Office", Environ("USERPROFILE"))
Dim i As Long
For i =
LBound(userFolders) To UBound(userFolders)
report = report & "Ordner:
" & CStr(userFolders(i)) & vbCrLf
'
Problem: userFolders(i) ist Variant -> ScanFolderForH erwartet String. CStr
konvertiert.
report = report & ScanFolderForH(CStr(userFolders(i)))
Next i
' 8) Ergebnis: falls nichts gefunden
If InStr(report, "-> Gefunden: \\vf1600001-2.gch.generali.ch") = 0 Then
report = report & vbCrLf & "Keine direkten '\\vf1600001-2.gch.generali.ch' Verweise in den geprüften Stellen gefunden. Das schliesst nicht aus, dass Windows/Netzwerk noch alte SMB/Drive-Mappings oder Registry-Einträge besitzt." & vbCrLf
Else
report = report & vbCrLf & "Hinweis: Gefundene Einträge oben zeigen Stellen, die auf '\\vf1600001-2.gch.generali.ch' verweisen. Entfernen/aktualisieren Sie diese Einträge bzw. passen Sie die Pfade an den Cloud-Speicher an." & vbCrLf
End If
' Ausgabe in neues Dokument
Dim doc As Document
Set doc = Documents.Add
Selection.Font.Name = "Courier New"
Selection.Font.Size = 10
doc.Content.Text
= report
doc.Activate
MsgBox "Prüfung abgeschlossen. Bericht wurde in einem neuen Dokument erstellt.", vbInformation
End Sub
' Hilfsfunktion: sicher String
(vermeidet Null)
Private
Function SafeStr(v As Variant) As String
On Error Resume
Next
If IsNull(v)
Then SafeStr = ""
If IsEmpty(v)
Then SafeStr = ""
SafeStr = CStr(v)
On Error GoTo 0
End Function
' Prüft, ob in einem String
"\\vf1600001-2.gch.generali.ch" vorkommt; gibt formatierten Text
zurück
Private
Function CheckStringForH(s
As String) As String
If Len(Trim(s))
= 0 Then
CheckStringForH = ""
Exit Function
End If
If InStr(1, s, "\\vf1600001-2.gch.generali.ch",
vbTextCompare) > 0 Then
CheckStringForH = " -> Gefunden: \\vf1600001-2.gch.generali.ch in '" & s & "'" & vbCrLf
Else
CheckStringForH = " (kein \\vf1600001-2.gch.generali.ch in '"
& s & "')" & vbCrLf
End If
End Function
' Scannt eine Template-Datei (nur Pfad
und Name) auf H: und gibt Berichtsteil zurück
Private
Function ScanTemplate(kind
As String, fullPath As
String) As String
Dim out As String
out = kind & ": " &
fullPath & vbCrLf
If InStr(1, fullPath, "\\vf1600001-2.gch.generali.ch", vbTextCompare) > 0 Then
out = out & " -> Gefunden: \\vf1600001-2.gch.generali.ch im Pfad" & vbCrLf
& vbCrLf
Else
out = out & " (kein \\vf1600001-2.gch.generali.ch im
Pfad)" & vbCrLf & vbCrLf
End If
ScanTemplate = out
End
Function
' Einfacher Ordnerscan: listet Dateien
und schaut, ob Dateiname oder Pfad '\\vf1600001-2.gch.generali.ch' enthält
' Erwartet jetzt einen String (ByVal),
damit Variant-Array keine ByRef-Probleme mehr macht
Private
Function ScanFolderForH(ByVal
folderPath As String) As
String
Dim fso As Object
Set fso =
CreateObject("Scripting.FileSystemObject")
Dim out As String
On Error Resume
Next
If Len(Trim(folderPath)) = 0 Then
ScanFolderForH =
" Leerer Pfad übergeben." & vbCrLf
Exit Function
End If
If Not fso.FolderExists(folderPath) Then
ScanFolderForH = " Ordner nicht vorhanden." & vbCrLf
Exit Function
End If
On Error GoTo 0
Dim fld As Object, f As Object
Set fld =
fso.GetFolder(folderPath)
For Each f
In fld.Files
If InStr(1, f.Path,
"\\vf1600001-2.gch.generali.ch", vbTextCompare) > 0 Then
out = out & " -> Gefunden: \\vf1600001-2.gch.generali.ch in Dateipfad " & f.Path & vbCrLf
ElseIf InStr(1, f.Name, "\\vf_", vbTextCompare) > 0 Or InStr(1, f.Name, "\\vf-", vbTextCompare) > 0 Then
out = out & " (Dateiname enthält 'H_' oder 'H-') "
& f.Path & vbCrLf
End If
Next f
If Len(out) = 0 Then out = " Keine Dateien mit '\\vf1600001-2.gch.generali.ch' im Pfad im Ordner gefunden." & vbCrLf
ScanFolderForH = out
End Function
' Prüft, ob Zugriff auf VBProject
erlaubt ist
Private
Function IsVBProjectAccessAllowed()
As Boolean
On Error Resume
Next
Dim t As Template
Dim ok As Boolean
ok = True
For Each t
In Application.Templates
Dim tryProj
As Object
Set tryProj
= Nothing
Set tryProj
= t.VBProject ' Set verwenden
If Err.Number <> 0 Then
ok = False
Err.Clear
Exit For
End If
Next t
IsVBProjectAccessAllowed = ok
On Error GoTo 0
End Function
'Erstellt: 18.11.2025 KIT/Pirmin
Steiner
'Was macht dieser Code:
'Öffnet einen Dateiauswahl-Dialog für
die Quellvorlage.
'Kopiert alle Autotexte in die
Normal.dotm.
'Fragt, ob Duplikate überschrieben
werden sollen.
'Zeigt eine Liste der kopierten
Autotexte in einem neuen Dokument.
'Entfernt die Quellvorlage aus dem
Add-In-Manager.
'Optional: Schliesst Word komplett
(inkl. VBA-Editor).
'Hinweis: Building Blocks können in VBA
nicht direkt in eine andere Vorlage geschrieben werden – das ist eine
Einschränkung von Word.
'Quelle und Ziel werden geöffnet.
'Autotexte werden kopiert.
'Fortschrittsanzeige bleibt.
'Zielvorlage wird gespeichert und
geschlossen.
'Es kann gewählt werden, wenn das Ziel
nicht das Normal.dotm ist.
'Somit könnten die Autotexte auch von
einer beliebigen in eine beliebige Vorlage kopiert werden.
'
'
Sub CopyAutoTextEntriesWithProgressAndTargetChoice()
Dim sourcePath
As String, targetPath As
String
Dim sourceDoc
As Document, targetDoc As
Document
Dim targetTemplate
As Template
Dim atEntry
As AutoTextEntry
Dim tempDoc
As Document
Dim ai As AddIn
Dim userName
As String
Dim overwriteChoice
As VbMsgBoxResult
Dim copiedItems
As String
Dim closeWord
As VbMsgBoxResult
Dim totalEntries
As Long, currentEntry As
Long
Dim progressMsg
As String
Dim useNormal
As VbMsgBoxResult
userName = Environ("USERNAME")
' --- Quelle auswählen ---
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Bitte Quellvorlage auswählen"
.Filters.Clear
.Filters.Add "Word-Vorlagen", "*.dotm; *.dotx"
.InitialFileName = "C:\Users\" &
userName & "\OneDrive - Assicurazioni Generali S.p.A\Templates16\"
If .Show <> -1 Then
MsgBox "Keine Datei ausgewählt. Vorgang abgebrochen."
Exit Sub
End If
sourcePath = .SelectedItems(1)
End With
' --- Frage: Normal.dotm automatisch verwenden? ---
useNormal = MsgBox("Soll die Zieldatei automatisch Normal.dotm sein?", vbYesNo + vbQuestion, "Normal.dotm verwenden?")
If useNormal = vbYes Then
targetPath = Application.NormalTemplate.FullName
Else
' --- Ziel auswählen ---
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Bitte Zieldatei auswählen"
.Filters.Clear
.Filters.Add "Word-Vorlagen", "*.dotm; *.dotx"
.InitialFileName = Application.NormalTemplate.FullName
If .Show <> -1 Then
MsgBox "Keine Datei ausgewählt. Vorgang abgebrochen."
Exit Sub
End If
targetPath = .SelectedItems(1)
End With
End If
' Frage: Duplikate überschreiben?
overwriteChoice = MsgBox("Sollen vorhandene Autotexte überschrieben werden?", vbYesNoCancel + vbQuestion, "Duplikate überschreiben?")
If overwriteChoice = vbCancel Then Exit Sub
' Quelle öffnen
Set sourceDoc
= Documents.Open(FileName:=sourcePath,
ReadOnly:=True)
' Ziel
öffnen und Template referenzieren
Set targetDoc = Documents.Open(FileName:=targetPath)
Set targetTemplate
= targetDoc.AttachedTemplate
' Temporäres Dokument
Set tempDoc
= Documents.Add
copiedItems = "Kopierte
Autotexte:" & vbCrLf
' Gesamtanzahl für Fortschritt
totalEntries = sourceDoc.AttachedTemplate.AutoTextEntries.Count
currentEntry = 0
' --- Autotexte kopieren ---
For Each
atEntry In sourceDoc.AttachedTemplate.AutoTextEntries
currentEntry = currentEntry + 1
' Fortschrittsanzeige
progressMsg = "Kopiere Autotext
" & currentEntry & " von " & totalEntries & vbCrLf & _
"Name: " & atEntry.Name
Application.StatusBar = progressMsg
tempDoc.Content.Delete
atEntry.Insert
tempDoc.Content, True
On Error
Resume Next
If overwriteChoice
= vbYes Then
targetTemplate.AutoTextEntries(atEntry.Name).Delete
End If
targetTemplate.AutoTextEntries.Add Name:=atEntry.Name, Range:=tempDoc.Content
On Error GoTo 0
copiedItems = copiedItems & atEntry.Name & vbCrLf
Next
' Fortschrittsanzeige zurücksetzen
Application.StatusBar = False
tempDoc.Close
False
sourceDoc.Close False
targetDoc.Save
targetDoc.Close False
'
Statusanzeige in neuem Dokument
Dim statusDoc As Document
Set statusDoc
= Documents.Add
statusDoc.Content.Text = copiedItems
statusDoc.Activate
' Frage: Soll Word geschlossen werden?
closeWord = MsgBox("Autotexte übertragen. Soll Word jetzt geschlossen werden (VBE wird auch geschlossen)?", vbYesNo + vbQuestion, "Word beenden?")
If closeWord = vbYes Then
Application.Quit
End If
End
Sub
Option
Explicit
'
Schnelles, einzel-durchlaufendes Highlighter-Makro
'
Kommentare (Absatzbeginn mit ') -> grün
'
Keywords -> blau
'
Zahlen -> rot
'
Entwickelt für große Dokumente (ein Durchlauf über Words statt viele
Find-Loops)
Sub FastColorVba_CommentsGreen_KeywordsBlue_NumbersRed()
Dim doc As Document
Set doc = ActiveDocument
Dim t0 As Single: t0 = Timer
On Error GoTo Handler
Application.ScreenUpdating = False
Application.StatusBar = "Syntax-Highlighting:
Vorbereitung..."
' --- 1) Kommentar-Absätze zuerst grün
markieren (schnell per Absatz) ---
Dim para As Paragraph
Dim paraText
As String
Dim cntComments
As Long: cntComments = 0
For Each
para In doc.Paragraphs
paraText = para.Range.Text
If Len(Trim$(paraText))
> 0 Then
If LTrim$(paraText)
Like "'*" Then
para.Range.Font.Color =
wdColorGreen
cntComments = cntComments + 1
End If
End If
Next para
' --- 2) Keyword-Dictionary bauen
(kleingeschrieben für schnellen Vergleich) ---
Dim keywords
As Variant
keywords = Array( _
"if",
"then", "else", "elseif",
"end", "for",
"next", "sub", "function",
"dim", "set",
"redim", _
"select",
"case", "exit", "do", "loop", "while",
"wend", "MsgBox", "with",
"call", "new", "true",
"false", "nothing", _
"and",
"or", "not",
"is", "option",
"explicit", "public", "private",
"const", "on", "error",
"resume", "goto", _
"selection",
"activedocument", "bookmarks", "application",
"name", "count", "time",
"vbtab", "vbcrlf", _
"environ",
"vbxclamation", "vbokonly", "vbyesnocancel",
"vbinformation", "documents", "close",
"start", "kill", _
"setattr",
"dialogs", "vbnormal", "shell",
"vbnormalfocus", "as", "string",
"integer", "variant", "long",
"err.number", "replace" _
)
Dim dict As Object
Set dict =
CreateObject("Scripting.Dictionary")
dict.CompareMode
= vbTextCompare ' case-insensitive keys
Dim i As Long
For i =
LBound(keywords) To UBound(keywords)
If Not dict.Exists(Trim$(keywords(i))) Then
dict.Add Trim$(keywords(i)), 1
Next i
' --- 3) Einmaliger Durchlauf über alle
Wörter ---
Dim wrd As Range
Dim totalWords
As Long
totalWords = doc.Words.Count
Dim cntKeywords
As Long: cntKeywords = 0
Dim cntNumbers
As Long: cntNumbers = 0
Dim processed
As Long: processed = 0
Dim statusUpdateEvery
As Long: statusUpdateEvery = 2000 ' anpassen bei Bedarf
Application.StatusBar = "Syntax-Highlighting: Verarbeite
Wörter..."
For Each
wrd In doc.Words
processed = processed + 1
' Fortschrittsanzeige in der
Statusleiste (nicht zu oft updaten)
If processed
Mod statusUpdateEvery = 0 Then
Application.StatusBar = "Syntax-Highlighting: Wort "
& processed & " / " & totalWords
DoEvents
End If
' Wenn Wort bereits komplett grün
(Kommentar-Absatz), überspringen
If wrd.Font.Color =
wdColorGreen Then
' skip
Else
Dim txt
As String
txt = wrd.Text
' Normalisiere: entferne
führende/folgende Whitespaces & gängige Satzzeichen
txt = Trim$(txt)
If Len(txt)
= 0 Then GoTo NextWord
' Entferne führende und folgende
Zeichen, die keine Buchstaben/Ziffern sind
' z.B. "(" ,
")", ",", ";", ":" , vbCr, vbLf,
`"`, etc.
' Entferne so lange bis
erstes/letztes Zeichen alphanumerisch oder Punkt/Unterstrich
Do While Len(txt)
> 0 And Not (IsAlphaNum(Mid$(txt,
1, 1)) Or Mid$(txt, 1, 1) = "_" Or Mid$(txt,
1, 1) = ".")
txt = Mid$(txt, 2)
Loop
Do While Len(txt)
> 0 And Not (IsAlphaNum(Right$(txt,
1)) Or Right$(txt,
1) = "_" Or Right$(txt,
1) = ".")
txt = Left$(txt, Len(txt) - 1)
Loop
If Len(txt)
= 0 Then GoTo NextWord
Dim lowerTxt
As String
lowerTxt = LCase$(txt)
' 1) Ganz genau matchen auf Keyword
(dictionary)
If dict.Exists(lowerTxt) Then
' Überschreibe keine bereits
grün markierten Bereiche (haben wir oben gemacht)
If wrd.Font.Color <>
wdColorGreen Then
wrd.Font.Color = wdColorBlue
cntKeywords = cntKeywords +
1
End If
GoTo NextWord
End If
' 2) Zahlen erkennen (z.B.
"123", "-123", "12.34")
If IsNumberToken(txt)
Then
If wrd.Font.Color <>
wdColorGreen And wrd.Font.Color <> wdColorBlue Then
wrd.Font.Color = wdColorRed
cntNumbers = cntNumbers + 1
End If
GoTo NextWord
End If
' 3) Optional: Erkennung wie
"Err.Number" als Keyword-Teil (falls dict nicht enthält)
' Wir haben "err.number"
in dict aufgenommen, so sollte es funktionieren.
End If
NextWord:
Next wrd
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox "Fertig."
& vbCrLf & _
"Kommentare (Absätze): "
& cntComments & vbCrLf & _
"Keywords gefärbt: " & cntKeywords & vbCrLf & _
"Zahlen gefärbt: " & cntNumbers & vbCrLf & _
"Dauer (s): " & Format$(Timer - t0,
"0.0"), vbInformation,
"Schnelles Syntax-Highlighting"
Exit Sub
Handler:
Application.ScreenUpdating = True
Application.StatusBar = False
MsgBox "Fehler: " & Err.Number & " - " & Err.Description, vbExclamation, "Fehler"
End
Sub
'
--------------------------
'
Hilfsfunktionen
'
--------------------------
Private
Function IsAlphaNum(ch As String) As Boolean
If Len(ch)
= 0 Then
IsAlphaNum = False
Exit Function
End If
Dim a As String
a = AscW(ch)
' 0-9, A-Z, a-z (inkl. erweiterte
ASCII-Bereiche)
If (a >=
48 And a <= 57) Or (a >= 65 And a <= 90) Or (a >= 97 And a <= 122) Then
IsAlphaNum = True
Else
IsAlphaNum = False
End If
End
Function
Private
Function IsNumberToken(s
As String) As Boolean
' Erkenne ganze Zahlen, negative Zahlen,
Dezimalzahlen (mit Punkt) und Zahlen mit führendem +-.
' Entferne Tausendertrennzeichen falls
vorhanden (z.B. 1'234 oder 1,234) – optional.
Dim t As String
t = s
' Tausender-Apostroph/Komma entfernen
(häufig in Code eher nicht nötig)
t = Replace(t,
"'", "")
t = Replace(t,
",", "")
' Optional: erlaubte Vorzeichen
If Left$(t,
1) = "+" Or Left$(t,
1) = "-" Then
t = Mid$(t, 2)
' Jetzt prüfen: darf Zahlen und maximal
einen Dezimalpunkt enthalten
Dim dotCount
As Long: dotCount = 0
Dim i As Long
If Len(t) =
0 Then
IsNumberToken = False
Exit Function
End If
For i = 1 To Len(t)
Dim c As String
c = Mid$(t, i, 1)
If c = "." Then
dotCount = dotCount + 1
If dotCount
> 1 Then
IsNumberToken = False
Exit
Function
End If
ElseIf Not (AscW(c)
>= 48 And AscW(c)
<= 57) Then
IsNumberToken = False
Exit
Function
End If
Next i
' Wenn wir hier sind: gültig
IsNumberToken = True
End
Function
Montag, 24. November 2025
Pirmin Steiner (Schweiz, Luzern, Ebikon)
stoner (at) gmx.ch