Hallo,
ich habe alles ausprobiert, aber nichts hat geholfen. Mein Problem, ich öffne über Access ein PDF, nur leider verliert das PDF den Focus.
Function pdf_öffnen()
Dim strPfad As String
Dim strDok As String
strPfad = "C:\Daten"
strDok = strPfad & "\" & "_1005176201_4500160101_MAAD.pdf"
Application.FollowHyperlink strDok, , True, True
Application.FollowHyperlink strDok, SetFocus
DoCmd.RunCommand acCmdCopy 'Hier kopiert er mir ein Textfeld aus meiner Form statt das PDF-File.
End Function
Hat jemand eine Idee wie ich den Focus auf das PDF bekomme?
Gruß
Ken
Verwende alternativ VBA Tipp: Anwendung mit ShellExecute starten (https://dbwiki.net/wiki/VBA_Tipp:_Anwendung_mit_ShellExecute_starten) und setze lpParameters entsprechend Deiner Anforderung.
Hallo Lachtaube,
Danke für den Link. Habe Parameter ausprobiert, aber der Focus bleibt auf Access.
Trotzdem vielen Dank!
Gruß
Ken
Zeige bitte die Anweisung des Versuchs und teile auch mit, welches Anzeige-Programm denn gestartet wird.
Sub Versuch()
Call ShellExecute(0, "open", "C:\Daten\_1005176201_4500160101_MAAD.pdf", "", "", SW_MAXIMIZE)
DoCmd.RunCommand acCmdCopy
end sub
Bei Strg-V wird der Inhalt meiner Form angezeigt und nicht der Inhalt vom PDF-File.
Gruß
Ken
Hallo,
externe Programme werden (im Normalfall) parallel gestartet, dh. dein Code wartet nicht bis die PDF offen ist. Damit läuft dein nachfolgender Befehl "ins Leere".
Man kann da sicher was "zaubern", aber das wird nix Gescheites.
Etwas Richtiges erreicht man nur über Automatisierung das wäre dann aber speziell auf Acrobat abgestimmt.
Meines Wissens kopiert DoCmd.RunCommand acCmdCopy den Inhalt des aktiven Access Steuerelementes in die Zwischenablage. Das dies auch mit externen Programmen/Dokumenten funktionieren würde, wäre mir neu.
Fehler meinerseits: nshowcmd ist natürlich das entscheidende Argument. Anbei ein Minimalbeispiel.
Hallo Lachtaube,
Danke für deine Hilfe. Bekomme noch eine kleine Fehlermeldung, ansonsten kann ich den Code erst Montag testen.
Wenn du mal in Köln bist gebe ich ein Kölsch aus :-)
Gruß
Ken
@Ken,
Office in der 64-Bit Version benötigt eine leicht abgeänderte API-Deklaration.
Public Declare PtrSafe Function ShellExecute Lib "shell32" _
Alias "ShellExecuteW" ( _
ByVal hWnd As LongPtr, _
ByVal lpOperation As LongPtr, _
ByVal lpFile As LongPtr, _
ByVal lpParameters As LongPtr, _
ByVal lpDirectory As LongPtr, _
ByVal nShowCmd As Long) As LongPtr
Die wichtigsten Deklarationen kannst Du Dir von Microsoft übrigens unter Office 2010 Help Files: Win32API_PtrSafe with 64-bit Support (https://www.microsoft.com/en-us/download/details.aspx?id=9970) besorgen.
... und natürlich ein Dankeschön für die Einladung zum Kölsch - nur ist mir der Weg von Berlin an den Rhein für den Zweck des Kölschtrinkens doch etwas sehr weit.
Hallo Lachtaube,
Berlin...hmm...das ist wirklich etwas weit weg für ein Bier. Aber man sieht sich ja immer zweimal im Leben ;)
So, den Code von Dir getestet, habe nur meinen Befehl:
DoCmd.RunCommand acCmdCopy
hinzugefügt.
Bekomme dann die Fehlermeldung die Aktion Kopieren ist zurzeit nicht verfügbar. Er bekommt wahrscheinlich keinen Focus auf das PDF.
Nochmals vielen Dank für deine Hilfe!
Gruß
Ken
Ken, jetzt fehlt mir etwas der Zusammenhang. Am besten zeigst Du den kompletten Code der Prozedur und schilderst dazu kurz den gewünschten Handlungsablauf.
Hallo Lachtaube,
liegt wahrscheinlich an mir, habe mich nicht klar genug ausgedrückt.
Das Anfangsproblem war, dass ich ein PDF per VBA öffne und mit dem Befehl: DoCmd.RunCommand acCmdCopy den Inhalt des PDF in die Zwischenablage kopiere. Leider bekam aber meine Form immer den Focus und nicht das PDF und der Inhalt von dem Textfeld was zufällig markiert war ging in den Zwischenspeicher.
Meine Anfangsfrage war, wie bekomme ich den Focus auf das PDF.
Gruß
Ken
Hallo,
nicht gelesen?:
PhilS:
ZitatMeines Wissens kopiert DoCmd.RunCommand acCmdCopy den Inhalt des aktiven Access Steuerelementes in die Zwischenablage. Das dies auch mit externen Programmen/Dokumenten funktionieren würde, wäre mir neu.
Beitrag editieren
Mit
DoCmd.RunCommand acCmdCopykann kein externes Fenster, bzw. dessen Inhalt kopiert werden.
Um das Ganze zu bewerkstelligen, ist API erforderlich.
@Ken,
in deinem anderen Thread habe ich dir einen Link mit einem Beispiel gepostet. Da ist eine Anleitung wie man der Code ein PDF ausliest.
Dein eingeschlagener Weg scheint zwar ein einfacher zu sein.
Access bietet aber keine Methoden um fremde Anwendungen vernünftig zu steuern.
Du kannst also entweder den Weg über Automatisation oder direkte Programmierung über api wählen.
Letzeren wählt man nur, wenn es keine Alternative gibt und er erfordert grundlegende Kenntnisse des Programmierens.
Hallo DF6GL,
doch, aber die Hoffnung stirbt zuletzt...dachte mit dem Code von Lachtaube könnte es gehen.
Sorry.
Gruß
Ken
Hallo markus888 ,
hatte ich übersehen, werde ich testen.
Vielen Dank!
Gruß
Ken
Wenn Du Fremdsoftware installieren darfst und keine Euronen ausgeben willst, schau Dir pdftotext (https://en.wikipedia.org/wiki/Pdftotext) an.
Hallo Lachtaube,
ich darf leider keine Fremdsoftware installieren, aber trotzdem Danke für deine Unterstützung!
Ich schließe mal meine Anfrage, denke es gibt so einfach keine Lösung.
Danke an Alle!
Gruß
Ken