Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
(Makro) Fenster öffnet nicht
#9
Ich habe mal folgende Anfrage an Copilot gestellt:
Kannst Du mir bitte folgenden VBA-Code analysieren?
Set wShell = CreateObject("WScript.Shell")
Set oExec = wShell.Exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""")
sFileSelected = oExec.StdOut.ReadLine

Die Antwort war:
Der Code, den du zeigst, ist ein bekannter VBA‑Trick, um einen Dateiauswahldialog ohne API‑Deklarationen zu öffnen – aber er nutzt dafür einen eher ungewöhnlichen und sicherheitstechnisch fragwürdigen Weg über mshta.exe und eingebettetes HTML/JavaScript.

? Was der Code macht – in Klartext
Der Ablauf ist:

WScript.Shell wird erzeugt.

Über wShell.Exec wird mshta.exe gestartet – ein Host für HTML‑Anwendungen.

mshta lädt eine Mini‑HTML‑Seite aus einem about:‑String:

Sie enthält ein <input type=file>‑Element.

Ein Script führt automatisch FILE.click() aus → der Dateiauswahldialog öffnet sich.

Nach der Auswahl wird der Dateipfad über GetStandardStream(1).WriteLine(FILE.value) an VBA zurückgegeben.

Das Fenster wird sofort geschlossen und auf Größe 0×0 gesetzt.

VBA liest die Ausgabe über oExec.StdOut.ReadLine.

Ergebnis:
sFileSelected enthält den vollständigen Pfad der ausgewählten Datei.

? Detaillierte Analyse der einzelnen Teile
1. Erzeugen des Shell‑Objekts
vba
Set wShell = CreateObject("WScript.Shell")
Standard‑VBA‑Technik, um externe Programme zu starten.

2. Starten von mshta.exe mit eingebettetem HTML
vba
Set oExec = wShell.Exec("mshta.exe ""about:<input type=file id=FILE> ... """)
mshta.exe ist ein Windows‑Programm, das HTML‑Anwendungen (HTA) ausführt.

Der about:‑Trick erlaubt, HTML direkt als String zu übergeben.

Das HTML erzeugt ein unsichtbares Fenster mit einem Dateiauswahlfeld.

3. Automatisches Öffnen des Dateidialogs
html
FILE.click();
Das <input type=file> wird automatisch geklickt → der Benutzer sieht den Dateiauswahldialog.

4. Rückgabe des Dateipfads
js
new ActiveXObject('Scripting.FileSystemObject')
    .GetStandardStream(1)
    .WriteLine(FILE.value);
GetStandardStream(1) = Standard Output (stdout)

WriteLine(FILE.value) = gibt den Dateipfad an VBA zurück

5. Lesen der Ausgabe in VBA
vba
sFileSelected = oExec.StdOut.ReadLine
Damit landet der Dateiname in der Variablen.

⚠️ Sicherheits- und Kompatibilitätsaspekte
1. mshta.exe ist veraltet
Microsoft stuft mshta.exe inzwischen als deprecated ein.
Viele Admins blockieren es, weil es oft für Malware missbraucht wurde.

2. ActiveX + HTA = potenziell unsicher
Der Code ist harmlos, aber die Technik ist dieselbe, die Schadsoftware nutzt.

3. Funktioniert nicht mehr zuverlässig
Unter Windows 11 teilweise blockiert

Unter restriktiven Gruppenrichtlinien oft deaktiviert

In Office mit gehärteten Makroeinstellungen kann es scheitern

? Vorteile der Methode
Kein API‑Code nötig

Funktioniert ohne Referenzen

Sehr kompakt

Öffnet einen echten Windows‑Dateidialog

? Nachteile
Abhängig von mshta.exe (veraltet, unsicher)

Kann durch Sicherheitsrichtlinien blockiert sein

Nicht zukunftssicher

Nicht plattformübergreifend (nur Windows)

? Empfohlene Alternative (viel sicherer & stabiler)
Wenn du nur einen Dateidialog brauchst, ist FileDialog die beste Lösung:

vba
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)

If fd.Show = -1 Then
    sFileSelected = fd.SelectedItems(1)
End If
Keine externen Programme

Keine ActiveX‑Tricks

Funktioniert in allen modernen Office‑Versionen
Zitieren


Nachrichten in diesem Thema
(Makro) Fenster öffnet nicht - von Vittel - 18.02.2026, 14:50
RE: (Makro) Fenster öffnet nicht - von Vittel - 18.02.2026, 17:26
RE: (Makro) Fenster öffnet nicht - von Vittel - 20.02.2026, 18:37
RE: (Makro) Fenster öffnet nicht - von RPP63 - 01.03.2026, 17:10
RE: (Makro) Fenster öffnet nicht - von RPP63 - 21.02.2026, 09:12
RE: (Makro) Fenster öffnet nicht - von Vittel - 21.02.2026, 10:16
RE: (Makro) Fenster öffnet nicht - von Vittel - 26.02.2026, 13:45
RE: (Makro) Fenster öffnet nicht - von RPP63 - 28.02.2026, 11:03
RE: (Makro) Fenster öffnet nicht - von RPP63 - 28.02.2026, 11:07
RE: (Makro) Fenster öffnet nicht - von Vittel - 01.03.2026, 21:43

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions