Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

Ersatz für FileSearch in Userform

Betrifft: Ersatz für FileSearch in Userform von: Frank
Geschrieben am: 23.10.2014 10:23:46

Hallo Gemeinde,
ich habe mich vor fast 8 Jahren mal etwas mit Excel und VBA beschäftigt und einen Code mit Hilfe auch aus diesem Forum erstellt. Heute weis ich selbst nicht mehr genau, wie das alles funktioniert und bin darauf angewiesen alles Schritt für Schritt wieder nachzuvollziehen.
Sinn des Codes ist, dass ich in einer Userform Exceldateien eines bestimmten Ordners angezeigt bekomme. Hintergrund ist der, dass ich in diesem Ordner viele Daten abgelegt habe, die ich bei Bedarf in eine andere Exceldatei einlesen möchte.
Der nun folgende Code beinhaltet "FileSearch". Nun haben wir auf Excel 2013 umgestellt und ich stehe auf dem Schlauch, da es FileSearch ja nicht mehr gibt. Ich habe mit einigen Beispielen hier schon probiert, kriege es aber selbst nicht hin.
Wie kann ich den folgenden Code anpassen, damit ich die Funktion wiederbekomme?
Herzlichen Dank vorab
Frank

Private Sub UserForm_Initialize()


Dim Datei As String
Dim Pfad As String
Dim PfadL As String
Dim i As Integer
Dim Anzahl As Integer
Dim FeldD() As String
Dim M As Byte

Halt = 0

Pfad = ActiveWorkbook.Path
PfadL = Pfad & "\Discovererdaten Jugendliche\"

With Application.FileSearch
    .NewSearch
    .LookIn = PfadL
    .Filename = "*.xls"
    .Execute
    Anzahl = .FoundFiles.Count
End With

On Error Resume Next

ReDim FeldD(Anzahl)

i = 1

Datei = Dir(PfadL & "*.xls")
While Datei <> ""
    FeldD(i) = Datei
    i = i + 1
    Datei = Dir()
Wend

For i = 1 To Anzahl
    frm_Einlesen.lst_Import.AddItem (FeldD(i))
Next i

On Error GoTo 0

End Sub

  

Betrifft: AW: Ersatz für FileSearch in Userform von: Beverly
Geschrieben am: 23.10.2014 10:33:26

Hi Frank,

seit Excel2007 wird Application.FileSearch nicht mehr unterstützt - versuche es nach diesem Prinzip:

Sub mehrere_arbeitsmappen()
    Dim strVerzeichnis As String
    Dim strDatei As String
    Dim strTyp As String
    Dim strDateiname As String
    strTyp = "*.xls"
    strVerzeichnis = "D:\Test\"
    If Right(strVerzeichnis, 1) <> "\" Then strVerzeichnis = strVerzeichnis & "\"
    strDateiname = Dir(strVerzeichnis & strTyp)
    Do While strDateiname <> ""
        '... hier der Code was du mit der Mappe machen willst
    Loop
End Sub

GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Ersatz für FileSearch in Userform von: Frank
Geschrieben am: 23.10.2014 11:03:27

Hallo Karin,

ich habe deinen Code mal getestet. In meinem auszulesenden Ordner (bei dir "Test") habe ich zwei Dateien gelegt.
Wenn ich nun in deinen Code eine Msgbox einfüge, gibt es eine Endlosschleife und es wird nur die zweite Datei des Ordners angezeigt.
Habe ich da was falsch verstanden, bzw. muss ich noch was anpassen?

Sub mehrere_arbeitsmappen()
    Dim strVerzeichnis As String
    Dim strDatei As String
    Dim strTyp As String
    Dim strDateiname As String
    strTyp = "*.xls"
    strVerzeichnis = "F:\DIENST\Excel\JutaD\Discovererdaten Jugendliche\" '"D:\Test\"
    If Right(strVerzeichnis, 1) <> "\" Then strVerzeichnis = strVerzeichnis & "\"
    strDateiname = Dir(strVerzeichnis & strTyp)
    Do While strDateiname <> ""
    Msgbox strDateiname
        '... hier der Code was du mit der Mappe machen willst
    Loop
End 
Sub 

Gruß Frank



  

Betrifft: AW: Ersatz für FileSearch in Userform von: Beverly
Geschrieben am: 23.10.2014 11:14:59

Hi Frank,

sorry, da hatte ich aus meinem Originalcode 1 Zeile zu viel gelöscht

    Do While strDateiname <> ""
        '... hier der Code was du mit der Mappe machen willst
        strDateiname = Dir
    Loop


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Ersatz für FileSearch in Userform von: Frank
Geschrieben am: 23.10.2014 12:16:13

Hi Karin,
super, das hat mir schon etwas weitergeholfen.
Ich habe nun noch das Problem, dass ich nicht die Anzahl der Dateien weis, die im Ordner sind. Die bräuchte ich für die Schleife zum Einfügen in die Userform. Hast Du da noch eine Idee?
Um den Code zu testen, habe ich "Anzahl" jetzt willkürlich auf den Wert 2 gesetzt. Dann zeigt mir die Userform auch beide Dateien an, die im Ordner sind.

Gruß
Frank

Private Sub UserForm_Initialize()

    Dim strVerzeichnis As String
    Dim strDatei As String
    Dim strTyp As String
    Dim strDateiname As String
    Dim Pfad As String
    Dim PfadL As String
    Dim i As Integer
    Dim FeldD() As String
    Dim Anzahl As Integer
    Dim Halt As Integer

    Halt = 0
    
    Pfad = ActiveWorkbook.Path
    PfadL = Pfad & "\Discovererdaten Jugendliche\"

    strTyp = "*.xls"
    strVerzeichnis = "F:\DIENST\Excel\JutaD\Discovererdaten Jugendliche\" '"D:\Test\"
    If Right(strVerzeichnis, 1) <> "\" Then strVerzeichnis = strVerzeichnis & "\"
    strDateiname = Dir(strVerzeichnis & strTyp)
    Anzahl = 2
    
    On Error Resume Next
    
    ReDim FeldD(Anzahl)
    i = 1
    While strDateiname <> ""
        FeldD(i) = strDateiname
        i = i + 1
        strDateiname = Dir()
    Wend
    
    For i = 1 To Anzahl
        frm_Einlesen.lst_Import.AddItem (FeldD(i))
    Next i
    
    On Error GoTo 0
    
    End Sub



  

Betrifft: AW: Ersatz für FileSearch in Userform von: Beverly
Geschrieben am: 23.10.2014 12:42:23

Hi Frank,

die Do-Schleife läuft so lange durch, wie Dateien vom festgelegten Typ im Verzeichnis vorhanden sind - du musst die Anzahl also gar nicht wissen und du kannst die Namen gleich innerhalb der Schleife der ListBox zuweisen:

    Dim strVerzeichnis As String
    Dim strDatei As String
    Dim strTyp As String
    Dim strDateiname As String
    Dim Pfad As String
    Dim PfadL As String
    
    Pfad = ActiveWorkbook.Path
    PfadL = Pfad & "\Discovererdaten Jugendliche\"

    strTyp = "*.xls"
    strVerzeichnis = "F:\DIENST\Excel\JutaD\Discovererdaten Jugendliche\" '"D:\Test\"
    If Right(strVerzeichnis, 1) <> "\" Then strVerzeichnis = strVerzeichnis & "\"
    strDateiname = Dir(strVerzeichnis & strTyp)
    Do While strDateiname <> ""
        frm_Einlesen.lst_Import.AddItem strDateiname
        strDateiname = Dir
    Loop

GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Ersatz für FileSearch in Userform von: Frank
Geschrieben am: 23.10.2014 13:03:24

Hi Katrin,
recht herzlichen Dank für Deine Mühe.
Ich habe offenbar viel zu kompliziert gedacht. Deine Variante funktioniert einwandfrei.
Du hast mir viele Kopfschmerzen erspart - DANKE!

Ich baue den Code nächste Woche in die Hauptdatei ein und bin dann mal gespannt, ob dann alles wieder funktioniert oder ob noch weitere Anpassungen an anderer Stelle nötig werden...

Herzliche Grüße
Frank


 

Beiträge aus den Excel-Beispielen zum Thema "Ersatz für FileSearch in Userform"