24.04.2020, 21:31 (Dieser Beitrag wurde zuletzt bearbeitet: 24.04.2020, 21:31 von Fennek.)
Hallo,
mein PC ist schon "down", deshalb ein ungetester Code: Lege ein leeres Workbook an mit dem Namen "wd_to_xl.xlsx", passe den Pfad an:
Code:
'im letzten Teil
With GetObject("c:\tmp\wd_to_xl.xlsx") For i = 1 To col.count .sheets(1).cells(i, 1) = col(i) Next i .Close 1 'schließen mit speichern End With
Teste es mal.
mfg
Der gesamte Code (ungetestet):
Code:
' in MS Word
Sub Zeilen_anzeigen() Dim Col As Collection: Set Col = New Collection Dim l As Line
With ActiveDocument.ActiveWindow
For p = 1 To .Panes(1).Pages.Count For r = 1 To .Panes(1).Pages(p).Rectangles.Count For i = 1 To .Panes(1).Pages(p).Rectangles(r).Lines.Count Set l = .Panes(1).Pages(p).Rectangles(r).Lines.Item(i) 'Debug.Print l.Range Col.Add l.Range Next i Next r Next p End With
'>>>>>> nach Excel <<<<<<<
With GetObject("c:\tmp\wd_to_xl.xlsx") For i = 1 To col.count .sheets(1).cells(i, 1) = col(i) Next i .Close 1 'schließen mit speichern End With Set Col = nothing End Sub
du brauchst das nicht in Word und Excel gesonders codieren, wenn du von Excel direkt auf Word zugreifen möchtest.
Dazu musst du im VBA-Projekt zunächst unter "Extras" -"Verweise" einbinden: "Microsoft Word XX.0 Object Library" (XX ist deine installierte Word-Version).
OptionExplicit Dim objWord As Word.Application
PublicSub WordTextEinlesen()
Dim wdDokument As Word.Document Dim strDokument AsString Dim p, r, i, l
' #### Hier deine Word-Datei anpassen! strDokument = "d:\Test.doc"
Set wdDokument = objWord.Documents.Open(strDokument) objWord.Visible = True
With wdDokument.ActiveWindow For p = 1To .Panes(1).Pages.Count For r = 1To .Panes(1).Pages(p).Rectangles.Count For i = 1To .Panes(1).Pages(p).Rectangles(r).Lines.Count Set l = .Panes(1).Pages(p).Rectangles(r).Lines.Item(i) 'Debug.Print "Zeile"; i; ": "; l.Range ' #### Hier deine Spalte (und ggf. Zeilenversatz) anpassen! ActiveSheet.Cells(i, 1) = l.Range Next i Next r Next p EndWith
wdDokument.Close False objWord.Quit Set objWord = Nothing
@LuckyJoe:Ich habe den Code in Excel VBA reingeschrieben (vorher auch Word eingebunden) und erhalte beim Ausführen des Makros folgende Fehlermeldung: "Fehler beim Kompilieren.: Ein benutzerdefinierter Typ ist nicht definiert.[color=rgba(0, 0, 0, 0.85)][color=rgba(0, 0, 0, 0.85)]"[/color][/color] Der Fehler bezieht sich auf die 2. Zeile des Codes "objWord As Word.Application".
@Fennek: Ich habe auch deine Variante probiert, bei mir wurde aber in Excel nicht mal ein Makro zum Ausführen angezeigt. Hat also irgendwie nicht geklappt …
' #### Hier deine Word-Datei anpassen! strDokument = "d:\Test.doc"
Set wdDokument = objWord.Documents.Open(strDokument) objWord.Visible = True
With wdDokument.ActiveWindow For p = 1 To .Panes(1).Pages.Count For r = 1 To .Panes(1).Pages(p).Rectangles.Count For i = 1 To .Panes(1).Pages(p).Rectangles(r).Lines.Count Set l = .Panes(1).Pages(p).Rectangles(r).Lines.Item(i) 'Debug.Print "Zeile"; i; ": "; l.Range ' #### Hier deine Spalte (und ggf. Zeilenversatz) anpassen! ActiveSheet.Cells(i, 1) = l.Range Next i Next r Next p End With
wdDokument.Close False objWord.Quit Set objWord = Nothing
- den Code in das Word-Document einfügen - die sichtbare Excel-Datei von Hand speichern
Code:
' Text anlegen: =lorem(25,3) ' Excel: Speichern von Hand
Sub Zeilen_anzeigen() Dim XL As Object, WB As Object Dim Col As Collection: Set Col = New Collection Dim l As Line
With ActiveDocument.ActiveWindow
For p = 1 To .Panes(1).Pages.Count For r = 1 To .Panes(1).Pages(p).Rectangles.Count For i = 1 To .Panes(1).Pages(p).Rectangles(r).Lines.Count Set l = .Panes(1).Pages(p).Rectangles(r).Lines.Item(i) 'Debug.Print l.Range Col.Add l.Range Next i Next r Next p End With
Set XL = CreateObject("Excel.Application") Set WB = XL.Workbooks.Add XL.Visible = True
For i = 1 To Col.Count WB.sheets(1).Cells(i, 1) = Col(i) Next i
Set Col = Nothing Set WB = Nothing Set XL = Nothing End Sub
27.04.2020, 10:37 (Dieser Beitrag wurde zuletzt bearbeitet: 27.04.2020, 10:51 von WillWissen.
Bearbeitungsgrund: Schriftgröße
)
@Fennek: Dann erhalte ich den Laufzeitfehler 438, das Objekt unterstützt diese Eigenschaft oder Methode nicht "Set WB = XL.Workbooks.Add"
@LuckJoe: Ich hatte den Code bereits kopiert und auch einmal komplett selbst geschrieben. Leider immer noch der Fehler, der sich auf die zweite Zeile des Codes bezieht: Fehler beim Kompilieren.: Ein benutzerdefinierter Typ ist nicht definiert
geh' mal im VBA-Projekt in der Menüzeile auf "Extras" - "Verweise" und kreuze dort an: "Microsoft Word xx.0 Object Library" (xx ist deine installierte Word-Version, die du dort angezeigt bekommst. Dann sollte es funktionieren.
Herzliche Grüße aus dem Rheinland Jörg
[Windows 10, Microsoft 365]
Folgende(r) 1 Nutzer sagt Danke an LuckyJoe für diesen Beitrag:1 Nutzer sagt Danke an LuckyJoe für diesen Beitrag 28 • marylalou
hier ein reiner Excel-Code passend zu deiner hochgeladenen Datei:
Code:
Const ll As Long = 40 'max Länge der Zeile Sub T_1() Dim Tx As String
Tx = Cells(1, 1) rr = 10 p = 1 Do p_alt = p p = InStr(p_alt + 1, Tx, " ") If p > ll Then Cells(rr, 1) = Trim(Left(Tx, p_alt)) Tx = Trim(Mid(Tx, p_alt)) rr = rr + 1 p = 1 End If Loop Until p = 0 Cells(rr, 1) = Trim(Tx) Beep End Sub
mfg
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28 • marylalou
@LuckyJoe: Leider trat wieder ein anderer Fehler auf @Fennek: Ich habe einfach mal deine Datei benutzt und siehe da, es klappt hervorragend!! Habe es auch schon mit einem längeren Text ausprobiert! Super, vielen Dank für all eure Hilfe!