Excel-VBA: Word-Objekte 'ausbetten'

Hallo,

ich habe eine große Exceldatei erhalten.
In dieser sind 87 Tabellenblätter, welche im Ausdruck über 200 Seiten ergeben.

Neben normal genutzten Tabellenblättern enthalten viele Seiten Textseiten aus Word, wobei jede Seite als einzelnes Objekt eingebettet worden ist (bei Doppelklick öffnet sich Word). Auf den einzelnen Tabellenblättern befinden sich jeweils eine unbestimmte Anzahl von Word-Objekten.

Nun muss ich aus den Texten eine zusammenhängende Worddatei erstellen und diese bearbeiten.

Meine Grundidee war dazu alle Wordobjekte nacheinander auszulesen und in ein Worddokument zur Bearbeitung zu schieben.

Wie könnte man dieses „ausbetten“ realisieren?
Hat jemand Ideen?

gruss tester

Neben normal genutzten Tabellenblättern enthalten viele Seiten
Textseiten aus Word, wobei jede Seite als einzelnes Objekt
eingebettet worden ist (bei Doppelklick öffnet sich Word). Auf
den einzelnen Tabellenblättern befinden sich jeweils eine
unbestimmte Anzahl von Word-Objekten.
Nun muss ich aus den Texten eine zusammenhängende Worddatei
erstellen und diese bearbeiten.
Meine Grundidee war dazu alle Wordobjekte nacheinander
auszulesen und in ein Worddokument zur Bearbeitung zu
schieben.

Hi tester,
die Grundidee war Word zu starten mit leerem Blatt, alle eingebetteten Wordobjekte zu öffnen, sie im hauptdokument „anzuhängen“ und dann zu schliessen.
Ich kriege das aber nicht hin, da ich mich in Word nicht auskenne.
Zumindest ist jetzt das problem verlagert, jetzt stellt sich die Frag, wie erstelle ich aus vielen geöffneten Worddokumenten ein Worddokument.
Vielleicht hilft dir mein Code ein bisschen weiter. Sicher geht es auch ohne Sendkeys (das sowieso nicht funktiert*gg)

Option Explicit
Sub tt()
Dim n As Long, WdApp As Object
With ActiveSheet
Set WdApp = GetObject("", "Word.Application")
If WdApp Is Nothing Then Set WdApp = CreateObject("Word.Application")
WdApp.Visible = True
For n = 1 To ActiveSheet.OLEObjects.Count
 .OLEObjects(n).Verb Verb:=xlOpen
 '.OLEObjects(n).Object.Application.Visible = False
 .OLEObjects(n).Object.Application.ActiveDocument.SaveAs Filename:="C:\test\" & ActiveWorkbook.Name & .Name & n & ".doc"
 Application.Visible = True
 Application.SendKeys "^A", True
 Application.SendKeys "^C", True
 Application.SendKeys "^V", True
 '.OLEObjects(n).Object.Application.Quit
Next n
End With
'WdApp.Quit
End Sub

Gruß
Reinhard

Hi tester,
die Grundidee war Word zu starten mit leerem Blatt, alle
eingebetteten Wordobjekte zu öffnen, sie im hauptdokument
„anzuhängen“ und dann zu schliessen.
Ich kriege das aber nicht hin, da ich mich in Word nicht
auskenne.
Zumindest ist jetzt das problem verlagert, jetzt stellt sich
die Frag, wie erstelle ich aus vielen geöffneten
Worddokumenten ein Worddokument.
Vielleicht hilft dir mein Code ein bisschen weiter.

Hallo,

ja, der Code hilft mir sehr weiter. Ich hatte nämlich überhaupt keine Ahnung, wie man OLE-Objekt in Excel-VBA anspricht und an den Inhalt drankommt. Vielen Dank für den Musterprogrammcode.

Habe die Prozedur nach meine Zwecken angepasst.
Hier ist sie:

Sub meineVersion()
Dim Blatt As Worksheet
Dim n As Long
Dim WdApp As Object
Dim WdSammelDok As Object
Dim OLEDok As Object
Dim erstesDok As Boolean
'Word öffnen und Dokument erstellen
Set WdApp = GetObject("", "Word.Application")
If WdApp Is Nothing Then Set WdApp = CreateObject("Word.Application")
'Gesamtdokument erzeugen
Set WdSammelDok = WdApp.Documents.Add(Visible:=True)

