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.
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:
Private Function CopyTableFromWordDocument(WordDocumentPath As String) As Excel.Workbook
Dim objWdApp As Object 'Word.Application
Dim objWdDoc As Object 'Word.Document
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.
|