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 1

Variablen definieren: 6

Auto Makros. 6

Diverse Einzeiler: 7

Dokument schliessen ohne Speichern: 9

Dokument drucken und schliessen ohne Speichern: 9

Autotextdialog anzeigen. 9

Makrodialogbox anzeigen: 10

Textmarkendialogbox anzeigen: 10

Markierter Text aus Dokument in MsgBox ausgeben (markierung): 10

Markierung von Textmarke zu Textmarke: 10

InputBox. 10

Speichern unter anzeigen: 11

Organisierendialogbox anzeigen: 11

Text suchen und wenn gefunden MsgBox anzeigen: 11

Textteil aus Variable lesen und verändern. 11

Ist die Textmarke vorhanden, dann auf diese springen: 12

Textmarken aus einem Dokument lesen und in die Variable strMarksVork speichern: 12

Textmarken u. DokName einfügen wenn es diese im aktuellen Dokument nicht gibt: 12

Beispiel Dokument suchen: 12

Alle Textmarken in eine Variable speichern: 13

Tabelleninhalte lesen und in Variable speichern: 13

Vergleichen von zwei Variablen: 13

Zählerschlaufe. 13

Bedingungsschleife. 14

Bedingungsschleife 2  Bedingung am Schluss der Schlaufe. 14

MousOver 14

Feststellen auf welcher Seite der Cursor sich befindet. 14

Dokumenteigenschaften setzen. 15

Dokumenteigenschaften alle. 17

Dokumenteigenschaften mit Loop ausgeben (ActiveDocument.BuiltInDocumentProperties) 19

Dokumenteigenschaften auslesen ohne das Dokument zu öffnen. 19

Benutzerdefinierte Einstellungen erhalten. 19

Mehrmaliges Wiederholen. 20

Steuerzeichen ersetzen. 20

Datei mit fortlaufender Nummer speichern. 20

Datei mit fortlaufender Nummer speichern 2. 21

Dateieigenschaften auslesen. 21

In INI-File schreiben und wieder daraus lesen. 22

Ist eine Datei vorhanden: 22

OptionenAnsicht in ein INI-File schreiben und wieder daraus lesen: 23

Public Sub OptionenAnsichtLesen() 23

Public Sub OptionenAnsichtSchreiben() 26

Public Sub OptionenAnsichtEinstellung() 28

Im Add-Ins überprüfen ob das generali.dot installiert ist. 30

Makro aus Makro ausführen. 30

Text gespiegelt wiedergeben. 30

Suchen ob es das Wort im Dokument gibt 30

Abfragen ob eine Frage mit Ja oder nein beantwortet wurde. 31

Subrutine aus einer Prozedur aufrufen. 31

Word Assistent aufrufen mit Text 31

Default Printer einstellen und abrufen: 31

Textmarkeninhalt auswerten. 31

AddIns anhängen und abhängen. 32

Add Ins Anzeigen. 32

Anhängen und oder Abhängen der AddIn. 32

Ein Programm starten. 33

Fensteransichten bei Word. 33

Auf welcher Seite steht der Coursor 33

Seitennummer in Variable. 33

Beginn Seite X.. 33

Makro nach einer Gewissen Zeit laufen lassen. 33

Ist ein Dokument im Word offen?. 34

Fenster nach Namen Aktivieren. 34

Ist die Seitenvorschau aktiv?. 34

DokumentNamen / oder Variable auf count Anzahl erweitern. 34

Dateien in einem Ordner alle Löschen. 35

Installierte Schriftarten. 35

Windows Tips holen in eine Variable. 35

Ist eine Textmarke vorhanden. 35

Office Assistent Sichtbar und Animieren. 35

Word Ausblenden oder Einblenden. 36

Datum Rechnen. 36

Zu einem Datum 3 Jahr dazu rechnen     Neu. 36

Ende Vormonat von einem Datum    Neu. 36

Von einem Datum 3 Jahre dazu und Ende des Vormonates     Neu. 36

Datumsformat definieren. 37

Zufalls Zahl generieren. 37

Dateien suchen und auflisten. 37

Ein Teil von einer Variable abfragen (Left, Mid, Right) 38

Len(Feldname) 38

Ein Dialogbox nur 9 Sekunden anzeigen. 38

MsgBox für 3 Sekunden einblenden. 38

UserForm nur eine gewisse Zeit am Bildschirm anzeigen. 38

Beginn- und Endpunkt definieren u. ohne Markieren formatieren. 39

Inhalt einer Textmarke ausgeben. 39

Textmarken Inhalt in eine Variable füllen, mit Zähler 39

Textmarken im Dokument zählen. 39

Autotext Name und Inhalt ausgeben einer Druckvorlage. 39

AutoText einfügen 1: 40

AutoText einfügen 2: 40

Suchen Ersetzten im ganzen Dokument 1. 40

Suchen Ersetzten im ganzen Dokument 2. 40

Suchen Ersetzten im ganzen Dokument 3. 40

Variable für andere Prozeduren und Module mit dem Inhalt verfügbar machen. 41

Formatvorlage abfragen welche. 41

Formatvorlagen kopieren. 41

Mit Loop alle Autotexte ausgeben. 42

Abhängen der Sprachabhängigen Autotextvorlage nach dem Editieren. 42

Alle Verwendeten Formatvorlagen. 43

Alle Formatvorlagen in einem Dokument 43

Tabulatoren löschen und neue setzten. 43

Abfragen Seitenrand und neu setzen. 44

If X = Wert1 oder Wert2. 44

Suchen Ersetzen mit Hochkomma " 44

Textmarke: Empty-Eigenschaft 45

Sub DatumZeitSeparat() 45

Normal.dot saven. 45

Fenster "Alle Fenster in der Taskbar anzeigen" umschalten. 46

Word Warnungen ausgeschalte und wieder einschalten. 46

Briefdatum auf den Briefen mit x Tagen erhöhen. 46

Die 2 letzten Editierten Dokumentnamen in einer ini-Datei ablegen. 47

~Dateien der Add-Ins von Word löschen. 48

Alle Hyperlinks in einem Dokument entfernen. 49

Hyperlink in Variable laden und bearbeiten. 50

CreateTextFile-Methode. 50

Macro-Eigenschaft 50

Alle Projektnamen ermitteln. 50

Projektnamen ermitteln und setzen. 51

Makro ändert Makro. 51

Variable abfragen ob diese einen bestimmten Wert enthält 51

Textteil in Variable finden. 52

Neue Formatvorlage basieren auf der vorherigen erstellen. 52

AutoText direkt einfügen. 53

Ist ein Autotext im Dokument vorhanden?. 53

MsgBox definiert ausgeben. 53

AutoText in aktive Dokumentvolage aufnehmen. 54

AutoText aus eignem Template ausgeben. 54

Aus einem Sting die einzelnen Werte auslesen. 54

Prüfen ob ein Ordner existiert 54

Prüfen ob ein Ordner vorhanden ist und ob er leer ist oder nicht 54

Ordner erstellen, wenn dieser nicht schon vorhanden ist 55

Liefert den Pfadseparator vom Pfad (z.B. / oder \) 55

Vertikales und Horizontales Lineal im Winword wieder anzeigen lassen. 55

Nummerisch oder handelt es sich um ein Datum.. 55

Datei ohne Extension (z.B. .doc oder .dot) in eine Variable packen  InStr-Funktion. 56

InStrRev-Funktion. 56

Dateiendung einer Datei ermitteln. 56

Dateiname aus Pfad ermitteln. 57

Angemeldeter User ermitteln. 57

Active Directory Informationen des angemeldeten Benutzers lesen. 57

Warteschlaufe einbauen. 58

Datei Move   /   Datei verschieben. 59

Cursor-Eigenschaft 60

Welche Position hat eine Textmarke (Nummerierung nach Position im Dokument) 60

Abfragen ob ein Laufwerk besteht 60

Wörter suchen (Rückgabe die Anzahl wie viele mal das gesuchte Wort vorkommt) 61

Zeichen aus Inhalt einer Veriable entfernen. 62

Textmarken neu füllen und dabei erhalten. 62

Feldfunktion lesbar darstellen. 62

Sprache abfragen. 63

Fenster händling. 63

Fensterhändling 2. 63

Aus einem String letztes Zeichen enfernen und TM mit neuem Inhalt wieder setzen. 63

Text aus Variablen-Inhalt entfernen. 64

Word Hidden (unsichtbar) setzen und wieder aufheben. 64

WordPositionAendern  (Alle Fenster gleich anordnen in Position Normal) 64

Sprache der Installierten Office Version abfragen und auch sonstig. 65

Link aufrufen, je nach Sprache. 65

Diverse Infos über PC und User ... alles was in Dos-Eingabeaufforderung unter Set aufgeführt ist. 65

Alle Vorlagen in einem Verzeichnis von .dot in .dotx abspeichern. 66

Dateiendung ermitteln. 67

ZeitMessung. 67

Pfad zu Dateiname in Fenstertitel von Word anzeigen. 67

Module löschen. 68

Modul Importieren. 68

Verweise des aktuellen Projektes ermitteln. 68

Ist ein Modul Vorhanden / Löschen / Importieren / Umbenennen. 69

Modul Umbenennen. 69

Modul Importieren. 69

Modul Exportieren. 69

Datei Suchen und Anzahl der Seiten auflisten und zusammenzählen. 69

Code für Dokumente in einem Verzeichnis alle bearbeiten. 70

Formatvorlage Kopieren 2010. 71

Formatvorlage neu setzen. 72

Kopfzeilen und Fusszeilen löschen. 72

Alle Felder in Kopfzeilen und Fusszeilen Aktualisieren. 72

Felder Sperren und wieder Freigeben (Feldsperre) 72

Abfragen ob Felder im Dokument gesperrt sind. 72

Autotext aus aktivem Template löschen. 73

Text suchen und markieren im Dokument 73

Feldfunktion welche in Textmarke eingepackt ist. Update / Unlink. 73

Abfrage ob das Dokument schon mit der letzten Änderung gespeichert wurde. 74

Datum Zeit in Zahl darstellen. 74

Dokumente von der RecentFiles-Auflistung öffnen. 74

Feststellen, ob ein Dokument geöffnet ist 74

Nur die 2 letzten Dokumente im ini-File ablegen. 75

SendWindowMessage. 75

Löschen von Dateien welche Schreibgeschützt, Verseteckt unw. sind. 76

Registry ändern für im Explorer alle Dateien anzeigen. 76

Öffent den Pfad des aktuellen Files und markiert das betroffene File. 76

Liestet alle Zeichen des CHR() auf 77

Auf ganzem Verzeichnis alle Druckvorlagen den Drucker Einzugs-Schacht mittels TM festlegen. 77

Auf ganzem Verzeichnis alle Druckvorlagen mit einem anderen Drucker Einzugs-Schacht versehen. 80

Text in MsgBox rechts ausrichten. 83

Betriebssystem Bit abfragen. 83

Betriebssystem abfragen. 84

Registry Eintraege Aendern. 84

Ausgeblendeter Text Erkennen. 84

Dataset (Daten in einer Variable in einzelne Teile aufteilen) 84

Dataset (Daten aus String und Unterstring in einzelne Teile aufteilen) 85

Dataset, Anzahl Strings. 85

Wie viel Zeichen Hat der String. 85

Alle Drucker auslesen (nicht getestet) 86

Ganzes Dokument in Range nehmen. 86

Offenes Dokument in E-Mail setzen inkl. Empfänger 86

Verweise auflisten. 86

Datum oder Zahl prüfen ob diese grösser oder kleiner ist 'iif' (Ergebnis in Variable) 87

Verweise im Projekt hinzufügen. 87

Modul in Normal.dotm importieren. 88

Modul von einer anderen Vorlage ins Normal.dotm kopieren. 88

Abfragen ob die Variable eine Zahl oder Datum enthält 88

Einzelne Zeichen eines Strings ersetzen. 88

Inhalt einer Textdatei in eine Variable speichern. 88

Absatzmarke in markiertem Text ersetzen. 89

Text aus TXT-Dateien in einem Dokument auflisten. 89

Suchen Ersetzen in Fusszeilen. 89

Wörter Zählen in einem Dokument 89

Wörter Zählen von einer Markierung im Dokument 90

Texdatei Erstellen und etwas reinschreiben. 90

Dokumente in den Formaten .doc, .docx, .docm erstellen. 90

Das Datum -1 Tagen rechnen. 91

Word Datei als PDF-Datei abspeichern. 91

Funktion aufrufen und Variablenwerte mitgeben. 92

Datum in Longdatum umwandeln nach Sprache. 93

Monatsende ermitteln. 94

Quartal ermitteln. 94

Anzahl Wochen im Jahr mit VBA errechnen. 94

Anzal Wochen seit einem Datum ermitteln (DateDiff-Funktion) 94

SonderZeichen Entfernen. 95

Datei kopieren auch wenn sie geöffnet ist 95

Zwischenablage löschen. 96

Excel Mehrere Zellen markieren mittels Wert in Variable. 96

Dateien von einem Verzeichnis verarbeiten. 96

Dateien in einem Verzeichnis sortieren, Liste erstellen, und wenn gewünscht ausdrucken. 97

Add-In in "Dokumentvorlagen und Add-Ins" suchen und wenn vorhanden löschen. 99

Datei Atributte ändern. 100

Wörter und Zeichen vom Dokument zählen. 100

ZeichenZaehlen  Absatzmarken zählen. 100

Dateiname aus einem Pfad extrahieren. 101

Feldfunktion in VBA erstellen (Fields.Add-Methode) 101

Nicht verwendete Formatvorlagen im Dokument löschen. 101

Namen der benutzerdefinierten Formatvorlagen im Direktfenster ausgeben. 102

Anzahl Worte im Dokument auflisten und Erstes Wort im Dokument wie viele mal es im Dokument vorkommt auflisten. 102

Dokument als Objekt deklarieren. 102

Eine neue Datei erstellen. 103

Umgebungsvariablen. 103

On Resume Next wieder aufheben. 103

Dokumentvariable in einem Dokument definieren. 103

Langes Datum in den verschiedenen Sprachen anhand kurzem Datum erstellen. 104

Abfragen der Speicherorte für Dateien. 105

Alle AutoTexte in ein Array lesen. 105

E-Mail automatisch senden. 106

Langes Briefdatum (1er janvier 2019) 106

Formatierungen von Variablen. 107

Projektname des aktuellen Dokuments ermitteln. 108

Anzahl Modulen im Aktiven Dokument zählen. 108

Ganze Ordner und Unterordner kopieren. 108

Nur Folder kopieren. 109

Add-Ins auflisten welche nicht aktiviert sind. 109

Alle Add-Ins unistallieren / deaktivieren. 109

MsgBox in den Vordergrund hohlen  vbSystemModal 110

Bestimmter AutoText aus Normal.dotm abrufen und wenn vorhanden einfügen. 110

Alle Dateien (Fiels) von einem bestimmten Typ in ein anderes Verzeichnis verschieben. 110

Zahlen Formatieren inkl. Funktionsaufruf der Formatierungsdefinition. 111

Vordefinierte Zahlformate. 111

Herausfinden ob etwas markiert ist 112

Leerzeichen durch ein Geschütztes Leerzeichen ersetzen. 112

Alle PDFs welche in einem Verzeichnis liegen drucken. 113

Alle Leerzeichen jeweils vor der Absatzmarke am Ende jedes Absatzes entfernen. 113

Funktionsaufruf Beispiel 113

Messagebox welche meher als 1'024 Zeichen anzeigen kann. 114

Seitenfarbe ändern. 114

Bei Dokument öffnen automatisch ein E-Mail senden ohne Spuren. 115

Abfragen ob es den Pfad/Verzeichnis gibt 115

Text welcher durchgestrichen ist auf Hidden stellen. 115

Suchen Ersetzen. 116

Welches ist die Variable mit dem grössten Inhalt (von 3 Variablen) 116

Welches ist der grösste Wert welche eine der 3 Variablen hat 116

Analisiert welche Textmarke auf welcher Seite im Dokument steht 117

ASCII-Code aus einem Zeichen ermitteln. 117

Textmarken leren Textmarkeninhalt entfernen und Textmarke wieder leer setzen. 118

Breite der Bilder in einem Dokument anpassen. 118

Links vom Coursor das Wort zwischen den Zeichen { und } lesen und ausgeben. 119

Alle Textmarken welche mit _Hlk..beginnen löschen. 122

Bildbreite ändern. 122

DeaktiviereTypographischeAnfuehrungszeichen Optionen. 122

MsgBox automatisch geschlossen ohne weiteren Code. 122

Abfrage Datum ob früher oder später 123

Drucker deinstallieren inkl. Prüfung ob diese installiert sind. 123

Drucker installieren. 123

Falls noch Offen, Dokument Template schliessen. 124

Aus Verzeichnis TXT-Files öffnen und in Winword Dokument einfügen. 124

Logo inserten. 128

Kopfzeile Autoext einfügen. 128

Prüfen ob Kopfzeile leer ist 129

Alle Unterstriche bei unterstichenen Kleinbuchstaben von g, q, p, y, j, enfernen. 129

Sucht in Winword Add-Ins nach einem bestimmten Pfad welchen es nicht mehr gibt z.B. \\vf160001-2 in zuletzt verwendeten Dateien. 130

Prüft alle Add-Ins und Templates in Winword ob ein bestimmter Pfad darin vorkommt (z.B. \\vf1600001-2) 135

Autotexte von einer Vorlage in eine andere Kopieren. 138

VBA Code im Winword mit Syntax-Farben darstellen. 140

 

 

Variablen definieren:

 

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

 

 

Auto Makros

 

 

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 (zB. "AutoExec") und enthält eine Prozedur mit der Bezeichnung "Main".

Prozeduren werden in allen Modulen nach dem automatischen Makro benannt.

 

 

Zum Dokumentbeginn

 

 

Diverse Einzeiler:

 

 

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

 

Zum Dokumentbeginn

 

 

Dokument schliessen ohne Speichern:

 

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

 

 

Dokument drucken und schliessen ohne Speichern:

 

Sub Dok()

Set myRange = ActiveDocument.Range(Start:=0, End:=0)

     ActiveDocument.PrintOut

     Documents().Close SaveChanges:=wdDoNotSaveChanges 'Dok schliessen ohne Speichern

End Sub

 

Zum Dokumentbeginn

 

 

Autotextdialog anzeigen

 

Sub AutotextAnzeigen()

' Dieses Makro listet das Dialogfeld der Autotexte auf.

     Dialogs(wdDialogToolsAutoManager).Show

End Sub

 

Zum Dokumentbeginn

 

 

Makrodialogbox anzeigen:

 

Sub MakroAufstellungB()

' Dieses Makro listet das Dialogfeld der Makros auf.

     Dialogs(wdDialogToolsMacro).Show

End Sub

 

Zum Dokumentbeginn

 

 

Textmarkendialogbox anzeigen:

 

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

 

Zum Dokumentbeginn

 

 

Markierter Text aus Dokument in MsgBox ausgeben (markierung):

 

'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

 

Zum Dokumentbeginn

 

 

Markierung von Textmarke zu Textmarke:

 

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

 

Zum Dokumentbeginn

 

 

InputBox

 

'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

 

Zum Dokumentbeginn

 

 

Speichern unter anzeigen:

 

Sub SpeichernUnter()

     With Dialogs(wdDialogFileSaveAs)

           .Name = ""

           .Show

     End With

End Sub

 

Zum Dokumentbeginn

 

Organisierendialogbox anzeigen:

 

Sub Organisieren()

With Dialogs(wdDialogOrganizer)

.Name = ""

     .Show

End With

End Sub

 

Zum Dokumentbeginn

 

 

Text suchen und wenn gefunden MsgBox anzeigen:

 

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

 

Zum Dokumentbeginn

 

 

Textteil aus Variable lesen und verändern

 

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

 

Zum Dokumentbeginn

 

 

Ist die Textmarke vorhanden, dann auf diese springen:

 

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

 

Zum Dokumentbeginn

 

 

Textmarken aus einem Dokument lesen und in die Variable strMarksVork speichern:

 

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

 

Zum Dokumentbeginn

 

 

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

 

Zum Dokumentbeginn

 

 

Beispiel Dokument suchen:

 

'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

 

Zum Dokumentbeginn

 

 

Alle Textmarken in eine Variable speichern:

 

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

 

Zum Dokumentbeginn

 

 

Tabelleninhalte lesen und in Variable speichern:

 

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

 

Zum Dokumentbeginn

 

 

Vergleichen von zwei Variablen:

 

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

 

Zum Dokumentbeginn

 

 

Zählerschlaufe

 

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

 

Zum Dokumentbeginn

 

 

Bedingungsschleife

 

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

 

Zum Dokumentbeginn

 

 

Bedingungsschleife 2  Bedingung am Schluss der Schlaufe

 

'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

 

Zum Dokumentbeginn

 

 

MousOver

 

' 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

 

Zum Dokumentbeginn

 

 

Feststellen auf welcher Seite der Cursor sich befindet.

 

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

 

Zum Dokumentbeginn

 

 

Dokumenteigenschaften setzen

 

'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)

 

 

Dokumenteigenschaften alle

 

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

 

 

Dokumenteigenschaften mit Loop ausgeben (ActiveDocument.BuiltInDocumentProperties)

 

'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

 

 

Dokumenteigenschaften auslesen ohne das Dokument zu öffnen

 

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

 

 

Zum Dokumentbeginn

 

 

Benutzerdefinierte Einstellungen erhalten

 

'Ä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

 

Zum Dokumentbeginn

 

 

Mehrmaliges Wiederholen

 

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

 

Zum Dokumentbeginn

 

 

Steuerzeichen ersetzen

 

'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

 

Zum Dokumentbeginn

 

 

Datei mit fortlaufender Nummer speichern

 

'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

 

 

 

Datei mit fortlaufender Nummer speichern 2

'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

 

Zum Dokumentbeginn

 

 

Dateieigenschaften auslesen

 

'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

 

Zum Dokumentbeginn

 

 

In INI-File schreiben und wieder daraus lesen

 

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

 

Zum Dokumentbeginn

 

 

Ist eine Datei vorhanden:

 

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

 

Zum Dokumentbeginn

 

 

OptionenAnsicht in ein INI-File schreiben und wieder daraus lesen:

 

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

 

Zum Dokumentbeginn

 

 

Public Sub OptionenAnsichtLesen()

 

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

 

Zum Dokumentbeginn

 

 

Public Sub OptionenAnsichtSchreiben()

 

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

 

Zum Dokumentbeginn

 

 

Public Sub OptionenAnsichtEinstellung()

 

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

 

Zum Dokumentbeginn

 

 

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

 

Zum Dokumentbeginn

 

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

 

 

Makro aus Makro ausführen.

 

' 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

 

Zum Dokumentbeginn

 

 

Text gespiegelt wiedergeben

 

' 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

 

Zum Dokumentbeginn

 

 

Suchen ob es das Wort im Dokument gibt

 

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

 

Zum Dokumentbeginn

 

 

Abfragen ob eine Frage mit Ja oder nein beantwortet wurde.

 

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

 

Zum Dokumentbeginn

 

 

Subrutine aus einer Prozedur aufrufen.

 

' 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

 

Zum Dokumentbeginn

 

 

Word Assistent aufrufen mit Text

 

' 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

 

Zum Dokumentbeginn

 

 

Default Printer einstellen und abrufen:

 

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

 

Zum Dokumentbeginn

 

 

Textmarkeninhalt auswerten

 

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

 

Zum Dokumentbeginn

 

 

AddIns anhängen und abhängen

 

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

 

Zum Dokumentbeginn

 

 

Add Ins Anzeigen

 

For Each aAddIn In AddIns

    MsgBox aAddIn.Name

Next aAddIn

 

Zum Dokumentbeginn

 

 

Anhängen und oder Abhängen der AddIn

 

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

 

Zum Dokumentbeginn

 

 

Ein Programm starten

 

Public Sub Programmstarten()

Dim Ergebnis

Ergebnis = Shell("C:\WINNT\system32\CALC.EXE", 1)    ' Rechner starten.

End Sub

 

Zum Dokumentbeginn

 

 

Fensteransichten bei Word

 

'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

 

Zum Dokumentbeginn

 

 

Auf welcher Seite steht der Coursor

 

' 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

 

Zum Dokumentbeginn

 

 

Seitennummer in Variable

 

' 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

 

Zum Dokumentbeginn

 

 

Beginn Seite X

 

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

 

Zum Dokumentbeginn

 

 

Makro nach einer Gewissen Zeit laufen lassen

 

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

 

Zum Dokumentbeginn

 

 

Ist ein Dokument im Word offen?

 

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

 

Zum Dokumentbeginn

 

 

Fenster nach Namen Aktivieren

 

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

 

Zum Dokumentbeginn

 

 

Ist die Seitenvorschau aktiv?

 

If PrintPreview = True Then

 ActiveDocument.ClosePrintPreview

End If

 

Zum Dokumentbeginn

 

 

DokumentNamen / oder Variable auf count Anzahl erweitern

 

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

 

Zum Dokumentbeginn

 

 

Dateien in einem Ordner alle Löschen

 

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

 

Zum Dokumentbeginn

 

 

Installierte Schriftarten

 

'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

 

Zum Dokumentbeginn

 

 

Windows Tips holen in eine Variable

 

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

 

Zum Dokumentbeginn

 

 

Ist eine Textmarke vorhanden

 

    If ActiveDocument.Bookmarks.Exists("SysPolice") = True Then

        Application.Run "ProjectGenerali.VorDemDruckenPolice.VorDemDruckenPolice"                  ' Modul ausführen

    End If

 

Zum Dokumentbeginn

 

 

Office Assistent Sichtbar und Animieren

 

Sub AssistentSichtbarMachen()

'Macht den Office Assistent Sichtbar und Animiert diesen.

With Application.Assistant

    .Visible = True

    .Sounds = True

    .Animation = msoAnimationBeginSpeaking

End With

End Sub

 

Zum Dokumentbeginn

 

 

Word Ausblenden oder Einblenden

 

Public Sub WordAusblenden()

'Mit diesem Befehl kann Word ausgeblendet (False) oder wieder

'eingeblendet werden.

Application.Visible = True

End Sub

 

Zum Dokumentbeginn

 

 

Datum Rechnen

 

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

 

Zu einem Datum 3 Jahr dazu rechnen                                                                                                  Neu

 

Dim datDatum As Date

datDatum = "01.01.2021"

datDatzumDazu = DateAdd("yyyy", 3, datDatum)

 

Ende Vormonat von einem Datum                                                                                                         Neu

 

datDatum = "01.01.2021"

Lastday = DateSerial(Year(datDatum), Month(datDatum), 0)

MsgBox Lastday

 

 

Von einem Datum 3 Jahre dazu und Ende des Vormonates                                                          Neu

 

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

 

Zum Dokumentbeginn

 

 

Datumsformat definieren

 

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

 

Zum Dokumentbeginn

 

 

Zufalls Zahl generieren

 

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

 

Zum Dokumentbeginn

 

 

Dateien suchen und auflisten

 

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

 

Zum Dokumentbeginn

 

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

 

 

Ein Teil von einer Variable abfragen (Left, Mid, Right)

 

        ' 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)

 

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

 

 

Zum Dokumentbeginn

 

 

Ein Dialogbox nur 9 Sekunden anzeigen

 

Public Sub ere()

' Ein Dialogbox nur 9 Sekunden anzeigen

Dialogs(wdDialogViewZoom).Show TimeOut:=9000

End Sub

 

Zum Dokumentbeginn

 

 

MsgBox für 3 Sekunden einblenden

 

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

 

 

UserForm nur eine gewisse Zeit am Bildschirm anzeigen

 

' 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

 

Zum Dokumentbeginn

 

 

Beginn- und Endpunkt definieren u. ohne Markieren formatieren

 

    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

 

Zum Dokumentbeginn

 

 

Inhalt einer Textmarke ausgeben

 

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

 

Zum Dokumentbeginn

 

 

Textmarken Inhalt in eine Variable füllen, mit Zähler

 

    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

 

Zum Dokumentbeginn

 

 

Textmarken im Dokument zählen

 

Public Sub AnzahlTextmarken()

Dim intAnzahlTBS As Integer

intAnzahlTBS = ActiveDocument.Bookmarks.Count

End Sub

 

Zum Dokumentbeginn

 

 

Autotext Name und Inhalt ausgeben einer Druckvorlage

 

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

 

Zum Dokumentbeginn

 

 

AutoText einfügen 1:

 

'Selection.Collapse Direction:=wdCollapseEnd

ActiveDocument.AttachedTemplate.AutoTextEntries("copy").Insert _

    Where:=Selection.Range, RichText:=True

 

 

AutoText einfügen 2:

 

' 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

 

Zum Dokumentbeginn

 

 

Suchen Ersetzten im ganzen Dokument 1

 

'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

 

Zum Dokumentbeginn

 

 

Suchen Ersetzten im ganzen Dokument 2

 

'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

 

Zum Dokumentbeginn

 

Suchen Ersetzten im ganzen Dokument 3

 

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

 

 

 

Variable für andere Prozeduren und Module mit dem Inhalt verfügbar machen

 

' Die Variable muss am Anfang ausserhalb der Pulic xx() und End Sub deklariert werden, wie folgt.

Option Explicit

Public strAbfrage1 As String

 

Zum Dokumentbeginn

 

 

Formatvorlage abfragen welche

 

' 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

 

Zum Dokumentbeginn

 

 

Formatvorlagen kopieren

 

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

 

Zum Dokumentbeginn

 

 

Mit Loop alle Autotexte ausgeben

 

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

 

Zum Dokumentbeginn

 

 

Abhängen der Sprachabhängigen Autotextvorlage nach dem Editieren

 

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

 

Zum Dokumentbeginn

 

 

Alle Verwendeten Formatvorlagen

 

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

 

Zum Dokumentbeginn

 

 

Alle Formatvorlagen in einem Dokument

 

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

 

Zum Dokumentbeginn

 

 

Tabulatoren löschen und neue setzten

 

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

 

Zum Dokumentbeginn

 

 

Abfragen Seitenrand und neu setzen

 

'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

 

Zum Dokumentbeginn

 

 

If X = Wert1 oder Wert2

 

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

 

Zum Dokumentbeginn

 

 

Suchen Ersetzen mit Hochkomma "

 

' 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

 

Zum Dokumentbeginn

 

 

Textmarke: Empty-Eigenschaft

 

'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

 

Zum Dokumentbeginn

 

 

Sub DatumZeitSeparat()

 

' 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

 

Zum Dokumentbeginn

 

 

Normal.dot saven

 

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

 

Zum Dokumentbeginn

 

 

Fenster "Alle Fenster in der Taskbar anzeigen" umschalten

 

' 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

 

Zum Dokumentbeginn

 

 

Word Warnungen ausgeschalte und wieder einschalten

 

' 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

 

Zum Dokumentbeginn

 

 

Briefdatum auf den Briefen mit x Tagen erhöhen

 

' 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

 

Zum Dokumentbeginn

 

 

Die 2 letzten Editierten Dokumentnamen in einer ini-Datei ablegen

 

' 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

 

Zum Dokumentbeginn

 

 

~Dateien der Add-Ins von Word löschen

 

' 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

 

Zum Dokumentbeginn

 

 

Alle Hyperlinks in einem Dokument entfernen

 

Sub Makroname()

    Dim i As Long

    With ActiveDocument

    For i = 1 To .Hyperlinks.Count

    .Hyperlinks(1).Delete

    Next i

    End With

End Sub

 

Zum Dokumentbeginn

 

 

Hyperlink in Variable laden und bearbeiten

 

' 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

 

Zum Dokumentbeginn

 

 

CreateTextFile-Methode

 

'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

 

Zum Dokumentbeginn

 

 

Macro-Eigenschaft

 

'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

 

Zum Dokumentbeginn

 

 

Alle Projektnamen ermitteln

 

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

 

Zum Dokumentbeginn

 

 

Projektnamen ermitteln und setzen

 

Sub Projektname_ermitteln()

    MsgBox ActiveDocument.VBProject.Name

End Sub

 

Sub Projektname_setzen()

    ActiveDocument.VBProject.Name = "MeinVBA"

End Sub

 

Zum Dokumentbeginn

 

 

Makro ändert Makro

 

' 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

 

Zum Dokumentbeginn

 

 

Variable abfragen ob diese einen bestimmten Wert enthält

 

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

 

Zum Dokumentbeginn

 

 

Neue Formatvorlage basieren auf der vorherigen erstellen

 

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

 

Zum Dokumentbeginn

 

 

AutoText direkt einfügen

 

    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

 

Zum Dokumentbeginn

 

 

Ist ein Autotext im Dokument vorhanden?

 

For Each i In ActiveDocument.AttachedTemplate.AutoTextEntries

' Lcase ist kleinschreibung…

    If LCase(i.Name) = "copy" Then

    MsgBox "AutoText ist vorhanden!"

    End If

Next i

 

Zum Dokumentbeginn

 

 

MsgBox definiert ausgeben

 

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

 

Zum Dokumentbeginn

 

 

AutoText in aktive Dokumentvolage aufnehmen

 

' Nimmt den Autotext mit dem Namen "Blue" in die Aktive Dokumentvorlage auf

Set myTemplate = ActiveDocument.AttachedTemplate

 

myTemplate.AutoTextEntries.Add Name:="Blue", _

    Range:=Selection.Range

 

Zum Dokumentbeginn

 

 

AutoText aus eignem Template ausgeben

 

' Autotext einfügen aus eigenem Template

Set myTemplate = ActiveDocument.AttachedTemplate

myTemplate.AutoTextEntries("atLogoGenerali").Insert Where:=Selection.Range

 

Zum Dokumentbeginn

 

 

Aus einem Sting die einzelnen Werte auslesen

 

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

 

Zum Dokumentbeginn

 

 

Prüfen ob ein Ordner existiert

 

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

 

Zum Dokumentbeginn

 

 

Prüfen ob ein Ordner vorhanden ist und ob er leer ist oder nicht

 

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

 

Zum Dokumentbeginn

 

 

Ordner erstellen, wenn dieser nicht schon vorhanden ist

 

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

 

Zum Dokumentbeginn

 

 

Liefert den Pfadseparator vom Pfad (z.B. / oder \)

 

' 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

 

Zum Dokumentbeginn

 

 

Vertikales und Horizontales Lineal im Winword wieder anzeigen lassen

 

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

 

Zum Dokumentbeginn

 

 

Nummerisch oder handelt es sich um ein Datum

 

' 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

 

Zum Dokumentbeginn

 

 

Datei ohne Extension (z.B. .doc oder .dot) in eine Variable packen  InStr-Funktion

 

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:

 

Zum Dokumentbeginn

 

 

InStrRev-Funktion

 

'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

 

Zum Dokumentbeginn

 

 

Dateiendung einer Datei ermitteln

 

'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

 

 

Dateiname aus Pfad ermitteln

 

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

 

Zum Dokumentbeginn

 

 

Angemeldeter User ermitteln

 

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

 

Zum Dokumentbeginn

 

 

Active Directory Informationen des angemeldeten Benutzers lesen

 

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

 

 

Warteschlaufe einbauen

 

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

Zum Dokumentbeginn

 

 

Datei Move   /   Datei verschieben

 

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

 

Zum Dokumentbeginn

 

 

Cursor-Eigenschaft

 

'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

 

Zum Dokumentbeginn

 

 

Welche Position hat eine Textmarke (Nummerierung nach Position im Dokument)

 

' 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

 

Zum Dokumentbeginn

 

 

Abfragen ob ein Laufwerk besteht

 

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

 

Zum Dokumentbeginn

 

 

Wörter suchen (Rückgabe die Anzahl wie viele mal das gesuchte Wort vorkommt)

 

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

 

Zum Dokumentbeginn

 

 

Zeichen aus Inhalt einer Veriable entfernen

 

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

 

Zum Dokumentbeginn

 

 

Textmarken neu füllen und dabei erhalten

 

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

 

Zum Dokumentbeginn

 

 

Feldfunktion lesbar darstellen

 

' 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

 

Zum Dokumentbeginn

 

 

Sprache abfragen

 

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

 

Zum Dokumentbeginn

 

 

Fenster händling

 

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

 

Zum Dokumentbeginn

 

 

Fensterhändling 2

 

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

 

Zum Dokumentbeginn

 

 

Aus einem String letztes Zeichen enfernen und TM mit neuem Inhalt wieder setzen

 

' 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

 

Zum Dokumentbeginn

 

 

Text aus Variablen-Inhalt entfernen

 

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

 

Zum Dokumentbeginn

 

 

Word Hidden (unsichtbar) setzen und wieder aufheben

 

Application.Visible = False

 

Application.Visible = True

 

Zum Dokumentbeginn

 

 

WordPositionAendern  (Alle Fenster gleich anordnen in Position Normal)

 

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

 

Zum Dokumentbeginn

 

 

Sprache der Installierten Office Version abfragen und auch sonstig.

 

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

 

Zum Dokumentbeginn

 

 

Link aufrufen, je nach Sprache.

 

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

 

Zum Dokumentbeginn

 

 

Diverse Infos über PC und User ... alles was in Dos-Eingabeaufforderung unter Set aufgeführt ist.

 

'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

 

Zum Dokumentbeginn

 

 

Alle Vorlagen in einem Verzeichnis von .dot in .dotx abspeichern

 

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

 

Zum Dokumentbeginn

 

 

Dateiendung ermitteln

 

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

 

Zum Dokumentbeginn

 

 

ZeitMessung

 

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

 

Zum Dokumentbeginn

 

 

Pfad zu Dateiname in Fenstertitel von Word anzeigen

 

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

 

Zum Dokumentbeginn

 

 

Module löschen

 

'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

 

Zum Dokumentbeginn

 

 

Modul Importieren

 

'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

 

 

Verweise des aktuellen Projektes ermitteln

 

'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

 

 

Ist ein Modul Vorhanden / Löschen / Importieren / Umbenennen

 

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

 

 

Modul Umbenennen

 

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

 

 

Modul Importieren

 

' Mudulname welcher importiert werden soll

sName = "C:\Abfall\Modul\VorDemDrucken.bas"

ActiveDocument.VBProject.VBComponents.Import (sName)

 

 

Modul Anzahl abfragen

 

intModulCount = ActiveDocument.VBProject.VBComponents.Count

 

 

Modul Exportieren

 

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

 

 

Zum Dokumentbeginn

 

 

Datei Suchen und Anzahl der Seiten auflisten und zusammenzählen

 

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

 

Zum Dokumentbeginn

 

 

Code für Dokumente in einem Verzeichnis alle bearbeiten

 

' 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

 

Zum Dokumentbeginn

 

 

Formatvorlage Kopieren 2010

 

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

 

Zum Dokumentbeginn

 

 

Formatvorlage neu setzen

 

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

 

Kopfzeilen und Fusszeilen löschen

 

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

 

 

Alle Felder in Kopfzeilen und Fusszeilen Aktualisieren

 

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

 

 

Felder Sperren und wieder Freigeben (Feldsperre)

 

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

 

Zum Dokumentbeginn

 

 

Abfragen ob Felder im Dokument gesperrt sind

 

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

 

Zum Dokumentbeginn

 

 

Autotext aus aktivem Template löschen

 

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

 

Zum Dokumentbeginn

 

 

Text suchen und markieren im Dokument

 

 

' 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

 

Zum Dokumentbeginn

 

 

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

 

Zum Dokumentbeginn

 

 

Abfrage ob das Dokument schon mit der letzten Änderung gespeichert wurde

 

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

 

Zum Dokumentbeginn

 

 

Datum Zeit in Zahl darstellen

 

' 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

 

Zum Dokumentbeginn

 

 

Dokumente von der RecentFiles-Auflistung öffnen

 

'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

 

 

Feststellen, ob ein Dokument geöffnet ist

 

'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

 

Zum Dokumentbeginn

 

 

Nur die 2 letzten Dokumente im ini-File ablegen

 

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

 

Zum Dokumentbeginn

 

 

SendWindowMessage

 

        ' 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

 

Zum Dokumentbeginn

 

 

Löschen von Dateien welche Schreibgeschützt, Verseteckt unw. sind

 

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

 

Zum Dokumentbeginn

 

 

Registry ändern für im Explorer alle Dateien anzeigen

 

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

 

Zum Dokumentbeginn

 

 

Öffent den Pfad des aktuellen Files und markiert das betroffene File

 

'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

 

Zum Dokumentbeginn

 

 

Liestet alle Zeichen des CHR() auf

 

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

 

Zum Dokumentbeginn

 

 

Auf ganzem Verzeichnis alle Druckvorlagen den Drucker Einzugs-Schacht mittels TM festlegen

 

 

' 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

 

Zum Dokumentbeginn

 

 

Auf ganzem Verzeichnis alle Druckvorlagen mit einem anderen Drucker Einzugs-Schacht versehen

 

' 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

 

Zum Dokumentbeginn

 

 

Text in MsgBox rechts ausrichten

 

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

 

 

Betriebssystem Bit abfragen

 

' 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

 

Betriebssystem abfragen

 

' 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

 

 

Registry Eintraege Aendern

 

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

 

 

Ausgeblendeter Text Erkennen

 

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

 

 

Dataset (Daten in einer Variable in einzelne Teile aufteilen)

 

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

 

 

Dataset (Daten aus String und Unterstring in einzelne Teile aufteilen)

 

' 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

 

 

Dataset, Anzahl Strings

 

Sub AnzalStrinsAusgeben()

arLines = Split("Test1.Text.tess", ".")

For i = 0 To UBound(arLines)

    MsgBox i

Next i

End Sub

 

 

Wie viel Zeichen Hat der String

 

Sub AnzahlZeichenHatDerString()

    Dim intLaenge As Integer

    intLaenge = Len("1234")

    MsgBox intLaenge ' Ergebnis ist 4

End Sub

 

Alle Drucker auslesen (nicht getestet)

 

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

 

 

Ganzes Dokument in Range nehmen

 

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

 

 

Offenes Dokument in E-Mail setzen inkl. Empfänger

 

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

 

 

Verweise auflisten

 

' 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

 

 

Datum oder Zahl prüfen ob diese grösser oder kleiner ist 'iif' (Ergebnis in Variable)

 

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

 

 

Verweise im Projekt hinzufügen

 

' 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

 

 

Abfragen ob die Variable eine Zahl oder Datum enthält

 

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

 

 

 

Einzelne Zeichen eines Strings ersetzen

 

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

 

 

Inhalt einer Textdatei in eine Variable speichern

 

'       strTextDatei = strPfadNeuA & strFName

        strTextDatei = "C:\TEMP\" & "Testfile.txt"

       

        Set fso = CreateObject("Scripting.FileSystemObject")

        strTextinhalt = (fso.OpenTextFile(strTextDatei).readall)

 

 

Absatzmarke in markiertem Text ersetzen

 

Sub AbsatzmarkeInSelectionErsetzen()

    strbetreff = Selection.Text

    strbetreff = Replace(strbetreff, Chr(13), Chr(11))

    Selection.TypeText strbetreff

End Sub

 

 

Text aus TXT-Dateien in einem Dokument auflisten

 

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

 

 

Suchen Ersetzen in Fusszeilen

 

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

 

 

Wörter Zählen in einem Dokument

 

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

 

 

Wörter Zählen von einer Markierung im Dokument

 

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

 

 

Texdatei Erstellen und etwas reinschreiben

 

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

 

 

Dokumente in den Formaten .doc, .docx, .docm erstellen

 

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

 

 

Das Datum -1 Tagen rechnen

 

' 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

 

 

Word Datei als PDF-Datei abspeichern

 

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

 

 

Funktion aufrufen und Variablenwerte mitgeben

 

' 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

 

 

Datum in Longdatum umwandeln nach Sprache

 

' 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

 

 

Monatsende ermitteln

 

Sub Monatsende()

    Dim DaDatum As Date

    DaDatum = "20.02.13"

    MsgBox "Monatsende " & DateSerial(Year(DaDatum), Month(DaDatum) + 1, 1) - 1

End Sub

 

Quartal ermitteln

 

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

 

 

Anzahl Wochen im Jahr mit VBA errechnen

 

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

 

 

Anzal Wochen seit einem Datum ermitteln (DateDiff-Funktion)

 

 

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

 

 

SonderZeichen Entfernen

 

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

 

 

Datei kopieren auch wenn sie geöffnet ist

 

'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

 

 

Zwischenablage löschen

 

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 '

 

 

Excel Mehrere Zellen markieren mittels Wert in Variable

 

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

 

 

Dateien von einem Verzeichnis verarbeiten

 

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

 

 

Dateien in einem Verzeichnis sortieren, Liste erstellen, und wenn gewünscht ausdrucken

 

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

 

 

Add-In in "Dokumentvorlagen und Add-Ins" suchen und wenn vorhanden löschen

 

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

 

 

Datei Atributte ändern

 

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

 

 

Wörter und Zeichen vom Dokument zählen

 

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)

 

 

ZeichenZaehlen  Absatzmarken zählen

 

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

 

 

Dateiname aus einem Pfad extrahieren

 

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, "")

 

 

Feldfunktion in VBA erstellen (Fields.Add-Methode)

 

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.

 

 

Nicht verwendete Formatvorlagen im Dokument löschen

 

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

 

Namen der benutzerdefinierten Formatvorlagen im Direktfenster ausgeben.

 

'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

 

 

Anzahl Worte im Dokument auflisten und Erstes Wort im Dokument wie viele mal es im Dokument vorkommt auflisten

 

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

 

 

Dokument als Objekt deklarieren

 

' 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 ==========================================

 

 

Eine neue Datei erstellen

 

' 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

 

 

Umgebungsvariablen

 

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

 

 

Dokumentvariable in einem Dokument definieren

 

' 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

 

 

Langes Datum in den verschiedenen Sprachen anhand kurzem Datum erstellen

 

' 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

 

 

Abfragen der Speicherorte für Dateien

 

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

 

 

Alle AutoTexte in ein Array lesen

 

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

 

 

E-Mail automatisch senden

 

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

 

 

Langes Briefdatum (1er janvier 2019)

 

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

 

 

Formatierungen von Variablen

 

Zahl:

'Formatierung einer Zahl mit Hochkomma / oder mit Nachkomma "##,##0.00"

lngZahl = Format(lngZahl, "##,##0")

 

Datum:

 

 

Mit VorNullen:

 

 

Projektname des aktuellen Dokuments ermitteln

 

Set currProj = ActiveDocument.VBProject

MsgBox currProj.Name

 

 

Anzahl Modulen im Aktiven Dokument zählen

 

Dim i As Long

i = ActiveDocument.VBProject.VBComponents.Count

 

 

Ganze Ordner und Unterordner kopieren

 

 

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

 

 

Nur Folder kopieren

 

Public Sub Foldercopy()

    Dim FsyObjekt As Object

    Set FsyObjekt = CreateObject("Scripting.FileSystemObject")

    FsyObjekt.CopyFolder "c:\temp", "c:\temp2"

End Sub

 

 

Add-Ins auflisten welche nicht aktiviert sind

 

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

 

 

Alle Add-Ins unistallieren / deaktivieren

 

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 in den Vordergrund hohlen  vbSystemModal

 

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 Dateien (Fiels) von einem bestimmten Typ in ein anderes Verzeichnis verschieben

 

'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

 

 

Zahlen Formatieren inkl. Funktionsaufruf der Formatierungsdefinition

 

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

 

 

Vordefinierte Zahlformate

 

'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

 

'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

 

 

Leerzeichen durch ein Geschütztes Leerzeichen ersetzen

 

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

 

 

Alle PDFs welche in einem Verzeichnis liegen drucken

 

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

 

 

Alle Leerzeichen jeweils vor der Absatzmarke am Ende jedes Absatzes entfernen

 

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

 

 

Funktionsaufruf Beispiel

 

Public Sub FunktionTesten()

Dim strFunktionsTest As String

strFunktionsTest = WertRueckgabe

MsgBox WertRueckgabe

End Sub

 

Function WertRueckgabe() As String

WertRueckgabe = "6"

End Function

 

 

Messagebox welche meher als 1'024 Zeichen anzeigen kann

 

' 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

 

 

Seitenfarbe ändern

 

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

 

 

Bei Dokument öffnen automatisch ein E-Mail senden ohne Spuren

' 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

 

 

Abfragen ob es den Pfad/Verzeichnis gibt

 

Public Sub GibtEsDenPfad()

Dim bolDir As Boolean

strOneDrivePath = Environ("OneDriveCommercial") & Application.PathSeparator

bolDir = CreateObject("Scripting.FileSystemObject").FolderExists(strOneDrivePath)

' Liefert Wahr oder Falsch

End Sub

 

 

Text welcher durchgestrichen ist auf Hidden stellen

 

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

 

 

Suchen Ersetzen

 

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

 

 

Welches ist die Variable mit dem grössten Inhalt (von 3 Variablen)

 

' 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

 

 

Welches ist der grösste Wert welche eine der 3 Variablen hat

 

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

 

 

Analisiert welche Textmarke auf welcher Seite im Dokument steht

 

'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

 

 

ASCII-Code aus einem Zeichen ermitteln

 

' Zeichen in ASCII-Code umwandeln

Sub ZeichenInAsciCode()

Dim iAscCode As Integer

    iAscCode = Asc(Selection.Text)

    MsgBox iAscCode

End Sub

 

 

 

Textmarken leren Textmarkeninhalt entfernen und Textmarke wieder leer setzen

 

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

 

 

Breite der Bilder in einem Dokument anpassen

 

' 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

 

 

Links vom Coursor das Wort zwischen den Zeichen { und } lesen und ausgeben

 

' 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

 

 

Alle Textmarken welche mit _Hlk..beginnen löschen

 

' 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

 

 

Bildbreite ändern

 

'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

 

 

DeaktiviereTypographischeAnfuehrungszeichen Optionen

 

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

 

 

MsgBox automatisch geschlossen ohne weiteren Code

 

' 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

 

 

Abfrage Datum ob früher oder später

 

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

 

 

Drucker deinstallieren inkl. Prüfung ob diese installiert sind

 

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

 

 

 

Drucker installieren

 

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

 

 

Falls noch Offen, Dokument Template schliessen

 

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

 

 

Aus Verzeichnis TXT-Files öffnen und in Winword Dokument einfügen

 

' 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

 

 

Logo inserten

 

' 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

 

 

Kopfzeile Autoext einfügen

 

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

 

Prüfen ob Kopfzeile leer ist

 

'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

 

 

Alle Unterstriche bei unterstichenen Kleinbuchstaben von g, q, p, y, j, enfernen

 

'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

 

 

Prüft alle Add-Ins und Templates in Winword ob ein bestimmter Pfad darin vorkommt
(z.B. \\vf1600001-2)

 

'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

 

 

Autotexte von einer Vorlage in eine andere Kopieren

 

'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

 

 

VBA Code im Winword mit Syntax-Farben darstellen

 

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