mit dem nachfolgenden Makro lese ich nacheinander Ordnernamen ein, öffne eine csv, suche eine bestimmte Zeile, lese einen Wert aus, schließe die csv und gehe zum nächsten Ordner.
Zur Zeit befinden sich unter dem Pfad 5450 Ordner was bei meinem Makro dazu führt, dass es sehr lange dauert. Das reine einlesen der Ordnernamen geht sehr schnell und stellt nicht das Problem da.
Die reine Funktion des Makros ist also gegeben aber ich könnte mir vorstellen, dass es eine schnellere Lösung für das auslesen der Zeile innerhalb der csv gibt. Kann jemand dabei helfen?
Sub importR()
Dim objFSO As Object
Dim objFolder As Object
Dim strPfad As String
Dim objSubfolder As Object
Dim colSubfolders As Object
Dim i As Integer
Dim wsZiel As Worksheet
Dim wbDESC As Workbook
Dim wsDESC As Worksheet
Dim adrDESC As Range
Call EventsOff
Set wsZiel = Workbooks("Erst.xlsm").Sheets("RüstI")
wsZiel.Range("A:F").ClearContents
wsZiel.Range("F1") = Now
strPfad = "Z:\Rüst\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPfad)
Set colSubfolders = objFolder.Subfolders
For Each objSubfolder In colSubfolders
i = i + 1
wsZiel.Range("A" & i).Value = objSubfolder.Name
'bis hier läuft alles einwandfrei und schnell. Erst das einlesen der csv bremst alles stark aus. _
Set wbDESC = Workbooks.Open(strPfad & objSubfolder.Name & "\" & objSubfolder.Name & _
".desc", ReadOnly:=True)
Set wsDESC = wbDESC.Sheets(1)
wsDESC.Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
Set adrDESC = wsDESC.Range("A:A").Find("PRODUCT_CODE", LookIn:=xlValues, _
lookat:=xlWhole)
If Not adrDESC Is Nothing Then
wsZiel.Range("B" & i) = adrDESC.Offset(0, 1).Value
End If
wbDESC.Close SaveChanges:=False
Next objSubfolder
Set objFolder = Nothing
Set colSubfolders = Nothing
Set objFSO = Nothing
Call EventsOn
End Sub
Über Call Events setze ich nur die DisplayAlerts, ScreenUpdating und EnableEvents auf False bzw True.
Gruß
Mike