Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Word-Datei zeilenweise einlesen und speichern

Word-Datei zeilenweise einlesen und speichern
12.08.2017 15:42:52
Dre
Hallo leibe VBA-Community,
ich versuche seit Tage folgende Aufgabe zu lösen:
Eine Word-Datei soll zeilenweise eingelesen werden, dabei wäre es cool, wenn die Zeileninhalte in ein String-Array (aber alternativ auch in Zellen einer Excel-Tabelle, Zeile pro Zelle) gespeichert werden.
Vielen Dank im Voraus für Eure Hilfe!
Viele Grüße,
Dre
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Word-Datei zeilenweise einlesen und speichern
12.08.2017 16:24:09
Sepp
Hallo Dre,
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub inputWordFile()
Dim strFile As String, lngI As Long, objWord As Object, strText() As String, strTmp As String

With Application.FileDialog(msoFileDialogFilePicker)
  .InitialFileName = "C:\"
  .Title = "Datei auswählen"
  .ButtonName = "Auswahl..."
  .InitialView = msoFileDialogViewList
  .Filters.Clear
  .Filters.Add "Word Dateien", "*.doc; *.doc*", 1
  .FilterIndex = 1
  If .Show = -1 Then strFile = .SelectedItems(1)
End With

If Len(strFile) Then
  Set objWord = CreateObject("Word.Application")
  
  With objWord
    .Visible = False
    .Documents.Open strFile, , True
    .WordBasic.EditSelectAll
    .WordBasic.SetDocumentVar "MyVar", .WordBasic.Selection
    strTmp = .WordBasic.GetDocumentVar("MyVar")
    .Documents.Close (0)
    .Quit
  End With
  
  strText = Split(strTmp, vbCr)
  
  'Der Text befindet sich nun im Array strText
  
  'Ausgabe in Zellen
  Sheets("Tabelle1").Range("A1").Resize(UBound(strText) + 1, 1) = Application.Transpose(strText)
End If


Set objWord = Nothing
End Sub

Gruß Sepp

Anzeige
AW: Word-Datei zeilenweise einlesen und speichern
12.08.2017 16:54:21
Luschi
Hallo Sepp,
beim Testen Deines Tipps mit Word 2016 kommt hier ein Fehler:
.Documents.Open strFile, , True
Deshalb habe ich eine kleine Änderung eingebaut:

Sub inputWordFile()
Dim objWord As Object, objDoc As Object
Dim strFile As String, lngI As Long, strText() As String, strTmp As String
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "F:\Daten\Downloads\"
.Title = "Datei auswählen"
.ButtonName = "Auswahl..."
.InitialView = msoFileDialogViewList
.Filters.Clear
.Filters.Add "Word Dateien", "*.doc; *.doc*", 1
.FilterIndex = 1
If .Show = -1 Then strFile = .SelectedItems(1)
End With
If Len(strFile) Then
Set objWord = CreateObject("Word.Application")
With objWord
.Visible = False
''Worddatei schreiabgeschützt öffnen
''statt
''.Documents.Open strFile, , True
Set objDoc = .Documents.Open(strFile, , True)
.WordBasic.EditSelectAll
.WordBasic.SetDocumentVar "MyVar", .WordBasic.Selection
strTmp = .WordBasic.GetDocumentVar("MyVar")
'Fehler 4605 - Befehl im Lesemodus nicht verfügbar
'.Documents.Close (0)
objDoc.Close False
.Quit
End With
strText = Split(strTmp, vbCr)
'Der Text befindet sich nun im Array strText
'Ausgabe in Zellen
Sheets("Tabelle1").Range("A1").Resize(UBound(strText) + 1, 1) = Application.Transpose( _
strText)
End If
Set objWord = Nothing: Set objDoc = Nothing
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Word-Datei zeilenweise einlesen und speichern
12.08.2017 16:59:53
Sepp
Hallo Luschi,
komisch, bei mir (ebenfalls Office 2016) läuft es ohne Probleme.
Gruß Sepp

AW: Word-Datei zeilenweise einlesen und speichern
12.08.2017 17:08:32
Luschi
Hallo Sepp,
finde ich auch komisch, hoffentlich liegt es nicht an der verwendeten Windows-Version!
Userbild
Gruß von Luschi
aus klein-Paris
Anzeige
Neue Version
12.08.2017 17:58:40
Sepp
Hallo Luschi,
diese Version sollte auf allen Versionen laufen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub inputWordFile()
Dim strFile As String, strText() As String, strTmp As String

With Application.FileDialog(msoFileDialogFilePicker)
  .InitialFileName = "C:\"
  .Title = "Datei auswählen"
  .ButtonName = "Auswahl..."
  .InitialView = msoFileDialogViewList
  .Filters.Clear
  .Filters.Add "Word Dateien", "*.doc; *.doc*", 1
  .FilterIndex = 1
  If .Show = -1 Then strFile = .SelectedItems(1)
End With

If Len(strFile) Then
  strTmp = getWordDocText(strFile)
  
  strText = Split(strTmp, vbCr)
  
  'Der Text befindet sich nun im Array strText
  
  'Ausgabe in Zellen
  Sheets("Tabelle1").Range("A1").Resize(UBound(strText) + 1, 1) = Application.Transpose(strText)
End If

End Sub

Private Function getWordDocText(ByVal FileName As String, Optional includeHeader As Boolean = False, Optional includeFooter As Boolean = False) As String
Dim objWord As Object, objDoc As Object
Dim strHeader As String, strFooter As String, strContent As String

Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Open(FileName)

strHeader = objDoc.Sections(1).Headers(1).Range.Text

strFooter = objDoc.Sections(1).Footers(1).Range.Text

strContent = objDoc.Content

If includeHeader Then strContent = strHeader & vbNewLine & strContent
If includeFooter Then strContent = strContent & vbNewLine & strFooter

getWordDocText = strContent

objDoc.Close
objWord.Quit
Set objDoc = Nothing
Set objWord = Nothing
End Function

Gruß Sepp

Anzeige
AW: Neue Version
12.08.2017 19:07:38
Luschi
Hallo Sepp,
in Word 2013/16 läuft Deine neue Version bestens.
Gruß von Luschi
aus klein-Paris
Anzeige
Anzeige

Infobox / Tutorial

Word-Datei zeilenweise einlesen und speichern


Schritt-für-Schritt-Anleitung

Um eine Word-Datei zeilenweise einzulesen und die Inhalte in eine Excel-Tabelle zu speichern, kannst Du den folgenden VBA-Code verwenden. Dieser Code öffnet eine Datei-Auswahlbox, in der Du eine .doc-Datei auswählen kannst. Der Text wird dann zeilenweise in ein String-Array gespeichert und in die Zellen von Excel übertragen.

Sub inputWordFile()
    Dim strFile As String
    Dim strText() As String
    Dim strTmp As String
    Dim objWord As Object
    Dim objDoc As Object

    With Application.FileDialog(msoFileDialogFilePicker)
        .InitialFileName = "C:\"
        .Title = "Datei auswählen"
        .Filters.Clear
        .Filters.Add "Word Dateien", "*.doc; *.doc*", 1
        If .Show = -1 Then strFile = .SelectedItems(1)
    End With

    If Len(strFile) Then
        Set objWord = CreateObject("Word.Application")
        Set objDoc = objWord.Documents.Open(strFile)
        strTmp = objDoc.Content.Text
        objDoc.Close False
        objWord.Quit

        strText = Split(strTmp, vbCr)
        Sheets("Tabelle1").Range("A1").Resize(UBound(strText) + 1, 1) = Application.Transpose(strText)
    End If

    Set objWord = Nothing
    Set objDoc = Nothing
End Sub

Häufige Fehler und Lösungen

  1. Fehler beim Öffnen der Word-Datei: Wenn Du die Fehlermeldung "Fehler 4605 - Befehl im Lesemodus nicht verfügbar" erhältst, stelle sicher, dass Du die Datei nicht schreibgeschützt öffnest. Nutze die Zeile Set objDoc = .Documents.Open(strFile, , True) statt Documents.Open strFile, , True.

  2. Leere Zellen in Excel: Wenn nach dem Ausführen des Codes keine Daten in Excel erscheinen, überprüfe, ob die Word-Datei tatsächlich Inhalte hat und dass der richtige Dateityp ausgewählt wurde.


Alternative Methoden

Eine alternative Methode, um eine Word-Datei zeilenweise zu lesen, besteht darin, den Text in eine Textdatei zu exportieren, bevor Du ihn in Excel importierst. Hierfür kannst Du die Funktion Open und Input verwenden, um eine .txt-Datei zeilenweise einzulesen.

Sub readTextFile()
    Dim FilePath As String
    Dim FileContent As String
    Dim strText() As String
    Dim i As Long

    FilePath = "C:\DeineDatei.txt"
    Open FilePath For Input As #1
    Do While Not EOF(1)
        Line Input #1, FileContent
        strText = Split(FileContent, vbCr)
    Loop
    Close #1

    Sheets("Tabelle1").Range("A1").Resize(UBound(strText) + 1, 1) = Application.Transpose(strText)
End Sub

Praktische Beispiele

Wenn Du den obigen VBA-Code in einer Excel-Datei ausführst, wird der gesamte Text aus der Word-Datei in die erste Spalte von "Tabelle1" eingefügt, je Zeile eine Zelle. Dies ist besonders nützlich, um große Textmengen zu analysieren oder zu bearbeiten.

Beispiel: Wenn die Word-Datei Folgendes enthält:

Zeile 1
Zeile 2
Zeile 3

Wird die Excel-Tabelle so aussehen:

A1: Zeile 1
A2: Zeile 2
A3: Zeile 3

Tipps für Profis

  • Fehlermeldungen vermeiden: Verwende On Error Resume Next, um unerwünschte Fehlermeldungen zu umgehen, wenn Du mit Word-Dokumenten arbeitest.
  • Dokumente im Lesemodus: Wenn Du nur lesen und nicht bearbeiten möchtest, öffne die Dokumente im Lesemodus, um die Performance zu verbessern.
  • Benutzerdefinierte Filter: Erstelle spezifische Filter für deine Word-Dateien, um sicherzustellen, dass nur die benötigten Dokumente angezeigt werden.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Word-Datei korrekt ausgewählt wurde?
Du kannst den Code so erweitern, dass er eine Benachrichtigung anzeigt, wenn die Datei nicht gefunden oder nicht geöffnet werden kann.

2. Funktioniert das Skript auch in älteren Versionen von Excel?
Ja, der VBA-Code sollte auch in älteren Versionen von Excel funktionieren, solange die grundlegenden VBA-Funktionen verfügbar sind. Achte darauf, dass Du die richtige Version von Word verwendest.

3. Kann ich auch andere Dateiformate einlesen?
Ja, Du kannst den Code anpassen, um auch andere Formate wie .txt oder .csv einzulesen, indem Du die entsprechenden Filter und Methoden anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige