Quick and Dirty:
Option Explicit
Sub main()
Dim v As Variant
With CreateObject(class:="Word.Application")
v = fGetTable(.Documents.Open("C:\Test\Word\Microsoft Word Document (neu).docx"))
.Quit
End With
Range("A1").Resize(UBound(v, 1), UBound(v, 2)).Value = v
End Sub
Function fGetTable(ByRef wdDoc As Object) As Variant
Dim tbl As Object 'Word.Table
Dim rw As Object 'Word.Row
Dim c As Object 'Word.Cell
Dim arr() As Variant
Dim i As Long 'outer counter
Dim ii As Long 'inner "-----"
With wdDoc.Tables(1)
ReDim arr(1 To .Rows.Count, 1 To (.Rows(1).Cells.Count))
End With
i = 0: ii = 0
For Each tbl In wdDoc.Tables
For Each rw In tbl.Rows: i = i + 1
For Each c In rw.Cells: ii = ii + 1
arr(i, ii) = c.Range.Text
Next
ii = 0
Next
Next
'*** ret
fGetTable = arr
End Function
Der Code gehört in ein allgemeines Modul in Excel.
Er erzeugt eine Word Instanz und greifft direkt auf die erste Tabelle zu.
Durchläuft alle Zeilen - je zeile, alle Zellen und merkt sich deren Inhalt in einem zweidimensionalen Array.
Dieses ist geschickt, um in einem Rutsch in Excel, zusammenhängend, ab einer definierten Stelle in Zellen zu schreiben.
Achte auf die Kommentare. Somit kannste Du schnell von Late auf Early-Binding umstellen, sofern du die Intellisense verwenden möchtest.
Aber denk dran, den Verweis über Extras auch ordentlich zu setzen.
Keine Fehlerbehandlung
Wenn der Pfad nicht angepasst wird ...
Das Dokument keine Tabelle besitzt ...
usw ... dann krachts im Gebälk :)
|