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

 Problemstellung:
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 A00 lauffähig

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

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:

Arbeiten mit der ShellExecute-Methode

ab A00

Die Zip-Datei enthält eine Version ab A00-A03 und eine ab A07

Datum 05.02.2018
Dateigröße 75.45 KB
Download 1.419

Ähnliche Artikel

Kommentar schreiben

Sicherheitscode
Aktualisieren

Login Form

Neueste Artikel

SQL zu VBA Konverter
26. Oktober 2018
Problemstellung: 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 "SmartTools SQL aus Abfragen 3.0"...
1.png2.png1.png2.png7.png2.png6.png
Heute26
Gestern105
Diese Woche234
Dieser Monat1526
Total1212726

  • IP: 52.6.70.202
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

2
Online

19. Dezember 2018

Letzte Kommentare

  • Trusted Locations Manager

    Tommy Admin 13.07.2018 13:06
    RE: Trusted Locations Manager
    Hallo Matthias, aus Ermangelung einer 64bit Version kann ich das leider nicht prüfen. Tut mir leid. Gruss ...

    Weiterlesen...

     
  • Trusted Locations Manager

    Matthias 13.07.2018 06:48
    Funktioniert nicht
    Habe gerade den TL-Manager installiert. Nach dem Start sagt er mir, dass es kein Office erkennen ...

    Weiterlesen...