Problemstellung:
Für 32Bit und 64Bit Office Versionen
Es gibt bestimmte Fragen die immer wieder auftreten.
Wie kann ich aus Access heraus eine Exceldatei öffnen oder ein Worddokument drucken usw.
Dafür bietet sich die API-Funktion "ShellExecute" an.
Aber wie geht das? Das erfahrt Ihr im Folgenden.
Voraussetzungen:
Das Bsp ist ab A07 lauffähig
#If VBA7 Then 'Code für 32 bit und 64 bit Office VBA 7 #If Win64 Then Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, _ ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long #Else Public 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 #End If #Else Public 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 #End If
Funktions Parameter:
-
hwnd
erwartet ein Fensterhandel zu dem sich das neue Fenster Modal verhält. -
lpOperation
hier wird eine Zeichenfolge erwartet die beschreibt welche Operation durchgeführt werden soll.
Diese Operationen sind Kommandos die in der Windows Registry stehen und auch zur Auswahl stehen
wenn man mittels der Rechten Maustaste im Windows Explorer auf eine Datei Klickt.
Wird ein leerer String übergeben wird die Standard öffnungsmethode benutzt, wird diese Standard Methode
nicht in der Windows Registry gefunden wird die Datei mit dem "Open"" Kommando geöffnet. Bei Windows 2000 und
Später wird auch erst versucht das Dokument mit dem Standard Kommando zu öffnen. Ist kein Standard Kommando
Definiert so bedient sich Windows 2000 dem ersten Registryeintrag der bei der Datei Assizoierten Datei gefunden wird.
Gültige Kommandos sind die folgenden Strings.
lpOperation Kommandos
"edit" verhält sich so als wenn man im Kontextmenü des Explorers auf "Bearbeiten" Klickt
"explore" wenn "lpFile" ein Verzeichnispfad ist wird der Windows Explorer mit dem Verzeichnis geöffnet
"find" wenn "lpFile" ein Verzeichnispfad ist wird der Windows Suchen Dialog mit gesetztem Startverzeichnis zu diesem geöffnet
"open" Öffnet die Datei mit dem Assizoiertem Programm
"print" Druckt die Datei mit dem Assizoiertem Programm -
lpFile
erwartet ein Verzeichnisnamen, eine Datei oder das Dokument welches mit der Assizoiertem Programm geöffnet werden soll. -
lpParameters
hier kann man noch zusätzliche Programm Parameter übergeben. -
lpDirectory
legt das Arbeitsverzeichnis fest in dem das Programm Arbeitet welches geöffnet wird -
nCmdShow
erwartet ein Konstante die beschreibt wie das Fenster welches erscheint, ausgerichtet werden soll.
Konstanten für nCmdShow:
Public Enum WindowsConst SW_HIDE = 0 'Versteckt das Fenster SW_MAXIMIZE = 3 'Maximiert das Fenster SW_MINIMIZE = 6 'Minmiert das Fenster SW_NORMAL = 1 'Akteviert das Fenster SW_SHOW = 5 'Zeigt das Fenster an, auch wenn es versteckt ist SW_RESTORE = 9 'Stellt das Fenster wieder her SW_SHOWMAXIMIZED = 3 'Zeigt das Fenster an und Maximiert es SW_SHOWMINIMIZED = 2 'Zeigt das Fenster an und Minimiert es SW_SHOWMINNOACTIVE = 7 'Minimiert das Fenster aber akteviert es nicht SW_SHOWNA = 8 'Zeigt das Fenster an aber aktiviert es nicht SW_SHOWNOACTIVATE = 4 'Zeigt das Fenster an ohne es zu aktivieren SW_SHOWNORMAL = 1 'Zeigt das Fenster und aktiviert dies End Enum
Rückgabewerte der Funktion:
Public Enum ErrorConst ERROR_BAD_FORMAT = 11& 'Die Datei ist keine Win32 Anwendung SE_ERR_ACCESSDENIED = 5 'Zugriff Verweigert SE_ERR_ASSOCINCOMPLETE = 27 'Datei Assoziation ist unvollständig SE_ERR_DDEBUSY = 30 'DDE ist nicht bereit SE_ERR_DDEFAIL = 29 'DDE forgang gescheitert SE_ERR_DDETIMEOUT = 28 'DDE zeitlimit wurde erreicht SE_ERR_DLLNOTFOUND = 32 'Die benötigte DLL wurde nicht gefunden SE_ERR_FNF = 2 'Datei wurde nicht gefunden SE_ERR_NOASSOC = 31 'Datei ist nicht Assizoiert SE_ERR_OOM = 8 'Nicht genügend Speicher SE_ERR_PNF = 3 'Pfad wurde nicht gefunden SE_ERR_SHARE = 26 'Sharing verletzung End Enum
Die Prozedur sähe dann so aus:
Public Enum OpenConst Bearbeiten = 1 'verhält sich so als wenn man im Kontextmenü des 'Explorers auf "Bearbeiten" Klickt Explorer = 2 'wenn "lpFile" ein Verzeichnispfad ist wird der 'Windows Explorer mit dem Verzeichnis geöffnet Suchen = 3 'wenn "lpFile" ein Verzeichnispfad ist wird der 'Windows Suchen Dialog mit gesetztem Startverzeichnis 'zu diesem geöffnet Oeffnen = 4 'Öffnet die Datei mit dem Assizoiertem Programm Drucken = 5 'Druckt die Datei mit dem Assizoiertem Programm End Enum Public Sub ExecuteFile(frm As Form, sFile As String, cOpen As OpenConst, _ cWindow As WindowsConst, _ Optional sDir As String = vbNullString, _ Optional sParameter As String = vbNullString) '******************************************* 'Name: ExecuteFile (Sub) 'Purpose: 'Author: Thomas Keßler 'Date: August 23, 2007, 13:00:00 'Inputs: frm=Formular, sFile=Dateiname, cOpen=Öffnungsmodus, ' cWindow=Fenstermodus ' sDir=Startverzeichnis, sParameter=Startparameter 'Output: '******************************************* Dim Retval As ErrorConst Dim sOpen As String Select Case cOpen Case 1 sOpen = "edit" Case 2 sOpen = "explore" Case 3 sOpen = "find" Case 4 sOpen = "open" Case 5 sOpen = "print" End Select Retval = ShellExecute(frm.hwnd, sOpen, sFile, sParameter, sDir, cWindow) Select Case Retval Case SE_ERR_NOASSOC Shell "RunDLL32 shell32.dll,OpenAs_RunDLL " & sFile 'MsgBox "Datei ist nicht Assizoiert", vbInformation, "Fehler" Exit Sub Case SE_ERR_PNF MsgBox "Pfad wurde nicht gefunden", vbInformation, "Fehler" Exit Sub Case SE_ERR_FNF MsgBox "Datei wurde nicht gefunden", vbInformation, "Fehler" Exit Sub Case 8, 26, 32, 28, 29, 30, 27, 5, 11 'Alle anderen Fehler Exit Sub End Select End Sub
Somit könnte der Aufruf zum öffnen einer Exceldatei so aussehen:
1 |
ExecuteFile Me, "C:\Test\test.xls", Oeffnen, SW_MAXIMIZE |
Weitere Beispiele zum Aufruf befinden sich in der Bsp-DB
z.B.:
- öffnen von Dateien
- drucken von Dateien
- bearbeiten von Dateien
- Explorer mit bestimmten Verzeichnis öffnen
- Suchdialog in bestimmten Verzeichnis aufrufen
Für 32Bit und 64Bit Office Versionen
Arbeiten mit der ShellExecute-Methode
ab A07
Die Zip-Datei enthält eine Version ab ab A07
Ähnliche Artikel
Weiterlesen...