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

Forumthread: Per VBA Datei öffnen

Per VBA Datei öffnen
04.03.2022 17:07:07
Günther
Hallo in die Expertenrunde,
ich habe eine kleine Frage zu dem Öffnen einer Datei per VBA mittels SHELL und CMD unter der Rahmenbedingung, dass der Dateiname ein & enthält.

shell "cmd /C ""C:\temp\A und B.pdf""" 'funktioniert
shell "cmd /C ""C:\temp\A & B.pdf""" 'funktioniert nicht
Gibt es einen Weg, dies ohne voriges Umbenennen der Datei zu lösen? Wenn ja, wie?
Danke im Voraus für alle Rückmeldungen.
Grüße
Günther
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Per VBA Datei öffnen
05.03.2022 08:13:01
Peter
Aus anderen Zusammenhängen kenne ich, dass man manchmal das "&" verdoppeln muss! Teste mal!
AW: Per VBA Datei öffnen
04.03.2022 17:25:33
Nepumuk
Hallo Günther,
versuch es so:

Option Explicit
Private Declare PtrSafe Function ShellExecuteA Lib "shell32.dll" ( _
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 LongPtr
Private Const SW_MAXIMIZE As Long = 3
Public Sub Test()
ShellExecuteA 0, "OPEN", "C:\temp\A & B.pdf", vbNullString, vbNullString, SW_MAXIMIZE
End Sub
Gruß
Nepumuk
Anzeige
AW: Per VBA Datei öffnen
04.03.2022 22:06:58
Günther
Danke Nepumuk - funktioniert bestens - es ist immer ein Vergnügen, vom Profi zu lernen ...
Grüße
Günther
AW: Per VBA Datei öffnen
06.03.2022 15:36:44
Günther
Hallo Nepumuk,
ich habe mich leider zu früh gefreut :-(
Die Lösung mit ShellExecuteA lässt sich zwar von &-Zeichen nicht beirren, dafür werden aber Unicode-Zeichen im Dateinamen nicht unterstützt.
(Mein bevorzugtes Unicode-Testzeichen ist ≤ oder ≥ .)
Selbiges ist wiederum für die Shell/CMD-Variante kein Problem.
Sollte ein Dateiname aber &-Zeichen UND Unicode-Zeichen beinhalten, geht keine der beiden Varianten ... :-(
Kennst Du noch eine Alternative?
Viuele Grüße und Danke
Günther
Anzeige
AW: Per VBA Datei öffnen
06.03.2022 17:04:58
Nepumuk
Hallo Günther,
dann versuch es so:

Option Explicit
Private Declare PtrSafe Function ShellExecuteW Lib "shell32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal lpOperation As LongPtr, _
ByVal lpFile As LongPtr, _
ByVal lpParameters As LongPtr, _
ByVal lpDirectory As LongPtr, _
ByVal nShowCmd As Long) As LongPtr
Private Const SW_MAXIMIZE As Long = 3
Public Sub Test()
Dim strFilename As String
strFilename = Dir("C:\temp\*.pdf")
ShellExecuteW 0, StrPtr("OPEN"), StrPtr("C:\temp\Test" & ChrW$(&H2264) & ".pdf"), 0, 0, SW_MAXIMIZE
End Sub
Meine Testdatei hat den Namen: Test≤.pdf
Gruß
Nepumuk
Anzeige
AW: Per VBA Datei öffnen
07.03.2022 09:25:15
Günther
Hallo Nepumuk,
Danke Dir - funktioniert super!
Grüße Günther
AW: Per VBA Datei öffnen
06.03.2022 17:31:30
Anton
Hallo Günther ,
probier es so:

Sub b()
  Dim pfad As String  
  pfad = Range("A1")  'Pfad in Zelle A1 speichern
  CreateObject("Shell.Application").ShellExecute pfad, "", "", "open", 1
End Sub  

mfg Anton
Anzeige
AW: Per VBA Datei öffnen
07.03.2022 09:24:07
Günther
Hallo Anton,
Danke Dir - funktioniert super!
Grüße Günther
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dateien mit VBA in Excel öffnen


Schritt-für-Schritt-Anleitung

  1. Öffnen des VBA-Editors: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Einfügen eines Moduls: Rechtsklicke im Projektfenster auf „VBAProject (DeineDatei.xlsm)“ und wähle Einfügen > Modul.
  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Option Explicit
    Private Declare PtrSafe Function ShellExecuteA Lib "shell32.dll" ( _
       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 LongPtr
    Private Const SW_MAXIMIZE As Long = 3
    
    Public Sub DateiÖffnen()
       ShellExecuteA 0, "OPEN", "C:\temp\A & B.pdf", vbNullString, vbNullString, SW_MAXIMIZE
    End Sub
  4. Anpassen des Dateipfades: Ersetze C:\temp\A & B.pdf mit dem Pfad und Dateinamen, den du öffnen möchtest.
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Fehler bei verbotenen Zeichen: Wenn der Dateiname ein &-Zeichen enthält, musst du es möglicherweise verdoppeln. Teste den Namen als A && B.pdf.

  • Unicode-Zeichen: Wenn du Unicode-Zeichen wie ≤ oder ≥ im Dateinamen verwenden möchtest, benutze die ShellExecuteW-Funktion. Beispiel:

    Private Declare PtrSafe Function ShellExecuteW Lib "shell32.dll" ( _
       ByVal hwnd As LongPtr, _
       ByVal lpOperation As LongPtr, _
       ByVal lpFile As LongPtr, _
       ByVal lpParameters As LongPtr, _
       ByVal lpDirectory As LongPtr, _
       ByVal nShowCmd As Long) As LongPtr

Alternative Methoden

  1. Datei öffnen mit CreateObject:

    Sub DateiÖffnenMitShell()
       Dim pfad As String
       pfad = Range("A1") ' Pfad in Zelle A1 speichern
       CreateObject("Shell.Application").ShellExecute pfad, "", "", "open", 1
    End Sub
  2. Access VBA: Wenn du Access verwendest, kannst du mit ähnlichem Code Dateien öffnen. Verwende die DoCmd-Funktion, um beliebige Dateien zu finden und zu öffnen.


Praktische Beispiele

  • Öffnen einer PDF-Datei:

    Public Sub PDFÖffnen()
       Shell "cmd /C ""C:\temp\deine_datei.pdf"""
    End Sub
  • Öffnen einer DLL-Datei:

    Public Sub DLLÖffnen()
       ShellExecuteW 0, StrPtr("OPEN"), StrPtr("C:\temp\deine_datei.dll"), 0, 0, SW_MAXIMIZE
    End Sub

Tipps für Profis

  • Verwende Variablen: Um den Code flexibler zu gestalten, speichere Dateipfade in Variablen.

  • Fehlerbehandlung: Implementiere On Error GoTo für eine bessere Kontrolle bei Fehlern.

  • Testzeichen: Achte auf die korrekte Handhabung von Testzeichen, um sicherzustellen, dass die Datei ohne Probleme geöffnet wird.


FAQ: Häufige Fragen

1. Wie kann ich eine Excel-Datei über VBA öffnen?
Du kannst eine Excel-Datei öffnen, indem du Workbooks.Open "Pfad\zur\Datei.xlsx" verwendest.

2. Unterstützt VBA alle Dateiformate?
VBA kann die meisten Dateiformate öffnen, aber für spezielle Formate wie DLL oder andere nicht-native Formate kann es Einschränkungen geben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige