Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA FileSearch ersetzen

VBA FileSearch ersetzen
13.12.2013 07:48:41
Detlef
Hallo zusammen,
ich habe schon viel gesucht aber ich habe keine passende Lösung gefunden.
Hier ein Teil meines VBA-Codes:
"
ChDir verz
Call loeschen
Windows(xlsName).Activate
With Application.FileSearch
.NewSearch
.LookIn = Import
.SearchSubFolders = False
.FileType = msoFileTypeAllFiles
.Execute
For i = 1 To .FoundFiles.Count
dateinameohnepfad = Mid(.FoundFiles(i), InStrRev(.FoundFiles(i), "\") + 1) 'Verzeichnisse entfernen
"
Leider funktioniert es nicht mehr in 2010 mit FileSearch.
Habe ihr eione alternative für meinen Code?
Vielen Dank im Vorraus!
Gruß
Der Detlef

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA FileSearch ersetzen
13.12.2013 08:01:30
Oberschlumpf
Hi Detlef
klick mal:
http://bit.ly/1b1nmXZ
Hilfts?
Ich hoffe, denn was anderes können wir dir wohl auch nich zeigen.
Ciao
Thorsten

AW: VBA FileSearch ersetzen
13.12.2013 08:04:50
Detlef
Leider sind meine VBA Kenntnise nur bescheiden und ich bräuchte halt eure Hilfe. Falls jemand mir den Code ersetzen könnte *liebfrag*

Anzeige
bitte wer anders, weil...
13.12.2013 08:15:10
Oberschlumpf
...ich nicht wirklich Zeit habe und dachte, meine erste Antwort hilft
Hi Detlef,
bitte JEDE Antwort mit Hallo oder ähnlich beginnen.
Ich bin nicht sicher, glaube aber, dass es erforderlich ist, dass du n bisschen mehr Code zeigst, wenn du willst, dass wir ihn für dich "übersetzen".
Denn allein das, was du zeigst, zeigt ja nicht mal den ganzen Teil, der allein für FileSearch erforderlich ist.
Viel Erfolg
Ciao
Thorsten

Anzeige
AW: bitte wer anders, weil...
13.12.2013 08:23:44
Detlef
Hallo,
okay hier der Code:
Public verz As String
Public xlsName As String
Sub Initialisieren()
verz = ThisWorkbook.Path
xlsName = ThisWorkbook.Name
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Start").Select
Range("A3").Select
Application.DisplayAlerts = False   'Meldungen aus
'Application.ScreenUpdating = False  'Screen Update aus
MsgBox "Initialisierung erfolgreich"
End Sub

Sub DateienAuflisten()
Dim i As Long
Dim Bereich As Range
Dim Zelle As Range
Dim dateinameohnepfad As String
Application.DisplayAlerts = False
Import = verz & "\daten\"   'Verzeichnis das durchsucht wird
ChDir verz
Call loeschen
Windows(xlsName).Activate
With Application.FileSearch
.NewSearch
.LookIn = Import
.SearchSubFolders = False
.FileType = msoFileTypeAllFiles
.Execute
For i = 1 To .FoundFiles.Count
dateinameohnepfad = Mid(.FoundFiles(i), InStrRev(.FoundFiles(i), "\") + 1)  'Verzeichnisse  _
entfernen
Sheets("Import").Select
Cells(65000, 1).End(xlUp).Offset(1, 0).Select
Workbooks.Open Filename:= _
Import & dateinameohnepfad
Range("A25").Select
If ActiveCell.Value  "" Then
Range("A8:A25").Select
Selection.Copy
Else
Range("A8:A13").Select
Selection.Copy
End If
Windows(xlsName).Activate   'Dateiname
ActiveSheet.Paste
Windows(dateinameohnepfad).Activate
ActiveWorkbook.Close
Sheets("Daten").Select
Cells(65000, 1).End(xlUp).Offset(1, 0).Select
ActiveCell.Value = dateinameohnepfad
Next i
Sheets("Import").Select
Selection.AutoFilter Field:=2, Criteria1:="GND1"
Selection.AutoFilter Field:=3, Criteria1:="NCG"
Range(Cells(2, 2), Cells(65536, 5).End(xlUp)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("NCG").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A2").Select
Sheets("Import").Select
Selection.AutoFilter Field:=2, Criteria1:="GND1"
Selection.AutoFilter Field:=3, Criteria1:="GPL"
Range(Cells(2, 2), Cells(65536, 5).End(xlUp)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("GPL").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A2").Select
Sheets("Import").Select
Selection.AutoFilter Field:=2, Criteria1:="GND1"
Selection.AutoFilter Field:=3, Criteria1:="TTF"
Range(Cells(2, 2), Cells(65536, 5).End(xlUp)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("TTF").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A2").Select
Call format
Call sortieren
Sheets("Start").Select
Range("A2").Select
End With
End Sub

Sub format()
' Datenformate aktualisieren
Sheets("NCG").Select
Columns("D:D").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("C:C").Select
Selection.TextToColumns Destination:=Range("C1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 4), TrailingMinusNumbers:=True
Columns("D:D").Select
Selection.TextToColumns Destination:=Range("D1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
Sheets("TTF").Select
Columns("D:D").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("C:C").Select
Selection.TextToColumns Destination:=Range("C1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 4), TrailingMinusNumbers:=True
Columns("D:D").Select
Selection.TextToColumns Destination:=Range("D1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
Sheets("GPL").Select
Columns("D:D").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("C:C").Select
Selection.TextToColumns Destination:=Range("C1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 4), TrailingMinusNumbers:=True
Columns("D:D").Select
Selection.TextToColumns Destination:=Range("D1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
End Sub
Sub sortieren()
'Daten nach Datum Sortieren
Sheets("NCG").Select
Range(Cells(2, 1), Cells(65536, 4).End(xlUp)).Select
Selection.Sort Key1:=Range("C2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Sheets("TTF").Select
Range(Cells(2, 1), Cells(65536, 4).End(xlUp)).Select
Selection.Sort Key1:=Range("C2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Sheets("GPL").Select
Range(Cells(2, 1), Cells(65536, 4).End(xlUp)).Select
Selection.Sort Key1:=Range("C2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

Sub loeschen()
Windows(xlsName).Activate 'Dateiname
Sheets("Daten").Select
Range("A:A").ClearContents
Sheets("Import").Select
Selection.AutoFilter Field:=1 'Filter zum löschen zurücksetzen
Selection.AutoFilter Field:=2
Selection.AutoFilter Field:=3
Selection.AutoFilter Field:=4
Selection.AutoFilter Field:=5
Range("A:A").ClearContents
Sheets("NCG").Select
Range("A:D").ClearContents
Sheets("GPL").Select
Range("A:D").ClearContents
Sheets("TTF").Select
Range("A:D").ClearContents
End Sub
An den jeniger der es schafft, herzlichen Dank vorab!!

Anzeige
AW: bitte wer anders, weil...
13.12.2013 08:27:23
Oberschlumpf
Hi Detlef
Mist, mein Fehler, sorry!
Am allereinfachsten ist es natürlich, wenn du uns die Datei zeigst.
Die Originaldaten kannst du ja durch Testdaten ersetzen, wenn erforderlich.
Denn wir wissen ja gar nicht, wie die Datei aussieht.
Ciao
Thorsten

;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA FileSearch ersetzen


Schritt-für-Schritt-Anleitung

Um den veralteten Application.FileSearch in VBA zu ersetzen, kannst du die FileSystemObject-Bibliothek verwenden. Hier ist ein Beispiel, wie du deinen Code anpassen kannst:

  1. Referenz hinzufügen: Gehe zu Extras > Verweise und aktiviere Microsoft Scripting Runtime.
  2. Code anpassen: Ersetze den With Application.FileSearch-Block durch FileSystemObject.

Hier ist der angepasste Code:

Sub DateienAuflisten()
    Dim fso As Object
    Dim folder As Object
    Dim file As Object
    Dim Import As String
    Dim i As Long
    Dim dateinameohnepfad As String

    Set fso = CreateObject("Scripting.FileSystemObject")
    Import = verz & "\daten\"

    ChDir verz
    Call loeschen
    Windows(xlsName).Activate

    Set folder = fso.GetFolder(Import)

    For Each file In folder.Files
        dateinameohnepfad = file.Name 'Dateinamen ohne Pfad
        Sheets("Import").Select
        Cells(65000, 1).End(xlUp).Offset(1, 0).Select
        Workbooks.Open Filename:=Import & dateinameohnepfad
        ' Rest des Codes ...
    Next file
End Sub

Häufige Fehler und Lösungen

Fehler 1: FileSearch ist nicht mehr verfügbar in Excel 2010 und später.

Lösung: Verwende FileSystemObject, wie im vorherigen Abschnitt beschrieben.

Fehler 2: Variable nicht definiert.

Lösung: Stelle sicher, dass alle Variablen korrekt deklariert sind und dass du die richtige Option Explicit-Direktive verwendest.


Alternative Methoden

Wenn du eine andere Methode zur Dateisuche in VBA benötigst, kannst du auch die Dir-Funktion verwenden. Hier ist ein einfaches Beispiel:

Sub DateienAuflistenMitDir()
    Dim dateiname As String
    Dim Import As String
    Import = verz & "\daten\"

    dateiname = Dir(Import & "*.*")

    Do While dateiname <> ""
        ' Hier kannst du den Code zum Öffnen der Datei einfügen
        dateiname = Dir()
    Loop
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen können, FileSearch zu ersetzen:

  • Dateien in einem bestimmten Verzeichnis auflisten: Nutze die oben genannten Methoden und passe den Code für spezifische Dateitypen an.

  • Suchen in Unterordnern: Wenn du auch Unterordner durchsuchen möchtest, kannst du eine rekursive Funktion erstellen, die die FileSystemObject-Klasse verwendet.


Tipps für Profis

  • Performance verbessern: Verwende Application.ScreenUpdating = False und Application.Calculation = xlCalculationManual, um die Performance während der Ausführung deines Codes zu verbessern.
  • Fehlerbehandlung: Implementiere On Error Resume Next zu Beginn deiner Subroutine, um Laufzeitfehler zu handhaben, und setze eine Fehlerbehandlung am Ende.

FAQ: Häufige Fragen

1. Warum funktioniert Application.FileSearch nicht mehr? In Excel 2010 und späteren Versionen wurde Application.FileSearch entfernt. Daher ist es notwendig, alternative Methoden wie FileSystemObject oder Dir zu verwenden.

2. Wie kann ich sicherstellen, dass mein Code auch in zukünftigen Excel-Versionen funktioniert? Vermeide die Verwendung von veralteten Funktionen und setze auf die neuesten VBA-Funktionen und -Objekte wie FileSystemObject.

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