1 1 1 1 1 1 1 1 1 1 Rating 5.00 (1 Vote)

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

Funktionsweise:
#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

Dateien:

Für 32Bit und 64Bit Office Versionen

Arbeiten mit der ShellExecute-Methode

ab A07

Die Zip-Datei enthält eine Version ab ab A07

Datum 05.02.2018
Dateigröße 68 KB
Download 1.814

 

Ähnliche Artikel

You have no rights to post comments

Login Form

Neueste Artikel

SQL zu VBA Konverter
26. Oktober 2018
Problemstellung: Nur für 32Bit Office Versionen Gibt es eine Möglichkeit SQL-Code einer Abfrage so zu konvertieren das der Code in VBA genutzt werden kann? Lösung: Bis Access 2010 gibt das Tool...
1.png6.png5.png3.png0.png7.png6.png
Heute49
Gestern235
Diese Woche1016
Dieser Monat1258
Total1653076

  • IP: 18.97.14.82
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

2
Online

06. Dezember 2024

Letzte Kommentare

  • Berechnen von Zeiträumen als Abfragekriterium

    elmard 02.02.2021 21:02
    1000 Dank
    für diese Datenbankanwendung! Eine sehr gute Umsetzung mit den vielen Möglichkeiten des Datums.

    Weiterlesen...

     
  • SQL zu VBA Konverter

    Tommy Admin 03.11.2019 16:33
    RE: SQL zu VBA Konverter
    Hallo Elmard, danke für die Info. :lol:

    Weiterlesen...

     
  • SQL zu VBA Konverter

    elmard 03.11.2019 14:49
    Bei SmartTools neue Version 4.0
    Dieses Tool liegt inzwischen in der Version 4 vor und läuft nun auch von A2013 und A2016 sowie im ...

    Weiterlesen...

     
  • Workshop zur Benutzung des Multi-Column TreeView Control unter MS-Access

    TommyK 27.02.2019 06:52
    Workshop
    Hallo mpegjunkie, danke für Dein Feedback. Schön das Dir Workshop weiter hilft. :D

    Weiterlesen...

     
  • Workshop zur Benutzung des Multi-Column TreeView Control unter MS-Access

    mpegjunkie 26.02.2019 20:10
    Perfekter Workshop
    Hallo Tommy, perfekter Workshop, toll und umfassend erläutert. Jetzt nutze ich diese Controls auch.

    Weiterlesen...