Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel VBA Word Kopfzeile auslesen

Excel VBA Word Kopfzeile auslesen
14.04.2016 22:56:28
Björn
Hallo Leute,
ich verzweifel gerade daran aus einer Worddatei die Kopfzeilen auszulesen.
Egal was ich ausprobiere bekomme ich Fehler.
Ich lese in Excel eine Worddatei ein und kopiere die Sections der Worddatei in einzelne Tabellenblätter in Excel. Das klappt auch alles.
Nun haben aber die einzelnen Sections in der Worddatei Kopfzeilen in denen die Beschreibung der Section steht. Jetzt würde ich gerne die Kopfzeile auslesen und den Namen des Tabellenblattes mit dem Namen in der Kopfzeile ersetzen. Also in der Kopfzeile steht "Daten 1" dann soll das zugehörige Tabellenblatt "Daten 1" heissen.
Sub WordtoExcel()
'---------------------------------------------------------------- Deklarationen
Dim Worddatei As Object
Dim stringtoFile As String
Dim anzahlSections As Integer
Dim section As Integer
'---------------------------------------------------------------- doc Datei öffnen
stringtoFile = Application.GetOpenFilename("Word Dateien (*.doc),*.doc")
If stringtoFile = "Falsch" Then
MsgBox "Falscher Dateityp"
Exit Sub
End If
'---------------------------------------------------------------- benötigte Tabellenblätter  _
erstellen
Set Worddatei = GetObject(stringtoFile)
anzahlSections = Worddatei.Sections.Count
For i = 1 To (anzahlSections - 1)
Sheets.Add After:=ActiveSheet
Next i
Set Worddatei = Nothing
'---------------------------------------------------------------- Sections auslesen und in  _
Tabelle einfügen
For section = 1 To anzahlSections
Set Worddatei = GetObject(stringtoFile)
With Worddatei
.Sections(section).Range.Copy
Sheets(section).Select
Sheets(section).Range("A1").Activate
Sheets(section).Paste
.Close False
End With
Set Worddatei = Nothing
Next section
Set Worddatei = Nothing
End Sub
Das ist mein aktueller Code welcher auch gut funktioniert jedoch noch nicht die Tabellenblätter umbenennt sondern nur die Sections in einzelne Tabellenblätter packt.
Ich hoffe Ihr könnt mir helfen.
Zusatz:
Die Kopfzeile besteht aus einem Textblock in welchem die Informationen stehen. Also "Daten 1" steht innerhalb eines Textblockes.
LG
Björn

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA Word Kopfzeile auslesen
16.04.2016 07:06:55
fcs
Hallo Björn,
ich hab dir mal eine entsprechende Makrofunktion eingefügt.
Da die umbenennung von Tabellenblättern auch Fehler verursachen kan, hab ich dafür auch eine komplette Prüfung eingefügt. Da kannst du ggf. noch Anpassungen machen für zu lange Namen oder die Ersetzung von unzulässigen Zeichen.
Gruß
Franz
Sub WordtoExcel()
'---------------------------------------------------------------- Deklarationen
Dim Worddatei As Object
Dim stringtoFile As String
Dim anzahlSections As Integer, i As Integer
Dim section As Integer
Dim strName As String
Dim objWdApp As Object
'---------------------------------------------------------------- doc Datei öffnen
stringtoFile = Application.GetOpenFilename("Word Dateien (*.doc),*.doc")
If stringtoFile = "Falsch" Then
MsgBox "Falscher Dateityp"
Exit Sub
End If
'---------------------------------------------------------------- benötigte Tabellenblätter _
erstellen
Set Worddatei = GetObject(stringtoFile)
Set objWdApp = Worddatei.Application
objWdApp.Visible = True                             'zum Testen später auf False setzen
anzahlSections = Worddatei.Sections.Count
For i = 1 To (anzahlSections - 1)
Sheets.Add After:=ActiveSheet
Next i
'---------------------------------------------------------------- Sections auslesen und in _
Tabelle einfügen
With Worddatei
For section = 1 To anzahlSections
strName = fncGetText_fromTextbox_in_Header(objWdSection:=.Sections(section))
.Sections(section).Range.Copy
Sheets(section).Select
Sheets(section).Range("A1").Activate
Sheets(section).Paste
Call fncSheetRename(objSheet:=Sheets(section), sNewName:=strName, _
strReplace:=" ", bolMsg:=True) 'Parameter bolMsg auf False setzen wenn _
alles funktioniert
Next section
.Close False
End With
objWdApp.Quit
Set Worddatei = Nothing
End Sub
Function fncGetText_fromHeader(objWdSection As Object) As String
'In Worddokument den Text in Kopzeile des Abschnitts auslesen
'objWdSection = Word.Section
Dim objWdHeader As Object 'Word.HeaderFooter
Set objWdHeader = objWdSection.Headers(1) ' 1 = wdHeaderFooterPrimary
fncGetText_fromHeader = objWdHeader.Range.Text
Set objWdHeader = Nothing
End Function
Function fncGetText_fromTextbox_in_Header(objWdSection As Object, _
Optional iItem As Integer = 1) As String
'In Worddokument den Text aus Shape in Kopfzeile auslesen
Dim objWdShape As Object 'Word.Shape
Dim objWdHeader As Object 'Word.HeaderFooter
Set objWdHeader = objWdSection.Headers(1) ' 1 = wdHeaderFooterPrimary
Set objWdShape = objWdHeader.Range.ShapeRange.Item(iItem)
fncGetText_fromTextbox_in_Header = objWdShape.TextFrame.TextRange.Text
MsgBox "Textbox in Kopfzeile Abschnitt " & objWdSection.Index & ": " _
& fncGetText_fromTextbox_in_Header   'testzeile
Set objWdHeader = Nothing
End Function
Public Function fncSheetRename(objSheet As Object, ByVal sNewName As String, _
Optional ByVal strReplace As String, _
Optional bolMsg As Boolean = False) As Boolean
Dim wkb As Workbook
Dim msgText As String, msgTitel As String
Dim objItem As Object
msgTitel = "B L A T T   U M B E N E N N E N"
Set wkb = objSheet.Parent
'überzählige Leerzeichen am Anfag/Ende entfernen
sNewName = Trim(sNewName)
'Prüfung auf Leerstring
If Len(Trim(sNewName)) = 0 Then
fncSheetRename = False
msgText = "Leerstring bzw. nur Leerzeichen(Blamks) sind nicht zulässig als Blattnamen"  _
_
& vbLf & "Blatt wird nicht umbenannt"
If bolMsg Then
MsgBox msgText, vbOKOnly, msgTitel
End If
GoTo Beenden
End If
'Prüfung auf länge Blattname
If Len(sNewName) > 31 Then
fncSheetRename = False
If bolMsg Then
msgText = "Der neue Blattname hat mehr als 31 Zeichen" _
& vbLf & "Blatt wird nicht umbenannt"
MsgBox msgText, vbOKOnly, msgTitel
End If
GoTo Beenden
End If
'Prüfung ob Blatt schon vorhanden
If fncSheetExists(sNewName, wkb) = True Then
fncSheetRename = False
If bolMsg Then
msgText = "Der neue Blattname ist schon vorhanden" _
& vbLf & "Blatt wird nicht umbenannt"
MsgBox msgText, vbOKOnly, msgTitel
End If
GoTo Beenden
End If
'Prüfung ob unzulässige/unerwünschte Zeichen im Blattnamen
If fncSheetZeichen(sNewName, varUnerwuenscht:=Array(""""), strReplace:=" ") = True Then
fncSheetRename = False
If bolMsg Then
msgText = "Der neue Blattname enthält unzuässige ('\ / : * ?) oder unerwünschte  _
Zeichen" _
& vbLf & "Blatt wird nicht umbenannt"
MsgBox msgText, vbOKOnly, msgTitel
End If
GoTo Beenden
End If
objSheet.Name = sNewName
Beenden:
End Function
Public Function fncSheetExists(ByVal sSheetname As String, Optional wkb As Workbook) As Boolean
On Error GoTo Beenden
Dim objSheet As Object
If wkb Is Nothing Then Set wkb = ActiveWorkbook
Set objSheet = wkb.Sheets(sSheetname)
fncSheetExists = True
Beenden:
End Function
Public Function fncSheetZeichen(ByVal strName As String, Optional varUnerwuenscht, _
Optional ByVal strReplace As String)
Dim arrUnzulaessig As Variant, intZ As Integer
'unzulässige Zeichen in Blattnamen - Hochkomma ist als 1. Zeichen unzulässig
arrUnzulaessig = Array("'", "[", "/", "\", ":", "*", "?", "]")
fncSheetZeichen = False
For intZ = LBound(arrUnzulaessig) To UBound(arrUnzulaessig)
If InStr(1, strName, arrUnzulaessig(intZ)) > 0 Then
fncSheetZeichen = True
If strReplace  "" Then strName = VBA.Replace(strName, arrUnzulaessig(intZ),  _
strReplace)
End If
Next
If Not IsMissing(varUnerwuenscht) Then
For intZ = LBound(varUnerwuenscht) To UBound(varUnerwuenscht)
If InStr(1, strName, varUnerwuenscht(intZ)) > 0 Then
fncSheetZeichen = True
If strReplace  "" Then strName = VBA.Replace(strName, varUnerwuenscht(intZ),  _
strReplace)
End If
Next
End If
If strReplace  "" Then fncSheetZeichen = False
End Function

Anzeige
AW: Excel VBA Word Kopfzeile auslesen
16.04.2016 09:45:47
Björn
Hey Franz,
VIELEN DANK ! =) das Makro funktioniert super und macht genau das was es soll. Ich finde es auch Klasse das dort Kommentare drin stehen - denn als VBA Neuling ist es manchmal schwer den Code ohne Kommentare zu verstehen.
LG
Björn
;
Anzeige
Anzeige

Infobox / Tutorial

Kopfzeilen aus Word in Excel auslesen und umbenennen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues Arbeitsblatt.

  2. Füge den folgenden VBA-Code ein:

    Sub WordtoExcel()
       ' Deklarationen
       Dim Worddatei As Object
       Dim stringtoFile As String
       Dim anzahlSections As Integer, i As Integer
       Dim section As Integer
       Dim strName As String
       Dim objWdApp As Object
    
       ' Word Datei öffnen
       stringtoFile = Application.GetOpenFilename("Word Dateien (*.doc),*.doc")
       If stringtoFile = "Falsch" Then
           MsgBox "Falscher Dateityp"
           Exit Sub
       End If
    
       ' benötigte Tabellenblätter erstellen
       Set Worddatei = GetObject(stringtoFile)
       Set objWdApp = Worddatei.Application
       objWdApp.Visible = True
       anzahlSections = Worddatei.Sections.Count
       For i = 1 To (anzahlSections - 1)
           Sheets.Add After:=ActiveSheet
       Next i
    
       ' Sections auslesen und in Tabelle einfügen
       With Worddatei
           For section = 1 To anzahlSections
               strName = fncGetText_fromTextbox_in_Header(objWdSection:=.Sections(section))
               .Sections(section).Range.Copy
               Sheets(section).Select
               Sheets(section).Range("A1").Activate
               Sheets(section).Paste
               Call fncSheetRename(objSheet:=Sheets(section), sNewName:=strName, strReplace:=" ", bolMsg:=True)
           Next section
           .Close False
       End With
       objWdApp.Quit
       Set Worddatei = Nothing
    End Sub
  3. Füge die erforderlichen Hilfsfunktionen für das Auslesen der Kopfzeile hinzu. Achte darauf, dass die Funktionen fncGetText_fromHeader, fncGetText_fromTextbox_in_Header und andere im gleichen Modul sind.

  4. Führe das Makro aus, um die Kopfzeilen von Word in Excel zu kopieren und die Tabellenblätter entsprechend zu benennen.


Häufige Fehler und Lösungen

  • Fehler: Falscher Dateityp

    • Lösung: Stelle sicher, dass die ausgewählte Datei eine Word-Datei im .doc-Format ist.
  • Fehler: Blattnamen zu lang oder ungültige Zeichen

    • Lösung: Überprüfe den Namen in der Kopfzeile. Blattnamen dürfen maximal 31 Zeichen lang sein und dürfen keine der folgenden Zeichen enthalten: \ / : * ? " [ ].
  • Fehler: Word-Anwendung startet nicht

    • Lösung: Stelle sicher, dass Microsoft Word korrekt installiert und konfiguriert ist.

Alternative Methoden

Falls du die Kopfzeile in Word manuell entfernen möchtest, kannst du dies über die Word-Oberfläche tun:

  1. Öffne das Word-Dokument.
  2. Klicke auf die Registerkarte "Einfügen".
  3. Wähle "Kopfzeile" und bearbeite oder entferne die Kopfzeile.

Für das Kopieren von Kopfzeilen in Excel kannst du auch die Funktion "Daten abrufen" verwenden, um Inhalte aus Word zu importieren.


Praktische Beispiele

Ein einfaches Beispiel für die Verwendung des Makros:

Wenn in der Kopfzeile der Word-Datei "Daten 1" steht, wird das entsprechende Tabellenblatt in Excel automatisch in "Daten 1" umbenannt. Achte darauf, dass der Text in der Kopfzeile korrekt formatiert ist, um Fehler zu vermeiden.


Tipps für Profis

  • Verwende Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler durch Tippfehler zu vermeiden.

  • Teste das Makro in einer Kopie deiner Excel-Datei, um sicherzustellen, dass keine Daten verloren gehen.

  • Nutze Kommentare im Code, um die Funktionalität zu erklären. Dies ist besonders hilfreich für zukünftige Anpassungen.


FAQ: Häufige Fragen

1. Wie kann ich die Kopfzeile bei Word entfernen? Um die Kopfzeile in Word zu entfernen, gehe zu "Einfügen" > "Kopfzeile" und wähle "Kopfzeile entfernen".

2. Kann ich Kopfzeilen von Word in Excel kopieren? Ja, mit dem oben beschriebenen VBA-Makro kannst du die Kopfzeilen von Word in Excel kopieren und gleichzeitig die entsprechenden Tabellenblätter umbenennen.

3. Was passiert, wenn die Kopfzeile leer ist? Wenn die Kopfzeile leer ist, wird das Tabellenblatt nicht umbenannt und behält den Standardnamen bei. Achte darauf, dass du in deinem Code eine Überprüfung für leere Kopfzeilen einbaust.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige