Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Shell-Aufruf

Forumthread: Shell-Aufruf

Shell-Aufruf
27.02.2015 08:34:37
Franz
Hallo Fachleute,
ich starte einen shell-Aufruf, genau wie in der VBA-HIlfe angegeben, ...
Sub aufruf_Finale()
Dim Ergebnis
Ergebnis = Shell("C:\_MY\aa MUSI\04 SE\_Stuecke fuer SE\0a Bach - Air.musx - Verknüpfung.lnk", _
1)
End Sub

... bekomme aber eine Fehlermeldung:
"Ungültiger Prozeduraufruf oder ungültiges Argument"
Der Pfad ist definitv richtig eingegeben - mehrfach überprüft und immer wieder neu reinkopiert aus dem Explorer, um Eingabefehler zu vermeiden. Woran kann es noch liegen?
Danke schonmal und Grüße
Franz

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Shell-Aufruf
27.02.2015 08:52:15
Luschi
Hallo Franz,
ich habe mal für Dich gegoogelt mit den Stichworten:
vba shell verknüpfung
Und hier findest Du die Antwort: http://support.microsoft.com/kb/506168/de
Gruß von Luschi
aus klein-Paris
PS - Hinweis: Leerzeichen im Pfad

Anzeige
AW: Shell-Aufruf
27.02.2015 09:50:08
Franz
Hallo Luschi,
jetzt hab ich mal nen komplett neuen Pfad erstellt, sogar sämtliche Unterstriche rausgelassen.
Und weil's dann immer noch nicht geklappt hat, war meine Idee, dass es vielleicht an der Verknüpfungsgeschichte liegt. Darum hab ich mal keine Verknüpfung, sondern die Originaldatei reinkopiert, auch da sämtliche Leerzeichen & co rausgenommen. Es gibt auch keine dt. Umlaute. Aber irgendwie mag es immer noch nicht:
Sub aufruf_Finale()
Dim Ergebnis
Ergebnis = Shell("C:\MY\aaMusi\04SE\StueckeFuerSE\BachAir.musx", 1)
End Sub

Die Fehlermeldung ist immer noch die gleiche........?
Jetzt hatte ich noch ne andere Idee: vielleicht liegt's an der 4-stelligen Suffix. Jetzt hab ich das "x" hinten mal weg, und siehe da: jetzt kommt die Fehlermeldung: "Datei nicht gefunden."
Also die Datei aufgerufen und ins alte .mus-Format exportiert im selben Verzeichnis: jetzt kommt wieder die erste Fehlermeldung von wegen "Ungültiger Prozeduraufruf..........."
Und das kann ich jetzt beliebig machen:
Datei im Ordner umbenennen in einen anderen Namen als in VBA: "Datei nicht gefunden."
Datei genau richtig benennen wie in VBA: "Ungültiger............"
Woran kann es denn noch liegen?
Grüße
Franz
Grüße
Franz

Anzeige
AW: Shell-Aufruf
27.02.2015 11:09:59
Luschi
Hallo Franz,
der Shell-Befehl verlangt eine ausführbare Datei(*.com oder4 *.exe) oder einen Link (*.lnk)
Doch was er mit dem Dateityp *.musx anfangen - hier muß Windows einfach kapitulieren!
Gruß von Luschi
ausm klein-Paris

