Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1216to1220
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Liste ergänzen, nicht neu erstellen

Liste ergänzen, nicht neu erstellen
CarVogt
Hallo.
Mit folgendem Makro Liste ich alle Ordner im Hauptverzeichnis inkl. der Spieldauer der enthaltenen mp3's auf.
Leider habe ich einen recht alten Rechner und das Makro läuft etwa 45 Minuten.
Was muss ich ändern, damit nur noch die neu hinzugekommenen Ordner eingefügt werden?
Dim dauer
Dim i As Long
Sub mp3_dateien_auflisten()
Dim objShell, objFolder
Dim BrowseDir, varName, datum
Set objShell = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set BrowseDir = objShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)
If Not BrowseDir Is Nothing Then
i = 1
Cells.Clear
Columns("F:F").NumberFormat = "[h]:mm:ss;@"
Application.ScreenUpdating = False
For Each o1 In FSO.GetFolder(BrowseDir.Items().Item().Path).SubFolders
dauer = CDate("00:00:00")
Cells(i, 1) = o1.Name
If (FSO.FileExists(o1 & "\Details.txt")) Then
j = 2
Set DieDatei = FSO.OpenTextFile(o1 & "\Details.txt", 1, False)
Do While DieDatei.AtEndOfStream  True
Cells(i, j) = DieDatei.ReadLine
j = j + 1
Loop
DieDatei.Close
End If
dauer_ermitteln (o1)
Cells(i, 6) = dauer
i = i + 1
Next
End If
Columns.AutoFit
Application.ScreenUpdating = True
Set objShell = Nothing
End Sub

Function dauer_ermitteln(ordner)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(ordner)
On Error Resume Next
For Each varName In objFolder.Items
If varName.Type  "Dateiordner" And InStr(1, varName.Type, "MP3-Audio")  0 Then
For j = 0 To 51
If objFolder.GetDetailsOf(, j) = "Dauer" Then
dauer = dauer + CDate(Trim(objFolder.GetDetailsOf(varName, j)))
If Err.Number  0 Then
Debug.Print varName & vbTab & Trim(objFolder.GetDetailsOf(varName, j))
Err.Clear
End If
Exit For
End If
Next
ElseIf varName.Type = "Dateiordner" Then
dauer_ermitteln (varName.Path)
End If
Next
Set objFolder = Nothing
End Function

Gruß
Carsten

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

Betreff
Benutzer
Anzeige
AW: Liste ergänzen, nicht neu erstellen
15.06.2011 17:24:05
Martin
Hallo Carsten,
ich beantworte zwar nicht deine Frage, will dir aber eine kleine Optimierung zur Beschleunigung deines Makros vorschlagen. Ergänze in deinem Makro "mp3_dateien_auflisten" unter der Zeile "Application.ScreenUpdating = False" die Zeile
Application.Calculation=xlCalculationManual 
... und unter der Zeile "Application.ScreenUpdating = True" die Zeile
Application.Calculation =xlCalculationAutomatic
Eventuell geht dein Makro dann etwas schneller.
Viele Grüße
Martin
AW: Liste ergänzen, nicht neu erstellen
15.06.2011 17:28:03
CarVogt
Hallo Martin,
da das Makro nicht von mir ist, weiß ich eh nicht genau, was was bewirkt.
Was bewirkt denn Dein Vorschlag?
Gruß
Carsten
Anzeige
AW: Liste ergänzen, nicht neu erstellen
15.06.2011 17:58:30
Hajo_Zi
Hallo Carsten,
es wird die Berechnung aus und eingeschaltet.

AW: Liste ergänzen, nicht neu erstellen
15.06.2011 18:04:22
robert
Hi,
auch wenn das Makro nicht von Dir ist
und Dein Level-VBA bescheiden ist, sollte es Dir nicht schwer fallen,
was die beiden Zeilen von Martin bewirken ;-)
Bisschen denken, die Hilfe anschauen, dann gehts ....
Gruß
robert

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige