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

Forumthread: GetOpenFilename --> Abbrechen

GetOpenFilename --> Abbrechen
22.04.2016 13:37:01
Christian
Hallo,
ich habe in einem Maakro einen Dateiimport verbaut.
Es funktioniert alles soweit.
Wenn aber der Import abgebrochen wird (also die Dateiauswahl) dann bekomme ich einen Fehler.
Was kann ich machen, damit beim Abbruch einfach das Makro beendet wird?
Private Sub cmd_import_Click()
Dim rng As Range
Dim pfad As String
Dim pfadlaenge As Integer
Dim datei As String
Dim dateilaenge As Integer
Dim blatt As String
Dim i As Double
Application.ScreenUpdating = False
blatt = "Tabelle1"
  pfad = Application.GetOpenFilename("Excel (*.xls), *.xls")
pfadlaenge = Len(pfad)
datei = Right(pfad, InStr(1, StrReverse(pfad), "\") - 1)
dateilaenge = Len(datei)
pfad = Left(pfad, pfadlaenge - dateilaenge)
ActiveSheet.Range("A2:K20000").Select
Selection.Delete
Call Hole_Daten("A2:A20000", "='" & pfad & "[" & datei & "]" & blatt & "'!A2:A20000")
Call Hole_Daten("B2:B20000", "='" & pfad & "[" & datei & "]" & blatt & "'!B2:B20000")
Call Hole_Daten("C2:C20000", "='" & pfad & "[" & datei & "]" & blatt & "'!C2:C20000")
Call Hole_Daten("D2:D20000", "='" & pfad & "[" & datei & "]" & blatt & "'!D2:D20000")
Call Hole_Daten("E2:E20000", "='" & pfad & "[" & datei & "]" & blatt & "'!E2:E20000")
Call Hole_Daten("F2:F20000", "='" & pfad & "[" & datei & "]" & blatt & "'!F2:F20000")
Call Hole_Daten("G2:G20000", "='" & pfad & "[" & datei & "]" & blatt & "'!G2:G20000")
Call Hole_Daten("H2:H20000", "='" & pfad & "[" & datei & "]" & blatt & "'!H2:H20000")
Call Hole_Daten("I2:I20000", "='" & pfad & "[" & datei & "]" & blatt & "'!I2:I20000")
Call Hole_Daten("J2:J20000", "='" & pfad & "[" & datei & "]" & blatt & "'!J2:J20000")
Call Hole_Daten("K2:K20000", "='" & pfad & "[" & datei & "]" & blatt & "'!K2:K20000")
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1) = 0 Then
Rows("" & i & ":1048576").Delete
Exit For
End If
Next
On Error Resume Next
For Each rng In Range("G2:K20000")
If rng.Value = "0" Then rng.ClearContents
Next
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: GetOpenFilename --> Abbrechen
22.04.2016 13:49:45
Daniel
Hi
pfad = Application.getopenfilename(...)
if not pfad like "*.xls" then Exit sub
Gruß Daniel

AW: GetOpenFilename --> Abbrechen
22.04.2016 16:47:44
Werner
Hallo Daniel,
ich wollte jetzt nicht nach Stunden eine weitere Version bringen, denn deine funktioniert ja. Ich habe aber eine Frage zu meiner Version. Spricht etwas gegen diese Art? Ich dachte, dass es so einfacher wird, wenn z.B. mehrere Dateiendungen vorgegeben wären.
If pfad = "Falsch" Then Exit Sub
Gruß vom Mitleser
Werner

Anzeige
AW: GetOpenFilename --> Abbrechen
25.04.2016 08:49:39
ChrisL
Hi Werner
Ich denke der Nachteil ist, dass diese Version nicht sprachunabhängig ist und z.B. auf einem englischsprachigen Rechner nicht funktioniert. Dann würde ich eher als Variant deklarieren
If pfad = False Then Exit Sub
cu
Chris

AW: GetOpenFilename --> Abbrechen
25.04.2016 09:26:50
Werner
Hallo Chris,
danke für den Hinweis.
Gruß Werner
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Anwendung von GetOpenFilename in VBA ohne Fehler beim Abbrechen


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen. Erstelle ein neues Modul über Einfügen > Modul.

  2. Code einfügen: Füge den folgenden Code in das Modul ein:

    Private Sub cmd_import_Click()
        Dim rng As Range
        Dim pfad As Variant
        Dim datei As String
        Dim blatt As String
        Dim i As Double
    
        Application.ScreenUpdating = False
        blatt = "Tabelle1"
    
        pfad = Application.GetOpenFilename("Excel (*.xls), *.xls")
    
        ' Überprüfe, ob der Benutzer abgebrochen hat
        If pfad = False Then Exit Sub
    
        ' Verarbeite die Datei
        datei = Mid(pfad, InStrRev(pfad, "\") + 1)
        ActiveSheet.Range("A2:K20000").ClearContents
    
        Call Hole_Daten("A2:A20000", "='" & pfad & "[" & datei & "]" & blatt & "'!A2:A20000")
        ' Weitere Daten abrufen...
    
        Application.ScreenUpdating = True
    End Sub
  3. Makro ausführen: Schließe den VBA-Editor und kehre zu Excel zurück. Führe das Makro aus, um die Datei auszuwählen. Der Import wird abgebrochen, ohne dass ein Fehler auftritt.


Häufige Fehler und Lösungen

  • Fehler F20000: Dieser Fehler tritt auf, wenn das Makro nicht korrekt auf eine Datei zugreifen kann. Stelle sicher, dass die Dateierweiterung korrekt angegeben ist und die Datei existiert.

  • Abbrechen führt zu Fehlern: Wenn das Makro beim Abbrechen der Dateiauswahl einen Fehler anzeigt, solltest Du die Rückgabewerte von Application.GetOpenFilename überprüfen. Verwende If pfad = False Then Exit Sub, um sicherzustellen, dass das Makro bei Abbruch ordnungsgemäß beendet wird.


Alternative Methoden

  1. FileDialog verwenden: Anstelle von Application.GetOpenFilename kannst Du auch Application.FileDialog(msoFileDialogFilePicker) verwenden:

    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    If fd.Show = -1 Then
        pfad = fd.SelectedItems(1)
    Else
        Exit Sub
    End If
  2. Mehrere Dateitypen zulassen: Du kannst den Filter in GetOpenFilename anpassen, um mehrere Dateitypen zuzulassen, z.B.:

    pfad = Application.GetOpenFilename("Excel Files (*.xls; *.xlsx), *.xls; *.xlsx")

Praktische Beispiele

  • Einfacher Import: Wenn Du nur eine Excel-Datei importieren möchtest, kannst Du den obigen Code verwenden. Achte darauf, den richtigen Blattsnamen und den Zellbereich anzupassen.

  • Dynamische Dateiauswahl: Wenn Du mehrere Dateiformate zulassen möchtest, erweitere die Filteroptionen:

    pfad = Application.GetOpenFilename("Excel Files (*.xls; *.xlsx), *.xls; *.xlsx, All Files (*.*), *.*")

Tipps für Profis

  • Fehlerbehandlung optimieren: Verwende On Error Resume Next, um unerwartete Fehler zu handhaben, aber stelle sicher, dass Du nach der Fehlerbehandlung wieder auf die Standardfehlerbehandlung zurückkehrst.

  • Benutzerfreundlichkeit: Füge informative Meldungen hinzu, um den Benutzer über den Status des Imports zu informieren, z.B. mit MsgBox.


FAQ: Häufige Fragen

1. Was passiert, wenn ich eine falsche Datei auswähle?
Wenn Du eine falsche Datei auswählst, wird das Makro abgebrochen, wenn Du die entsprechende Überprüfung (If pfad = False Then Exit Sub) implementierst.

2. Kann ich auch andere Dateiformate auswählen?
Ja, Du kannst den Filter im GetOpenFilename-Befehl anpassen, um andere Formate zuzulassen, wie z.B. .csv oder .txt.

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