AW: Shell-Aufruf
27.02.2015 12:57:58
Franz
Hallo Luschi,
danke, ich verstehe.
Von Oberschlumpf gibt es einen Ansatz: https://www.herber.de/forum/archiv/1408to1412/t1410836.htm
Das hab ich jetzt umzusetzen versucht:
Sub aufruf_Finale()
Dim Ergebnis
Ergebnis = Shell("C:\Program Files (x86)\Finale 2014\Finale.exe" "C:\MY\aaMusi\04SE\ _
StueckeFuerSE\BachAir.mus")
End Sub

Allerdings wird hiermit die Schreibweise moniert: "Erwartet Listentrennzeichen oder )"
Setze ich ein Komma zwischen die beiden mittleren "" .......
Sub aufruf_Finale()
Dim Ergebnis
Ergebnis = Shell("C:\Program Files (x86)\Finale 2014\Finale.exe", "C:\MY\aaMusi\04SE\ _
StueckeFuerSE\BachAir.mus")
End Sub

... stimmt's auch wieder nicht, jetzt heißt es "Typen unverträglich"
Gibt's noch eine Idee?
Grüße
Franz
P.S.: mus oder musx macht keinen Unterschied, Finale 2014 kann beides.....

Anzeige
AW: Shell-Aufruf
28.02.2015 11:04:20
Luschi
Hallo Franz,
wenn du Dir den von mir geposteten Link _ http://support.microsoft.com/kb/506168/de nochmals genau durchliest, dann findest Du folgendes Beispiel:

Function Aufruf()
Dim x
x = Shell("start ""C:\EIGENE DATEIEN\MYPROGR.LNK""")
End Function
Die doppelten Anführungszeichen innerhalb der Zeichenkette sind in diesem Fall notwendig,
da der Verzeichnis-Name ein Leerzeichen enthält, und daher innerhalb der Zeichenkette
Anführungszeichen vor und nach dem Verweis auf die Verknüpfung eingefügt werden müssen.
Und bei Dir sind im Pfad 3 Leerzeichen!!! drin.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Shell-Aufruf
28.02.2015 12:38:41
Franz
Hallo Luschi,
vielen Dank, dass Du Dich meiner nochmal annimmst. Und ich neige auch gleich mein Haupt in Demut. Weil ich das mit x = Shell("start ""C:\EIGE....... zwar schon gelesen und auch ausprobiert habe. Aber ich hab die Zeile nicht gscheit zu Ende gelesen und somit die doppelten "" am Ende übersehen und nicht übernommen. Und damit hat's natürlich wieder nicht funktioniert.
In meinem letzten Beispiel
Sub aufruf_Finale()
Dim Ergebnis
Ergebnis = Shell("C:\Program Files (x86)\Finale 2014\Finale.exe", "C:\MY\aaMusi\04SE\ _
StueckeFuerSE\BachAir.mus")
End Sub
hab ich mir deshalb die Leerzeichen erlaubt (bzw. hab ich den Pfad einfach so übernommen, wie er von Windows rsp. dem Installationsprogramm eingerichtet wurde - ich möcht da ja nicht ins System eingreifen), weil in dem Beispiel von Oberschlumpf ...
Shell("C:\Program Files\Windows Media Player\wmplayer.exe" "E:\!In Arbeit\MP3\02 - Primadonna.mp3")
... ja auch Leerzeichen drin sind. Und ich dachte, wenn er es so postet, wird es bei ihm so funktionieren.
Aber trotzdem nochmal Danke für den Hinweis, ich werde es nochmal angehen und dann berichten.
Grüße
Franz
Anzeige
;
Anzeige

Infobox / Tutorial

Shell-Aufruf in Excel VBA richtig umsetzen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Sub aufruf_Finale()
        Dim Ergebnis
        Ergebnis = Shell("C:\Program Files (x86)\Finale 2014\Finale.exe ""C:\MY\aaMusi\04SE\StueckeFuerSE\BachAir.mus""", vbNormalFocus)
    End Sub
  4. Code anpassen: Stelle sicher, dass die Pfade und Dateinamen korrekt sind. Achte dabei auf Leerzeichen und spezielle Zeichen.

  5. Makro ausführen: Drücke F5, um das Makro auszuführen.


Häufige Fehler und Lösungen

  • Fehler: Ungültiger Prozeduraufruf oder ungültiges Argument

    • Lösung: Überprüfe, ob der Pfad und die Datei existieren. Stelle sicher, dass die Datei eine ausführbare Datei (.exe) oder eine Verknüpfung (.lnk) ist.
  • Fehler: Datei nicht gefunden

    • Lösung: Achte darauf, dass der Dateiname und der Pfad korrekt eingegeben sind. Überprüfe auch, ob die Datei im angegebenen Verzeichnis vorhanden ist.
  • Fehler: Erwartet Listentrennzeichen oder )

    • Lösung: Stelle sicher, dass die Syntax korrekt ist und dass du die Argumente im Shell-Befehl richtig trennst. Zum Beispiel sollte der Befehl zwei Argumente mit einem Komma trennen.

Alternative Methoden

  • Verwendung von ShellExecute: Anstatt Shell zu verwenden, kannst du auch die ShellExecute-API nutzen, um Dateien zu öffnen. Dies ermöglicht mehr Flexibilität bei den Dateitypen.

    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
    
    Sub OpenFile()
        ShellExecute 0, "open", "C:\MY\aaMusi\04SE\StueckeFuerSE\BachAir.mus", vbNullString, vbNullString, 1
    End Sub

Praktische Beispiele

  • Beispiel mit einer ausführbaren Datei:

    Sub openNotepad()
        Dim Ergebnis
        Ergebnis = Shell("notepad.exe", vbNormalFocus)
    End Sub
  • Beispiel mit einer Verknüpfung:

    Sub openMyLink()
        Dim Ergebnis
        Ergebnis = Shell("C:\Users\DeinName\Desktop\MeineVerknuepfung.lnk", vbNormalFocus)
    End Sub

Tipps für Profis

  • Doppelte Anführungszeichen: Wenn der Pfad Leerzeichen enthält, musst du ihn in doppelte Anführungszeichen setzen. Zum Beispiel:

    Shell """C:\Program Files (x86)\MyApp.exe"" ""C:\My Documents\MyFile.txt"""
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um informative Fehlermeldungen auszugeben, falls etwas schiefgeht.

    On Error GoTo FehlerHandler
    ' Dein Code hier
    Exit Sub
    
    FehlerHandler:
        MsgBox "Fehler " & Err.Number & ": " & Err.Description

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Shell und ShellExecute? Der Shell-Befehl in VBA eröffnet eine Anwendung, während ShellExecute mehr Optionen bietet, wie das Öffnen von Dateien in den Standardanwendungen.

2. Warum bekomme ich die Fehlermeldung "ungültiger Prozeduraufruf oder ungültiges Argument"? Diese Fehlermeldung tritt häufig auf, wenn der Pfad oder die Datei nicht korrekt angegeben ist oder wenn du versuchst, eine Datei zu öffnen, die nicht ausführbar ist.

3. Wie kann ich Leerzeichen im Pfad handhaben? Um Probleme mit Leerzeichen zu vermeiden, setze den gesamten Pfad in doppelte Anführungszeichen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige