der mir zu diesem Thema helfen konnte!
Das VBA-Programm kann schon fast das, was es soll! Super!
Vielen Dank nochmal!
lg roman
'Erstellt unter MS Office 2010
'Code in einem allgemeinen VBA-Modul der Exceldatei
Sub Hole_Wordtexte()
Dim strFileName As String
Dim objWDApp As Object 'Word.Application
Dim objDoc As Object 'Word.Document
Dim wdRange As Object ' Word.Range
Dim wks As Worksheet
Dim strText As String
Dim letztezeile
Dim varVerzeichnis
'On Error Resume Next
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Verzeichnis mit den Worddateien auswählen"
If .Show = -1 Then
varVerzeichnis = .SelectedItems(1)
Else
GoTo Beenden
End If
End With
Set wks = ActiveSheet
With wks
letztezeile = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
strFileName = Dir(varVerzeichnis & "\" & "*.doc")
If strFileName "" Then
Set objWDApp = CreateObject("Word.Application")
objWDApp.Visible = True
Else
MsgBox "Keine Worddateien im gewählten Verzeichnis"
GoTo Beenden
End If
Do Until strFileName = ""
'Worddatei schreibgeschützt öffnen
Set objDoc = objWDApp.Documents.Open(varVerzeichnis & "\" & strFileName, _
ReadOnly:=True)
'nächste freie Zeile Zeile in Excelblatt in Spalte B
With wks
letztezeile = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
'Worddateiname
.Cells(letztezeile, 1) = objDoc.Name
'Text aus 3. Absatz/Paragraph übernehmen
Set wdRange = objDoc.Paragraphs(3).Range
strText = wdRange.Text
'Projekt-Nummer / Name
'Ort abtrennen
strText = Trim(Left(strText, InStrRev(strText, "-") - 1))
'"Projektnummer:" abschneiden
strText = Trim(Mid(strText, Len("Projektnummer:") + 1))
.Cells(letztezeile, 2) = "'" & Trim(Left(strText, InStrRev(strText, "-") - 1)) 'Projekt- _
Nr
.Cells(letztezeile, 3) = "'" & Trim(Mid(strText, InStrRev(strText, "-") + 1)) 'Proj.-Name
'Text aus 4. Absatz/Paragraph übernehmen
Set wdRange = objDoc.Paragraphs(4).Range
strText = wdRange.Text
'"Adresse:" abschneiden
strText = Trim(Mid(strText, Len("Adresse:") + 1))
.Cells(letztezeile, 4) = "'" & Trim(Left(strText, InStr(strText, ", ") - 1)) 'Strasse
'Strasse abtrennen
strText = Trim(Mid(strText, InStr(strText, ", ") + 2))
.Cells(letztezeile, 5) = "'" & Mid(strText, 1, InStr(strText, " ") - 1) 'PLZ
.Cells(letztezeile, 6) = "'" & Mid(strText, InStr(strText, " ") + 1) 'Ort
End With 'wks
'Worddatei wieder schliessen
objDoc.Close savechanges:=False
strFileName = Dir
Loop
'Word-Anwendung beenden
objWDApp.Quit
Beenden:
End Sub
Um bestimmte Zeilen aus einer Word-Datei zu lesen und diese Daten in Excel zu übertragen, kannst du folgendes VBA-Makro verwenden. Dieses Beispiel wurde für Excel 2010 erstellt:
Öffne Excel und gehe zu den Entwicklertools. Falls die Entwicklertools nicht sichtbar sind, aktiviere sie in den Excel-Optionen.
Erstelle ein neues Modul:
Kopiere den folgenden VBA-Code in das Modul:
Sub Hole_Wordtexte()
Dim strFileName As String
Dim objWDApp As Object 'Word.Application
Dim objDoc As Object 'Word.Document
Dim wdRange As Object ' Word.Range
Dim wks As Worksheet
Dim strText As String
Dim letztezeile
Dim varVerzeichnis
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Verzeichnis mit den Worddateien auswählen"
If .Show = -1 Then
varVerzeichnis = .SelectedItems(1)
Else
Exit Sub
End If
End With
Set wks = ActiveSheet
With wks
letztezeile = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
strFileName = Dir(varVerzeichnis & "\" & "*.doc")
If strFileName <> "" Then
Set objWDApp = CreateObject("Word.Application")
objWDApp.Visible = True
Else
MsgBox "Keine Worddateien im gewählten Verzeichnis"
Exit Sub
End If
Do Until strFileName = ""
Set objDoc = objWDApp.Documents.Open(varVerzeichnis & "\" & strFileName, ReadOnly:=True)
With wks
letztezeile = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
.Cells(letztezeile, 1) = objDoc.Name
'Text aus 3. Absatz/Paragraph übernehmen
Set wdRange = objDoc.Paragraphs(3).Range
strText = wdRange.Text
strText = Trim(Left(strText, InStrRev(strText, "-") - 1))
strText = Trim(Mid(strText, Len("Projektnummer:") + 1))
.Cells(letztezeile, 2) = "'" & Trim(Left(strText, InStrRev(strText, "-") - 1))
.Cells(letztezeile, 3) = "'" & Trim(Mid(strText, InStrRev(strText, "-") + 1))
'Text aus 4. Absatz/Paragraph übernehmen
Set wdRange = objDoc.Paragraphs(4).Range
strText = wdRange.Text
strText = Trim(Mid(strText, Len("Adresse:") + 1))
.Cells(letztezeile, 4) = "'" & Trim(Left(strText, InStr(strText, ", ") - 1))
strText = Trim(Mid(strText, InStr(strText, ", ") + 2))
.Cells(letztezeile, 5) = "'" & Mid(strText, 1, InStr(strText, " ") - 1)
.Cells(letztezeile, 6) = "'" & Mid(strText, InStr(strText, " ") + 1)
End With
objDoc.Close savechanges:=False
strFileName = Dir
Loop
objWDApp.Quit
End Sub
Führe das Makro aus:
F5 oder gehe zu „Run“ > „Run Sub/UserForm“.Fehler: Keine Worddateien im gewählten Verzeichnis
Fehler: Makro funktioniert nicht
Fehler: Falsche Daten in Excel
Wenn du keine VBA-Programmierung verwenden möchtest, kannst du auch die Funktion „Daten abrufen“ in Excel verwenden, um aus einer Word-Datei zu importieren. Diese Methode ist jedoch weniger flexibel, da sie nicht spezifisch für bestimmte Absätze ist.
Angenommen, deine Word-Datei enthält folgende Absätze:
(3. Absatz)
Projektnummer: PE 01-02 - Beispielprojekt
(4. Absatz)
Adresse: Musterstraße 1, 12345 Musterstadt
Nach Ausführung des Makros werden diese Informationen in folgende Spalten in Excel übertragen:
| Dateiname | Projektnummer | Name | Straße | PLZ | Ort |
|---|---|---|---|---|---|
| beispiel.docx | PE 01-02 | Beispielprojekt | Musterstraße 1 | 12345 | Musterstadt |
Automatisiere die Ausführung: Du kannst das Makro so anpassen, dass es beim Öffnen der Excel-Datei automatisch ausgeführt wird.
Fehlerbehandlung einbauen: Verwende On Error Resume Next, um Fehler zu ignorieren und die Ausführung fortzusetzen, ohne dass Excel abstürzt.
Überprüfe die Zeilenanzeige in Word: Achte darauf, dass die Absätze in Word korrekt formatiert sind, um die gewünschten Zeilen auszulesen.
1. Wie kann ich das Makro anpassen, um mehr Absätze auszulesen?
Du kannst die Zeilen im VBA-Code entsprechend anpassen, indem du beispielsweise objDoc.Paragraphs(5).Range für den 5. Absatz verwendest.
2. Funktioniert das Makro in Excel 365? Ja, das Makro sollte auch in Excel 365 funktionieren, solange du die entsprechenden Berechtigungen für Makros hast. Achte darauf, dass die Referenzen zu Word im VBA-Editor gesetzt sind.