Ich möchte zwischen Anwendung mit dem Shell-Befehl in VBA hin und her wechseln. Ich benutze SendKeys, um Sachen in Prozess A zu tun, dann gehe zu Prozess B, dann zu A und dann zu Prozess B. Es funktioniert gut für die erste Iteration. Wenn ich AppActivate verwende, um zu Prozess B zurückzukehren, wird der Fokus tatsächlich wieder auf Prozess B zurückgesetzt. Jegliche Befehle von SendKeys werden jedoch ignoriert.Verwenden von AppActivate und Sendkeys in VBA-Shell-Befehl
Beispielcode:
Sub pastePDF2TXT_v3(pdfName As String, txtName As String)
Dim acrobatID
Dim acrobatInvokeCmd As String
Dim acrobatLocation As String
Dim notepadID
Dim acrobatID2
Dim notepadID2
Debug.Print "here"
acrobatLocation = "C:\Program Files\Adobe\Acrobat 9.0\Acrobat\Acrobat.exe"
acrobatInvokeCmd = acrobatLocation & " " & pdfName
acrobatID = Shell(acrobatInvokeCmd, 1)
AppActivate acrobatID
SendKeys "^a", True '^A selects everything already in the pdf file.
SendKeys "^c", True '^C copies the selection to the clipboard.
notepadID = Shell("NOTEPAD.EXE " & txtName, 1) ' invoke notepad on the text file.
AppActivate notepadID ' set the new app as teh active task.
SendKeys "^a", True '^A selects everything already in the text file.
SendKeys "^v", True '^V pastes the new stuff over the top of the old text file (deleting the old stuff)
SendKeys "%{END}", True ' makre sure last line of text file
SendKeys "{ENTER}", True
AppActivate acrobatID ' NOTE: APPEARS TO WORK UP TO THIS POINT.
SendKeys "{ENTER}", True ' NOTE: SECOND APP IGNORES SUBSEQUENT COMMANDS FROM HERE DOWN.
SendKeys "^a", True '^A selects everything already in the pdf file.
SendKeys "^c", True '^C copies the selection to the clipboard.
SendKeys "%f", True 'alt f, x to exit Notepad.exe
SendKeys "x", True
'acrobatID.Quit
Debug.Print "start second"
AppActivate notepadID ' set the new app as teh active task.
SendKeys "%{END}", True 'Go to end of text file.
SendKeys "^v", True '^V pastes the new stuff at end of file.
SendKeys "{ENTER}", True
SendKeys "^s", True
SendKeys "%f", True 'alt f, x to exit Notepad.exe
SendKeys "x", True
notepadID.Quit
acrobatID.Quit
End Sub
Was ich habe, ist ein Haufen (mehr als 1000) von PDFs, den Text, die ich mag durchforschen. Ein Teil des Textes ist frei und unbrauchbar. Andere Teile des Textes sind fast durchgängig formatiert und ich kann diese Informationen abrufen und in eine Datenbank (Excel-Tabelle) zur späteren Analyse einfügen. Nachdem die Daten in eine Textdatei eingegeben wurden, analysiere ich sie mit einem Perl-Skript, um die gewünschten Daten zu erhalten und eine CSV-Datei zu erstellen. Dies ist eine schlechte Art, dies zu tun - aus den Gründen, die Sie geben, auch weil es ästhetisch hässlich ist und es scheint nicht in allen Fällen einheitlich zu funktionieren. – elbillaf
Die allgemeine Methode funktioniert, wenn die pdf nur eine Seite ist, aber für Multipage, acrobat wählt nur eine Seite auf einem^A (von sendkeys), also muss ich hin und her gehen - das scheint nicht zu funktionieren. Ich war in der Lage, dieses Problem für meine derzeitige Aufgabe zu umgehen, aber ich hätte gerne eine allgemeine Methode zur Lösung dieser Art von Problem, damit zukünftige Methoden nicht so irritierend sind. – elbillaf
Können Sie etwas wie http://www.pdf2txt.com/ verwenden, anstatt zu versuchen, die Acrobat GUI zu automatisieren? –