erstesDok = True
'Objekte auslesen
For Each Blatt In ThisWorkbook.Worksheets
 With Blatt
 For n = 1 To Blatt.OLEObjects.Count
 If Not erstesDok Then WdSammelDok.Range(WdSammelDok.Content.End - 1).InsertBreak (7)
 erstesDok = False
 .OLEObjects(n).Verb Verb:=xlOpen
 Set OLEDok = .OLEObjects(n).Object.Application.ActiveDocument
 OLEDok.Content.Copy
 WdSammelDok.Range(WdSammelDok.Content.End - 1).Paste
 OLEDok.Close False
 Next n
 End With
Next Blatt
'Dokument einrichten, speichern und Ende
With WdSammelDok.PageSetup
 .TopMargin = WdApp.CentimetersToPoints(0.63)
 .BottomMargin = WdApp.CentimetersToPoints(0.63)
 .LeftMargin = WdApp.CentimetersToPoints(2.5)
 .RightMargin = WdApp.CentimetersToPoints(2.5)
End With
WdSammelDok.SaveAs "C:\test\komplett.doc"
WdApp.Visible = True

Set WdApp = Nothing
Set WdSammelDok = Nothing
Set OLEDok = Nothing
End Sub

Vielen Dank für die Mühe und nette Grüße, tester

Hallo tester,
Danke für deinen Code.
„Content“ und „InsertBreeak“ waren mir neu, sind aber sprechende Namen, d.h. ich kann mir ohne F1 denken was sie bedeuten.
Auf „.Verb“ stiess ich zufällig wegen deiner Anfrage hier. „.Verb“ hat nur 2 Argumente, „xlopen“ und „xlprimary“. "xlopen ist klar, aber ich grübel was mit „xlprimary“ gemeint sein könnte.
Weißt du was es bedeutet?
Gruß
Reinhard

Sub meineVersion()
Dim Blatt As Worksheet
Dim n As Long
Dim WdApp As Object
Dim WdSammelDok As Object
Dim OLEDok As Object
Dim erstesDok As Boolean
'Word öffnen und Dokument erstellen
Set WdApp = GetObject("", „Word.Application“)
If WdApp Is Nothing Then Set WdApp =
CreateObject(„Word.Application“)
'Gesamtdokument erzeugen
Set WdSammelDok = WdApp.Documents.Add(Visible:=True)

erstesDok = True
'Objekte auslesen
For Each Blatt In ThisWorkbook.Worksheets
With Blatt
For n = 1 To Blatt.OLEObjects.Count
If Not erstesDok Then
WdSammelDok.Range(WdSammelDok.Content.End - 1).InsertBreak (7)
erstesDok = False
.OLEObjects(n).Verb Verb:=xlOpen
Set OLEDok =
.OLEObjects(n).Object.Application.ActiveDocument
OLEDok.Content.Copy
WdSammelDok.Range(WdSammelDok.Content.End - 1).Paste
OLEDok.Close False
Next n
End With
Next Blatt
'Dokument einrichten, speichern und Ende
With WdSammelDok.PageSetup
.TopMargin = WdApp.CentimetersToPoints(0.63)
.BottomMargin = WdApp.CentimetersToPoints(0.63)
.LeftMargin = WdApp.CentimetersToPoints(2.5)
.RightMargin = WdApp.CentimetersToPoints(2.5)
End With
WdSammelDok.SaveAs „C:\test\komplett.doc“
WdApp.Visible = True

Set WdApp = Nothing
Set WdSammelDok = Nothing
Set OLEDok = Nothing
End Sub

Hallo tester,
Danke für deinen Code.
„Content“ und „InsertBreeak“ waren mir neu, sind aber
sprechende Namen, d.h. ich kann mir ohne F1 denken was sie
bedeuten.
Auf „.Verb“ stiess ich zufällig wegen deiner Anfrage hier.
„.Verb“ hat nur 2 Argumente, „xlopen“ und „xlprimary“. "xlopen
ist klar, aber ich grübel was mit „xlprimary“ gemeint sein
könnte.
Weißt du was es bedeutet?
Gruß
Reinhard

Hallo,

hab noch mal kurz recherchiert:
xlopen - öffnet das Objekt zur Bearbeitung in einem extra Programmfenster der Serveranwendung (hier Word)
xlprimary - öffnet das Objekt in einem Bearbeitungsfenster in der Clientanwendung (anwendungsübergreifend).

habs hier gefunden: http://www.ti5.tu-harburg.de/Manual/vba5/tag19.htm

Danke nochmals für Deine Hilfe.

Viele Grüße, tester!

Danke Dir für Mühe und Rückantwort o.w.T.