hanspeter92
Goto Top

Microsoft Office Makro

Hallo zusammen,
Ich möchte ein Makro erstellen, das in allen Word-Dokumenten in einem Ordner eine Kopf-und eine Fusszeile einfügt.
Das einfügen der Kopf- und Fusszeile selber in einer Datei ist kein Problem. Doch das übernehmen für alle Dateien ist leider für mich nicht möglich. Folgenden Code habe ich bereits geschrieben, doch Application.Filesearch funktioniert meines Wissens seit Office 2007 nicht mehr. Daher brauche ich eine Alternative dazu.

Sub Makro1()
Dim anzdatei As Integer
Dim Pfad

Set fs = Application.FileSearch

'On Error GoTo Fehler
'hier kann auch ein fester Pfad eingegeben werden
Pfad = InputBox("Geben Sie den Pfad an", "Pfad")

'hier werden nur die insgesamt gefundenen Dateien ausgegeben
If Pfad = "" Then
MsgBox "Kein Pfad eingegeben!"
Exit Sub
End If

With fs
.NewSearch
.FileType = msoFileTypeWordDocuments
.LookIn = Pfad
.SearchSubFolders = True
'folgender Code wird nicht unbedingt gebraucht
If .Execute = 0 Then
MsgBox "Es wurden keine Dateien."
Exit Sub
End If
anzdatei = .FoundFiles.Count
End With

On Error Resume Next


For j = 1 To anzdatei
WordBasic.DisableAutoMacros 1
'If Err.Number <> 0 Then
Documents.Open fs.FoundFiles(j)

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
Selection.TypeText Text:=vbTab & vbTab & "Joël Walker"
Selection.TypeParagraph
Selection.TypeText Text:=vbTab & vbTab
Selection.InsertDateTime DateTimeFormat:="dddd, d. MMMM yyyy", _
InsertAsField:=True, DateLanguage:=wdSwissGerman, CalendarType:= _
wdCalendarWestern, InsertAsFullWidth:=False
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
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 = wdSeekCurrentPageFooter
Application.Templates( _
"C:\Users\bfo\AppData\Roaming\Microsoft\Document Building Blocks\1031\15\Built-In Building Blocks.dotx" _
).BuildingBlockEntries("Einfache Zahl 1").Insert Where:=Selection.Range, _
RichText:=True
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument

'Dokument wird gespeichert und geschlossen
ActiveDocument.Save
ActiveDocument.Close
'End If
Next j
WordBasic.DisableAutoMacros 0
MsgBox "Es wurden " & anzdatei & " Datei(en) neu gespeichert!"
End Sub

Ich würde mich sehr über Ihre Hilfe freuen.

Freundliche Grüsse und Besten Dank
Hanspeter92

Content-Key: 274003

Url: https://administrator.de/contentid/274003

Printed on: April 19, 2024 at 23:04 o'clock

Mitglied: 114757
114757 Jun 08, 2015 updated at 07:45:00 (UTC)
Goto Top
Moin Hanspeter92,
guckst du hier, dafür gibt es zwei weitere Möglichkeiten mit dem FileSystemObject oder der Funktion Dir()
Office 2010 Word Vorlage falsche Fusszeile

Gruß jodel32
Member: Hanspeter92
Hanspeter92 Jun 10, 2015 at 13:36:18 (UTC)
Goto Top
Ok vielen Dank! So klappt es!

Nun habe ich den Code noch etwas abgeändert:

Sub KopfFussZeile2()
'
' KopfFussZeile2 Makro
'
Const pathDocs = "D:\"
Const wdHeaderFooterEvenPages = 3
Const wdHeaderFooterFirstPage = 2
Const wdHeaderFooterPrimary = 1
Dim counter, strFailureDocs
counter = 0

Set fso = CreateObject("Scripting.FileSystemObject")
Set objWord = CreateObject("Word.Application")
'Wenn der Vorgang nicht sichtbar ausgeführt werden soll folgende Zeile auf 'False' setzen
objWord.Visible = True
objWord.DisplayAlerts = False
For Each file In fso.GetFolder(pathDocs).Files
If LCase(Right(file.Name, 4)) = "docx" Or LCase(Right(file.Name, 3)) = "doc" Or LCase(Right(file.Name, 3)) = "dot" Or LCase(Right(file.Name, 4)) = "dotx" Or LCase(Right(file.Name, 4)) = "dotm" Then

On Error Resume Next
'Öffne Dokument
Set doc = objWord.Documents.Open(file.Path)
If Err.Number = 0 Then
'Zähle bearbeitete Dokumente
counter = counter + 1
For Each Section In doc.Sections


'Setze den Inhalt der folgenden Fußzeilen gleich der Fußzeile der ersten Seite des Abschnitts
Section.Headers(wdHeaderFooterPrimary).Range.InsertDateTime DateTimeFormat:="dd.MM.yyyy", InsertAsField:=True, DateLanguage:=wdSwissGerman, CalendarType:=wdCalendarWestern

Section.Headers(wdHeaderFooterPrimary).Range.Text = vbTab & vbTab & "gewünschter Text "

Next

'Speichere und schließe Dokument
doc.Save
doc.Close True
Else
strFailureDocs = strFailureDocs & file.Path & vbNewLine
Err.Clear
End If
End If
Next
objWord.DisplayAlerts = False
objWord.Quit True
MsgBox counter & " Dokumente bearbeitet!"
If strFailureDocs <> "" Then
MsgBox "Folgende Dokumente wurden wegen eines Fehlers beim Öffnen nicht bearbeitet: " & vbNewLine & strFailureDocs, vbExclamation
End If
End Sub


Nun wird das Datum aber nicht angezeigt, da der zweite Header-Eintrag dieses überschreibt. Gibt es eine Möglichkeit, damit beides angezeigt wird?