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

Forumthread: mit VBA Datei aus Explorer öffnen

mit VBA Datei aus Explorer öffnen
06.05.2020 18:05:54
Frank
Hallo,
mit folgendem Code kann ich eine PDF-Datei aus dem Explorer öffnen..
Private Sub CommandButton1_Click()
Dim Datei As Variant
Dim myShell As Object
Datei = Application.GetOpenFilename("PDF-Dateien (*.pdf), *.pdf")
Set myShell = CreateObject("Shell.Application")
myShell.Open Datei
End Sub
Nun möchte ich aber, das wenn in einer Tabellenzeile ein Pfad angegen ist, dieser bevorzugt zu öffnen ist.
Wenn kein Pfad angegen ist, soll der Explorer mit dem Standardpfad öffnen.
Wie muss der Code abgeändert werden?
Danke und Gruß, Frank.
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit VBA Datei aus Explorer öffnen
06.05.2020 18:55:31
Martin
Hallo Frank,
meinst du es so?
Private Sub CommandButton1_Click()
Dim Datei As Variant
Dim myShell As Object
If ActiveCell.Text  Empty And Dir(ActiveCell.Text)  "" Then
ChDrive ActiveCell.Text
ChDir ActiveCell.Text
Else
ChDrive Application.DefaultFilePath
ChDir Application.DefaultFilePath
End If
Datei = Application.GetOpenFilename("PDF-Dateien (*.pdf), *.pdf")
Set myShell = CreateObject("Shell.Application")
myShell.Open Datei
End Sub
Viele Grüße
Martin
Anzeige
...kleine Optimierung
06.05.2020 19:06:06
Martin
Hallo Frank,
mir ist gerade aufgefallen, dass Excel zwingend ein Backslash ("\") am Ende der Pfadangabe erwartet, weil sonst der Verzeichniswechsel nicht klappt. Mit zwei Backslashs hintereinander ("\\") scheint Excel hingegen keine Probleme zu haben. Also setzen wir einfachen prinzipiell per VBA einen Backslash ans Ende:
Private Sub CommandButton1_Click()
Dim Datei As Variant
Dim myShell As Object
If ActiveCell.Text  Empty And Dir(ActiveCell.Text)  "" Then
ChDrive ActiveCell.Text & Application.PathSeparator
ChDir ActiveCell.Text
Else
ChDrive Application.DefaultFilePath
ChDir Application.DefaultFilePath
End If
Datei = Application.GetOpenFilename("PDF-Dateien (*.pdf), *.pdf")
Set myShell = CreateObject("Shell.Application")
myShell.Open Datei
End Sub
Viele Grüße
Martin
Anzeige
AW: ...kleine Optimierung
06.05.2020 19:39:52
Frank
Vielen Dank!
Funktioniert super, aber wo hast du dann den Backslash eingesetzt damit es funktioniert?
AW: ...kleine Optimierung
06.05.2020 19:41:38
Frank
Achso... gefunden!
Application.PathSeparator
AW: ...kleine Optimierung
06.05.2020 20:22:28
Frank
Nun habe ich die gleiche Situation in einem anderen Code, welche die gleiche Funktion wie zuvor genannt erhalten soll. Wie muss dieser Umgebaut werden?
Hier mal nur den Anfang des Codes...
Dim fso As Object
Dim txt As Object
Dim z As Integer
Dim s As Integer
Dim temp As String
Dim datName As Variant
'TabEinAus exportieren
TabEinAus:
datName = Application.GetSaveAsFilename("DatensaetzeEinAus.txt", filefilter:="Textdateien (*.txt), *.txt")
If datName = False Then GoTo TabJahresbrutto
Set fso = CreateObject("Scripting.FileSystemObject")
Set txt = fso.CreateTextFile(datName, True)
Gruß Frank.
Anzeige
AW: ...kleine Optimierung
06.05.2020 20:47:06
Martin
Hallo Frank,
da kannst du den identischen Code verwenden. Jedoch sollte man es vermeiden identische Codes zu verwenden, um nachträgliche Änderungen nicht an unzähligen Stellen im Code vornehmen zu müssen und eine gewisse Übersichtlichkeit zu bewahren. Deshalb habe ich den Code in ein separates Makro ausgelagert und lediglich mit Call SetDirectory auf dieses Makro verwiesen:
Private Sub CommandButton1_Click()
Dim Datei As Variant
Dim myShell As Object
Call SetDirectory
Datei = Application.GetOpenFilename("PDF-Dateien (*.pdf), *.pdf")
Set myShell = CreateObject("Shell.Application")
myShell.Open Datei
End Sub

Dim fso As Object
Dim txt As Object
Dim z As Integer
Dim s As Integer
Dim temp As String
Dim datName As Variant
'TabEinAus exportieren
TabEinAus:
Call SetDirectory
datName = Application.GetSaveAsFilename("DatensaetzeEinAus.txt", filefilter:="Textdateien (* _
.txt), *.txt")
'If datName = False Then GoTo TabJahresbrutto
Set fso = CreateObject("Scripting.FileSystemObject")
Set txt = fso.CreateTextFile(datName, True)


Sub SetDirectory()
With Application
If ActiveCell.Text  Empty And Dir(ActiveCell.Text)  "" Then
ChDrive ActiveCell.Text & .PathSeparator
ChDir ActiveCell.Text
Else
ChDrive .DefaultFilePath & .PathSeparator
ChDir .DefaultFilePath
End If
End With
End Sub
Viele Grüße
Martin
Anzeige
AW: ...kleine Optimierung
06.05.2020 21:23:14
Frank
Hallo Martin,
ich habe nun herausgefunden, das dein Code bei wenigen Unterverzeichnisse nicht funktioniert.
Erst ab zwei Unterordner im Pfad spricht dein Code an...
An was kann das liegen?
Gruß Frank.
AW: ...kleine Optimierung
06.05.2020 21:37:12
Martin
Hallo Frank,
das ist echt etwas kurios, aber du hast Recht. Bei der Prüfung ob der Pfad gültig ist, habe ich keinen Backslash am Ende eingefügt:
Sub SetDirectory()
With Application
If ActiveCell.Text  Empty And Dir(ActiveCell.Text & .PathSeparator)  "" Then
ChDrive ActiveCell.Text & .PathSeparator
ChDir ActiveCell.Text
Else
ChDrive .DefaultFilePath & .PathSeparator
ChDir .DefaultFilePath
End If
End With
End Sub
Viele Grüße
Martin
Anzeige
AW: ...kleine Optimierung
06.05.2020 22:11:10
Frank
Vielen Dank für deine Mühe!
Der Fehler besteht immer noch...
Der Pfad z.B. D:\xxx\xxx\ und weniger Unterordner funktioniert nicht.
Erst der Pfad D:\xxx\xxx\xxx\ und mehr Unterordner funktioniert...?
Bist du dir da sicher?
06.05.2020 22:31:30
Martin
Hallo Frank,
nichts ist schlimmer als ein Fehler, der nicht nachvollziehbar ist. Ich habe es gerade mit zwei Laufwerken bei mir getestet und es klappt wunderbar. Teste doch den Code mal im Einzelschrittmodus (Funktionstaste 8) durch und prüfe, ob der Pfad in der Zeile mit Dir als gültig anerkannt wird. Am liebsten würde ich mit Teamviewer auf deinen Rechner schauen ;-)
Viele Grüße
Martin
Anzeige
AW: Bist du dir da sicher?
06.05.2020 22:34:46
Frank
Hallo Martin,
ich habe deinen Code mal abgeändert und würde auch so ohne Probleme funktionieren...
If Sheets("Berechnung").Range("B34").Text = "" Then
ChDrive Application.DefaultFilePath
ChDir Application.DefaultFilePath
Else
ChDrive Sheets("Berechnung").Range("B34").Text
ChDir Sheets("Berechnung").Range("B34").Text
End If
Gruß Frank
Anzeige
AW: Bist du dir da sicher?
06.05.2020 22:58:15
Martin
Hallo Frank,
du hast in der Aufgabenstellung nicht erwähnt, dass der Pfad immer in Zelle B34 steht. Ich habe deshalb immer die selektierte Zelle abgefragt. Lag es daran?
Viele Grüße
Martin
AW: Bist du dir da sicher?
06.05.2020 23:06:08
Frank
Hallo Martin,
in deines Codes habe ich immer die Zelle B34 ergänzt, ab drei Unterordner funktionierte dieses.
Der Fehler ist nur aufgetreten, wenn weniger Unterordner vorhanden waren.
Aber du hast Recht, der Pfad steht immer in der gleichen Zelle B34.
Wenn das ein Unterschied macht, war es mein Fehler es nicht zu erwähnen.
Aber ich wusste nicht, das dieses eine entscheidende Rolle spielt, Sorry für deine Umstände.
Du hast mir denoch sehr geholfen, Danke.
Gruß Frank.
Anzeige
Danke für das Feedback, hauptsache es geht! owT
06.05.2020 23:13:28
Martin
o.T.
;
Anzeige
Anzeige

Infobox / Tutorial

Mit VBA Datei aus dem Explorer öffnen


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Excel mit ALT + F11.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDateiName)" > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Private Sub CommandButton1_Click()
       Dim Datei As Variant
       Dim myShell As Object
    
       If ActiveCell.Text <> "" And Dir(ActiveCell.Text) <> "" Then
           ChDrive ActiveCell.Text & Application.PathSeparator
           ChDir ActiveCell.Text
       Else
           ChDrive Application.DefaultFilePath
           ChDir Application.DefaultFilePath
       End If
    
       Datei = Application.GetOpenFilename("PDF-Dateien (*.pdf), *.pdf")
       Set myShell = CreateObject("Shell.Application")
       myShell.Open Datei
    End Sub
  4. Erstelle einen Button in deinem Excel-Arbeitsblatt und verlinke diesen mit dem Makro.

  5. Führe das Makro aus, um den PDF-Explorer zu öffnen und eine Datei auszuwählen.


Häufige Fehler und Lösungen

  • Problem: Der Code funktioniert nicht, wenn die Zelle leer ist.
    Lösung: Stelle sicher, dass der Pfad in der aktiven Zelle korrekt angegeben ist. Der Code prüft, ob der Text in der Zelle nicht leer ist und ob der Pfad existiert.

  • Problem: Fehler beim Öffnen von Verzeichnissen mit wenigen Unterordnern.
    Lösung: Achte darauf, dass der Pfad immer mit einem Backslash (\) endet. Dies kann durch Application.PathSeparator sichergestellt werden.


Alternative Methoden

Eine einfache Möglichkeit, den VBA Explorer zu öffnen und eine Datei auszuwählen, ist die Verwendung von Application.GetOpenFilename. Dieser Befehl öffnet ein Dialogfenster, in dem Du eine Datei auswählen kannst. Hier ist ein Beispiel:

Dim Datei As Variant
Datei = Application.GetOpenFilename("Excel-Dateien (*.xls; *.xlsx), *.xls; *.xlsx")

Mit dieser Methode kannst Du auch Excel-Dateien öffnen und nicht nur PDFs.


Praktische Beispiele

  1. PDF-Datei öffnen:

    Private Sub CommandButton1_Click()
       Dim Datei As Variant
       Datei = Application.GetOpenFilename("PDF-Dateien (*.pdf), *.pdf")
       If Datei <> False Then
           Shell "explorer.exe """ & Datei & """", vbNormalFocus
       End If
    End Sub
  2. Verzeichnis öffnen:

    Private Sub CommandButton2_Click()
       Dim Verzeichnis As String
       Verzeichnis = "C:\Dein\Pfad"
       Shell "explorer.exe " & Verzeichnis, vbNormalFocus
    End Sub

Tipps für Profis

  • Verwende den VBA Shell Explorer, um direkt auf Dateien oder Verzeichnisse zuzugreifen. Mit Shell kannst Du den Windows Explorer steuern.
  • Nutze Application.DefaultFilePath, um den Standardpfad festzulegen, falls kein Pfad in der Zelle angegeben ist.
  • Verwende die Funktion Application.GetOpenFilename, um dem Benutzer die Auswahl von Dateien zu ermöglichen, während Du sicherstellst, dass die Dateitypen korrekt gefiltert werden.

FAQ: Häufige Fragen

1. Wie öffne ich eine Excel-Datei mit VBA?
Du kannst eine Excel-Datei öffnen, indem Du den Befehl Workbooks.Open verwendest, gefolgt vom Pfad zur Datei.

2. Was ist der Unterschied zwischen GetOpenFilename und Open?
GetOpenFilename öffnet ein Dialogfenster zur Dateiauswahl, während Open direkt eine Datei basierend auf dem angegebenen Pfad öffnet.

3. Wie kann ich den Standardpfad für das Öffnen von Dateien festlegen?
Verwende Application.DefaultFilePath, um den Standardpfad für das Öffnen von Dateien festzulegen.

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