Hm, es gibt also unter dem selben Namen je eine DOCX und eine PDF Datei?
Die DOCX solltest du nicht per Shell öffnen, sondern per Word-Instanz.
1 2 3 4 5 6 7 8 9 | Dim oPDF As Object
If Me .ComboBox4.ListIndex > -1 And Me .ComboBox5.ListIndex > -1 And Me .ComboBox6.ListIndex > -1 Then
Set oPDF = CreateObject( "Shell.Application" )
oPDF.Open "C:\...\" & Me.ComboBox4 & " \ " & Me.ComboBox5 & " \ " & Me.ComboBox6 & " .pdf"
Call CopyTableFromWordDocument( "C:\...\" & Me.ComboBox4 & " \ " & Me.ComboBox5 & " \ " & Me.ComboBox6 & " .docx")
End If
Set oPDF = Nothing
|
In dem gleichen Klassenmodul, in dem der obere Code-Schnipsel bei dir steht, kommt das hier:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Private Function CopyTableFromWordDocument(WordDocumentPath As String ) As Excel.Workbook
Dim objWdApp As Object
Dim objWdDoc As Object
Set objWdApp = CreateObject( "Word.Application" )
Set objWdDoc = objWdApp.Documents.Open(WordDocumentPath, ReadOnly := True )
Dim wkb As Excel.Workbook
Set wkb = Workbooks.Add
With wkb.Worksheets(1)
Call objWdDoc.Tables(1).Range.Copy
Call .Paste(Destination:=.Range( "A1" ))
End With
Call objWdApp.Quit(SaveChanges:= False )
Set CopyTableFromWordDocument = wkb
End Function
|
Ich gehe hier den Weg jedesmal beim Aufruf der Funktion eine Word-Instanz zu öffnen. Das kostet natürlich immer etwas Zeit. Bei mehreren zu verarbeitenden Dateien sollte man die Instanz natürlich erst beenden, wenn man sie nicht mehr braucht - könnte man z.B. über eine Member-Variable lösen, also eine Variable die nicht in der Funktion deklariert ist, sondern auf Klassenmodul-Ebene.
Grüße
PS: Auf Fehlerbehandlung hab ich hier verzichtet.
PPS: Makro ist ungetestet.
|