Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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.

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
...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
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.

6 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige