Ich habe einen Code, um PDF-Dateien nach Excel zu übertragen, aber ich bekomme eine Fehlermeldung in einer der Zeilen und ich weiß nicht warum.PDF zu Excel Fehler beim Schließen PDF-Datei
Ich bin in der Lage, die Daten aus der PDF-Datei korrekt zu extrahieren und einzufügen, das Problem ist, wenn Sie versuchen, die PDF-Datei zu schließen.
Der Code Ich verwende ist wie folgt:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub PDFExtract()
' Get name of Excel file
TemplateName = ThisWorkbook.Name
Dim oW As Worksheet: Set oW = ThisWorkbook.Worksheets("Temp")
FileToOpen = "c:\text.pdf"
ShellExecute 0, "Open", FileToOpen, "", "", vbNormalNoFocus
num = ShellExecute(0, "Open", FileToOpen, "", "", vbNormalNoFocus)
' wait 2 secs
Application.Wait Now + TimeValue("00:00:2")
' select all using ctrl a
SendKeys "^a", True
' wait 2 secs
Application.Wait Now + TimeValue("00:00:2")
' copy all using ctrl c
SendKeys "^c"
' wait 2 secs
Application.Wait Now + TimeValue("00:00:2")
' activate this wokbook
Windows(TemplateName).Activate
Sheets("Temp").Select
Range("B7").Select
ActiveSheet.Paste
Call TerminateApp ' The problem in the code for TerminateApp
End sub
So weit so gut. Jetzt der TerminateApp Code, wo ich das Problem habe
Ich habe oben hervorgehoben, wo ich die Fehlermeldung bekomme. Die Fehlermeldung erhalte ich ist: Laufzeitfehler ‚-2147217406 (80041002): Nicht
gefunden Was ich seltsam gefunden, dass:
- Die PDF-Datei
- Wenn ich geschlossen wurde Schritt über die Linie, das Programm ohne Fehler weiterhin
- Wenn ich eine andere PDF-Datei geöffnet haben, schließt es beide und keine Fehlermeldung nicht geben
Es sieht so aus, als ob es die PDF-Datei schließt und dann versucht, danach zu suchen, sie aber nicht findet. Irgendwelche Ideen, warum der Fehler auftritt und wie das Problem gelöst werden kann?
Ich habe versucht, den Code gemäß Beispiel here von smartbelix zu ändern, aber es hat nicht funktioniert:
Do
Set objWMIcimv2 = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objList = objWMIcimv2.ExecQuery("select * from win32_process where name='" & strTerminateThis & "'")
If objList.Count > 0 Then
For Each objProcess In objList
intError = objProcess.Terminate 'Terminates a process and all of its threads.
'Return value is 0 for success. Any other number is an error.
If intError <> 0 Then Exit For
Next
End If
Loop While objList.Count > 0
Perfekt, das macht den Job. Wenn zwei PDF-Dateien vorhanden sind, wird nur die Datei geschlossen, die ich zuvor in PDFExtract geöffnet habe. Aber das ist eigentlich perfekt. Vielen Dank. – Selrac