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

Forumthread: GetOpenFilename-Methode, best. Dateien

GetOpenFilename-Methode, best. Dateien
26.05.2009 10:50:27
Werner
Hallo Zusammen,
ist es möglich, sich bei der GetOpenFilename-Methode bestimmte Dateien anzeigen zu lassen?
Im nachfolgendem Beispiel werden alle Excel-Dateien des aktuellen Pfades aufgelistet:

ChDrive ThisWorkbook.Path
CHDir ThisWorkbook.Path
fileToOpen = Application.GetOpenFilename("Excel (*.xls), *.xls")
If fileToOpen  False Then
For PathLen = Len(fileToOpen) To 1 Step -1
If Mid$(fileToOpen, PathLen , 1) = "\" Then Exit For
Next
folderToOpen = Right(fileToOpen, Len(fileToOpen) - PathLen
Msgbox= folderToOpen
End If


Ich möchte jedoch nur ganz bestimmte Excel-Dateien angezeigt bekommen.
Da die Namenskonvention immer gleich ist, sollten hier nur die Excel-Dateien angezeigt werden.
Die Namenskonvention ist: "JAP*.xls"
Ist das bei dieser Methode überhaupt möglich?
Danke und Gruß
Werner

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: GetOpenFilename-Methode, best. Dateien
26.05.2009 11:12:47
Tino
Hallo,
so z. Bsp.

Dim fileToOpen As String
fileToOpen = Application.GetOpenFilename("Excel File (JAP*.xls),JAP*.xls,Excel File(*.xls),*.xls")


Gruß Tino

AW: GetOpenFilename-Methode, best. Dateien
26.05.2009 11:21:38
Werner
Hallo Tino,
diesen Ansatz hatte ich auch schon versucht, er zeigt mir aber auch hier alle Excel-Datein weiterhin an, leider.
Danke Dir, aber evtl. gibt es ja doch noch eine Möglichkeit?
Werner
Anzeige
AW: GetOpenFilename-Methode, best. Dateien
26.05.2009 11:43:42
Tino
Hallo,
vielleicht hat die Syntax bei dir nicht gestimmt, bei mir funktioniert es.
Userbild
Gruß Tino
AW: GetOpenFilename-Methode, best. Dateien
26.05.2009 11:55:52
Werner
Hallo Tino,
die Syntax müsste stimmen...
Hier die VBA-Syntax:

Private Sub CommandButton1_Click()
Dim fileToOpen As String
ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path
fileToOpen = Application.GetOpenFilename("Excel File (JAP*.xls),JAP*.xls,Excel File(*.xls),* _
.xls")
'fileToOpen = Application.GetOpenFilename("Excel (*.xls), *.xls")
If fileToOpen  False Then
For PathLen = Len(fileToOpen) To 1 Step -1
If Mid$(fileToOpen, PathLen, 1) = "\" Then Exit For
Next
folderToOpen = Right(fileToOpen, Len(fileToOpen) - PathLen)
MsgBox folderToOpen
End If
End Sub


und hier die Maske:
vorher:
Userbild
nachher:
Userbild
evtl. liegt es an der Version?
Gruß
Werner

Anzeige
keine Ahnung warum es bei dir nicht geht. oT.
26.05.2009 12:03:46
Tino
hier noch eine Möglichkeit...
26.05.2009 12:22:07
Tino
Hallo,
vielleicht geht es hiermit.
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
    Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    Flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As Long
End Type

 

Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_READONLY = &H1
Private Const OFN_HIDEREADONLY = &H4

Function DateiOeffnen(Optional Titel, Optional Filter, Optional DefExtension, Optional AktDir) As String
    Dim strDateiname As String
    Dim strDlgTitel As String
    Dim strFilter As String
    Dim strDefExtension As String
    Dim strAktDir As String
    Dim strNull As String
    Dim OpenDlg As OPENFILENAME
    strNull = Chr$(0)
    strDateiname = String$(512, 0)
    If IsMissing(Titel) Then
        strDlgTitel = "Datei öffnen" & strNull
    Else
        strDlgTitel = Titel & strNull
    End If
    If IsMissing(Filter) Then
        strFilter = "Alle Dateien" & strNull & "*.*" & strNull & strNull
    Else
        strFilter = Filter & strNull
    End If
    If IsMissing(DefExtension) Then
        strDefExtension = strNull
    Else
        strDefExtension = DefExtension & strNull
    End If
    If IsMissing(AktDir) Then
        strAktDir = CurDir$ & strNull
    Else
        strAktDir = AktDir & strNull
    End If
   
   With OpenDlg
        .lStructSize = Len(OpenDlg)
        .hwndOwner = Application.Hwnd
        .lpstrFilter = strFilter
        .nFilterIndex = 1
        .lpstrFile = strDateiname
        .nMaxFile = Len(strDateiname)
        .lpstrInitialDir = strAktDir
        .lpstrTitle = strDlgTitel
        .Flags = OFN_FILEMUSTEXIST Or OFN_READONLY
        .lpstrDefExt = strDefExtension
        If GetOpenFileName(OpenDlg) <> 0 Then
            DateiOeffnen = Left$(.lpstrFile, InStr(.lpstrFile, strNull) - 1)
        Else
            DateiOeffnen = ""
        End If
    End With
End Function

Sub dateiOeffnen_Dialog()
    Dim sPfad As String, sDatei As String
    
    'hier den Suchpfad eingeben 
    sPfad = ThisWorkbook.Path
    
    sDatei = DateiOeffnen("Datei öffnen", "Excel File (JAP*.xls)" & Chr$(0) & "JAP*.xls", "*.xls", s1)
    MsgBox sDatei
End Sub


Gruß Tino

Anzeige
AW: hier noch eine Möglichkeit...
26.05.2009 12:47:22
Tino
Hallo,
mach aus s1 noch sPfad.
Gruß Tino
Das funzt!
26.05.2009 12:56:13
Werner
Hallo Tino.
Sieht gut aus!!!
Userbild
Diesen Ansatz werde ich weiter verfolgen.
1000-Dank für Deinen Einsatz!
Gruß
Werner
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

GetOpenFilename-Methode: Bestimmte Dateien auswählen


Schritt-für-Schritt-Anleitung

Um in Excel mittels VBA die GetOpenFilename-Methode zu verwenden und nur bestimmte Dateien anzuzeigen, gehe folgendermaßen vor:

  1. Öffne den VBA-Editor: Drücke ALT + F11.

  2. Füge ein neues Modul hinzu: Rechtsklicke im Projektfenster und wähle Einfügen > Modul.

  3. Gib den folgenden Code ein:

    Private Sub CommandButton1_Click()
       Dim fileToOpen As String
       ChDrive ThisWorkbook.Path
       ChDir ThisWorkbook.Path
       fileToOpen = Application.GetOpenFilename("Excel File (JAP*.xls),JAP*.xls,Excel File(*.xls),*.xls")
    
       If fileToOpen <> False Then
           MsgBox "Ausgewählte Datei: " & fileToOpen
       End If
    End Sub
  4. Passe den Filter an: Ändere die Filterkriterien im GetOpenFilename-Aufruf, um nur die gewünschten Excel-Dateien anzuzeigen.

  5. Führe das Makro aus: Klicke auf den CommandButton im Formular.


Häufige Fehler und Lösungen

  • Problem: Es werden weiterhin alle Excel-Dateien angezeigt.

    • Lösung: Überprüfe die Syntax im GetOpenFilename-Aufruf. Achte darauf, dass der Filter korrekt gesetzt ist, und benutze das richtige Dateiformat.
  • Problem: Der Code gibt einen Fehler zurück.

    • Lösung: Stelle sicher, dass die Variablen korrekt deklariert sind und die Excel-Version die GetOpenFilename-Methode unterstützt.

Alternative Methoden

Falls die GetOpenFilename-Methode nicht die gewünschten Ergebnisse liefert, kannst du die Windows-API-Funktion GetOpenFileName verwenden. Hier ein Beispiel:

Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    Flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As Long
End Type

Mit dieser Methode kannst du spezifische Dateifilter und Dialogoptionen anpassen.


Praktische Beispiele

Hier sind zwei Beispiele, um spezifische Excel-Dateien auszuwählen:

  1. Filter für bestimmte Dateinamen:

    fileToOpen = Application.GetOpenFilename("Excel File (JAP*.xls),JAP*.xls")
  2. Mehrfachauswahl aktivieren:

    fileToOpen = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , "Wähle eine Datei", , True)

Beachte, dass das Multiselect-Feature nur funktioniert, wenn True als letzten Parameter übergeben wird.


Tipps für Profis

  • Verwendung von ChDrive und ChDir: Diese Befehle helfen dabei, das aktuelle Verzeichnis vor dem Öffnen der Datei festzulegen. So kannst du sicherstellen, dass der Dialog im richtigen Ordner startet.

  • Fehlerbehandlung: Füge eine Fehlerbehandlung in dein Makro ein, um unerwartete Situationen abzufangen. Zum Beispiel:

    On Error Resume Next
  • Dokumentation: Halte deine VBA-Codes gut dokumentiert, um später schnell Anpassungen vornehmen zu können.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Dateien auswählen? Um mehrere Dateien auszuwählen, setze den letzten Parameter in der GetOpenFilename-Methode auf True.

2. Funktioniert die GetOpenFilename-Methode in allen Excel-Versionen? Ja, die GetOpenFilename-Methode ist in den meisten Versionen von Excel verfügbar, allerdings können einige Funktionen je nach Version variieren. Achte darauf, dass deine Excel-Version aktuell ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige