Microsoft Word mit VBA programmieren [] (Microsoft Word mit VBA programmieren), Lektion, Seite 720211
https://www.purl.org/stefan_ram/pub/word-vba (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Microsoft Word  mit VBA  programmieren

Sub Example()

  Dim r As Revision

  Dim i As Integer

  Dim j As Integer

  For i = 1 To ActiveDocument.Paragraphs.Count

    If ActiveDocument.Paragraphs( i ).Range.Revisions.Count > 0 Then

      For j = 1 To ActiveDocument.Paragraphs( i ).Range.Revisions.Count

        ' ignore type 11 ?

        Debug.Print ActiveDocument.Paragraphs( i ).Range.Revisions( j ).Author : Next : EndIf : Next : End Sub

Bereitstellen der Objektbibliothek Word 

Damit Word  programmiert werden kann, muß die Objektbibliothek Word  als Verweis mit einem Häkchen versehen sein. Dies ist normalerweise bereits der Fall, wenn VBA  von Word  aus aufgerufen wurde. Ansonsten kann in der Oberfläche von VBA  im Extras -Menü der EIntrag „Verweise … “ aktiviert werden. Dort sollte dann ein Häkchen vor der Objektbibliothek Word  gesetzt werden. Der genaue Name dieser Bibliothek in der Liste der Verweise hängt von der verwendeten Version von Word  ab. Bei Word 2000  lautet er beispielsweise „Microsoft Word 9.0 Object Library “, bei späteren Versionen ist die Zahl „9“ wahrscheinlich durch eine größere Zahl ersetzt.

Das Objekt der Anwendung Word 

Die Bibliothek Word  enthält ein Objekt »Word.Application«, welches eine eventuell gerade laufende Word-Anwendung repräsentiert.

Überprüfen des Zugriffs auf das Word -Objekt

Wenn bei der Ausgabe von »Word.Application« ein Text erscheint, so ist wahrscheinlich die richtige Bibliothek verwendbar.

Direktbereich
? Word.Application

Microsoft Word

Unter Umständen kann das Objekt auch ohne Qualifikation bezeichnet werden.

Direktbereich
? Application

Microsoft Word

Das Objekt »Word.Application.Selection«

Das Objekt »Word.Application.Selection« repräsentiert die „aktuelle Markierung“. Dies ist entweder ein selektierter (markierter) Text, oder – wenn kein Text selektiert wurde – das Zeichen rechts von der Schreibmarke. Das Feld »Text« enthält die Zeichenfolge der Selektion.

Direktbereich
? Word.Application.Selection.Text

X

Unter Umständen kann das Objekt auch ohne Qualifikation bezeichnet werden. Die Eigenschaft »Text« ist die Fehleigenschaft des Objekts.

Direktbereich
? Selection

X

Durch Auslesen der Selektion kann Code einen Text verarbeiten, den der Benutzer zuvor durch Selektion festgelegt hat.

Durch eine Zuweisung an die Selektion kann Code den Text der Selektion verändern oder festlegen.

Das folgende Makro ersetzt den Text der Selektion durch »Desoxyribonukleinsäure«. Wenn kein Text selektiert ist, wird »Desoxyribonukleinsäure« an der Stelle der Schreibmarke eingefügt, als ob es gerade über die Tastatur eingegeben worden sei. Falls jemand das lange Wort „Desoxyribonukleinsäure“ öfter eingeben muß, könnte solch ein Makro eine Eingabeerleichterung darstellen.

Code-Bereich
Sub DNS()

  Word.Application.Selection.Text ="Desoxyribonukleinsäure"

End Sub

Das folgende Makro multipliziert eine selektierte Zahl mit 2,54, dem Faktor für die Umrechnung von Zoll in Zentimeter. Das geht aber nur, wenn zuvor auch eine Zahl im passenden Format selektiert wurde.

Code-Bereich

Sub ZentimeterAusZoll()

  Word.Application.Selection.Text = Word.Application.Selection.Text * 2.54

End Sub

Festlegen der Selektion

Das Festlegen der Selektion erfolgt nicht wie man denken könnte über das Selection-Objekt, sondern über die Select-Methode eines Range-Objekt.

Schreiben in ein Dokument

Das folgende Programmbeispiel zeigt beispielhaft einige Aufrufe zum Schreiben in das aktuelle Dokument.

        With Selection

             .TypeText Text:="Absatz"

             .TypeParagraph

             .TypeText Text:="Zweiter Absatz -- "

             .Font.Bold = True

             .TypeText "Fettschrift"

             .Font.Bold = False

             .TypeText Text:="-- Fortsetzung."

             .Comments.Add Selection.Range, "Kommentar"

             .TypeParagraph

             .TypeText Text:="Dritter Absatz."

             .EndKey unit:=wdLine

         End With

Vordefinierte Standard-Dialog von Word

With Dialogs(wdDialogFormatFont)     

  .DefaultTab = wdDialogFormatFontTabCharacterSpacing     

  .Show 

End With 



.show = Standardfunktionalität

.display = Spezialfunktionalität

.execute = Standardverhalten



With Dialogs(wdDialogFileSaveAs)

     .Name = “Yellow Paint Primer”

     .Show

End With

Überschreiben von Standardprozeduren

(hat keine Entsprechung bei Excel)

z.B.:

FileClose

DocClose

Public Sub DocClose()

FileClose

End Sub

Public Sub FileClose()

MsgBox "test"

ActiveDocument.Close SaveChanges:=wdSaveChanges

End Sub

DocClose

FileClose

FileCloseOrExit

FileExit

vgl App event DocumentBeforeClose DocumentBeforeClose and DocumentBeforeSave , geht auch, wenn Standard-Subs umgangen werden, aber es wird auch von Problemen damit berichtet

private void wordApp_DocumentBeforeClose(Word.Document doc, ref bool cancel)

{

}

Document_Close event in Word 2010

Private Sub Document_Close()

MsgBox "Beispiel"

End Sub

Sub FileSave()

MsgBox "Datei Speichern"

End Sub

Kommandoliste: Tools > Macro > Macros...

CTRL+ALT+Num+ ergibt Mauszeiger, der das bei Auswahl anzeigt

Verschiedene Symbole der Oberfläche mit gleicher Bedeutung führen manchmal zu unterschiedlichen Prozedurnamen!

Das WordBasic-Objekt

WordBasic wurde mit Word97 durch VBA ersetzt.

Sub SortTest()

Dim text(2) As String

Dim i As Integer

text(0) = "ctrl"

text(1) = "alt"

text(2) = "num"

WordBasic.SortArray text()

Debug.Print text(0)

Debug.Print text(1)

Debug.Print text(2)

End Sub

Formulare in Word

Symbolleiste „Formular“, nicht „Steuerelemente-Toolsbox“

Sub Form1()
Dim X As String, Y As String
X = ActiveDocument.FormFields(1).Result
Y = ActiveDocument.FormFields(2).Result
MsgBox "Name = " & X & CHR$(10) & CHR$(13) & "DEM = ” & Y
End Sub

Datenübertragung zwischen Word und Excel
Einzelne Beispiele

' Application.Screenupdating = False



Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long



Sub shrink()

  'ctrl -

  Let ActiveWindow.ActivePane.View.Zoom.Percentage = ActiveWindow.ActivePane.View.Zoom.Percentage / 1.1

End Sub



Sub grow()

  'ctrl +

  On Error Resume Next

  Let ActiveWindow.ActivePane.View.Zoom.Percentage = ActiveWindow.ActivePane.View.Zoom.Percentage * 1.1

End Sub



Sub restoreMySettings()

  ActiveWindow.View.ShowHiddenText = True

  CommandBars("Web").Visible = False

End Sub



Sub setMyOptions()

  Dim lResult As Long, lKeyValue As Long

  lResult = RegOpenKey(HKEY_CURRENT_USER, "Software\Microsoft\Office\9.0\Word\Data", lKeyValue)

  lResult = RegDeleteValue(lKeyValue, "Settings")

  lResult = RegCloseKey(lKeyValue)

End Sub

Beispiel Kopieren eines Bereichs von Dokument zu Dokument

Sub Test()

  Dim A As New Word.Document

  Dim B As New Word.Document

  B.Select

  Selection.TypeText ("Beta")

  A.Paragraphs.first.Range.FormattedText = B.Paragraphs.first.Range.FormattedText

End Sub

Gemeinsame Makros

Man kann Makros, welche von mehreren Dokumenten gemeinsam genutzt werden sollen, in eine Dokumentvorlage speichern, welche von den Dokumenten eingebungen wird.

Diese Dokumentvorlage kann zur besseren Übersicht auch versteckt werden.

Bei Laufzeitfehlern in einer versteckten Dokumentvorlage wird die Stelle des Fehlers aber dann nicht angezeigt; dazu muß die Dokumentvorlage dann explizit geladen werden.

Übungsaufgaben

Umlaute und Eszett durch ASCII ersetzen.

Interne Notizen

— Makros Documents.Open( "A" ) statt Documents( "A" ) in Web kopieren

— Auto-Start-Makros löschen

— Anpassungen entfernen

Private Sub createAndExecuteASub()

    Dim module As VBIDE.VBComponent

    Set module = ActiveDocument.VBProject.VBComponents( "Modul1" )

    module.CodeModule.AddFromString _
"Public Sub macro1()" & vbCrLf & _
" Debug.Print ""macro1""" & vbCrLf & _
"End Sub" Application.Run MacroName:="Project1.Modul1.macro1" Set module = Nothing End Sub

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram720211 stefan_ram:720211 Microsoft Word mit VBA programmieren Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd720211, slrprddef720211, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/word-vba