Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

PDF über VBA öffnen und Focus setzen

Begonnen von Ken, Juni 30, 2017, 15:11:15

⏪ vorheriges - nächstes ⏩

Ken

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
Gruß
Ken


Office 2010

Lachtaube

Verwende alternativ VBA Tipp: Anwendung mit ShellExecute starten und setze lpParameters entsprechend Deiner Anforderung.
Grüße von der (⌒▽⌒)

Ken

Hallo Lachtaube,

Danke für den Link. Habe Parameter ausprobiert, aber der Focus bleibt auf Access.

Trotzdem vielen Dank!

Gruß
Ken
Gruß
Ken


Office 2010

Lachtaube

Zeige bitte die Anweisung des Versuchs und teile auch mit, welches Anzeige-Programm denn gestartet wird.
Grüße von der (⌒▽⌒)

Ken

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
Gruß
Ken


Office 2010

steffen0815

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.

Gruß Steffen

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Lachtaube

Fehler meinerseits: nshowcmd ist natürlich das entscheidende Argument. Anbei ein Minimalbeispiel.
Grüße von der (⌒▽⌒)

Ken

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
Gruß
Ken


Office 2010

Lachtaube

@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 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.
Grüße von der (⌒▽⌒)

Ken

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
Gruß
Ken


Office 2010

Lachtaube

Ken, jetzt fehlt mir etwas der Zusammenhang. Am besten zeigst Du den kompletten Code der Prozedur und schilderst dazu kurz den gewünschten Handlungsablauf.
Grüße von der (⌒▽⌒)

Ken

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
Gruß
Ken


Office 2010

DF6GL

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 acCmdCopy

kann kein externes Fenster, bzw. dessen Inhalt kopiert werden.

Um das Ganze zu bewerkstelligen, ist API erforderlich.







markusxy

@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.