Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: shellExecute

shellExecute
04.03.2015 15:23:12
Airwin
hi comunity,
ich habe ein Modul, wo folgender Eintrag steht:
"Private 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 lpnShowCmd As Long) As Long"
Jetzt wollte ich dieses Excel auf einem anderen PC öffnen, der hat jedoch Windows in der 64-bit Version. Wie muss ich die o.a. Function ändern, dass es dort funktioniert.
LG Airwin

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: shellExecute
04.03.2015 15:44:12
Rudi
Hallo,
#If win64 Then
Private 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 lpnShowCmd As Long) As  _
LongPtr
#Else
Private 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 lpnShowCmd As Long) As Long
#End If
Gruß
Rudi

Anzeige
AW: shellExecute
05.03.2015 13:39:31
Airwin
Vielen herzlichen Dank
;

Forumthreads zu verwandten Themen

Anzeige

Infobox / Tutorial

ShellExecute in Excel VBA für 64-Bit-Systeme


Schritt-für-Schritt-Anleitung

Um die ShellExecute-Funktion in Excel VBA auf einem 64-Bit-System korrekt zu deklarieren, befolge diese Schritte:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor innerhalb von Excel zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle "Einfügen" > "Modul".

  3. Deklariere die Funktion: Kopiere und füge den folgenden Code in das Modul ein:

    #If Win64 Then
    Private 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 lpnShowCmd As Long) As LongPtr
    #Else
    Private 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 lpnShowCmd As Long) As Long
    #End If
  4. Verwende die Funktion: Du kannst nun ShellExecute in deinem VBA-Code nutzen, um Dateien oder Programme zu öffnen. Ein einfaches Beispiel wäre:

    Sub OpenNotepad()
       ShellExecute 0, "open", "notepad.exe", vbNullString, vbNullString, 1
    End Sub

Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert"
    Lösung: Stelle sicher, dass Du die richtige Deklaration für 64-Bit und 32-Bit verwendest. Verwende LongPtr für 64-Bit und Long für 32-Bit.

  • Fehler: "Funktion nicht gefunden"
    Lösung: Überprüfe, ob die DLL-Datei shell32.dll korrekt im System registriert ist und keine Schreibfehler in der Deklaration vorliegen.


Alternative Methoden

Wenn Du Probleme mit ShellExecute hast oder eine andere Methode ausprobieren möchtest, kannst Du auch die Shell-Funktion verwenden. Diese ist einfacher, hat jedoch weniger Optionen:

Sub OpenExcel()
    Shell "C:\Program Files\Microsoft Office\root\OfficeXX\EXCEL.EXE", vbNormalFocus
End Sub

Ersetze OfficeXX mit der entsprechenden Version (z.B. Office16 für Office 2016).


Praktische Beispiele

  1. Öffne eine PDF-Datei:

    Sub OpenPDF()
       ShellExecute 0, "open", "C:\Pfad\zu\deiner\Datei.pdf", vbNullString, vbNullString, 1
    End Sub
  2. Öffne einen Ordner:

    Sub OpenFolder()
       ShellExecute 0, "open", "C:\Pfad\zu\deinem\Ordner", vbNullString, vbNullString, 1
    End Sub

Tipps für Profis

  • Nutze ShellExecute für das Öffnen von Dateien in den Standardanwendungen.
  • Überprüfe immer die Rückgabewerte von ShellExecute, um sicherzustellen, dass die Operation erfolgreich war.
  • Experimentiere mit verschiedenen lpOperation-Parametern wie "edit" oder "print", um spezifische Aktionen auszuführen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein VBA-Code auf beiden Systemtypen funktioniert?
Du kannst mit der #If Win64 Then-Direktive eine bedingte Kompilierung verwenden, um die Funktion für 64-Bit und 32-Bit Systeme getrennt zu deklarieren.

2. Was ist der Unterschied zwischen ShellExecute und Shell?
ShellExecute ermöglicht das Öffnen von Dateien in der zugehörigen Anwendung, während Shell einen Prozess direkt aufruft.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige