Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1380to1384
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

Verständnisfrage: 8 Zeilen VBA-Code nachvollziehen

Verständnisfrage: 8 Zeilen VBA-Code nachvollziehen
24.09.2014 10:20:31
Martin
Hallo Excelfreunde,
ich habe im Archiv eine passende Lösung zum Durchsuchen eines Verzeichnisses nach Dateien eines vorgegebenen Dateitypes gefunden. Es klappt auch wunderbar:
Sub ReadDirectory()
Dim strFile As String
strFile = Dir("C:\Test\*.xls")
Do Until strFile = ""
Debug.Print strFile
strFile = Dir() 'diese Zeile verstehe ich absolut nicht
Loop
End Sub
Leider vestehe ich den Code nicht und bitte euch deshalb um Erklärung des Codes. Es geht mir besonders um die Dir-Funktion. Warum liefert die Dir() bei jedem Durchlauf einen anderen Wert, obwohl innerhalb der Loop-Schleife keinerlei Parameter (z.B. ein Index) an die Dir-Funktion übergeben werden?
(Nach meinem Verständnis müsste die Variable strFile eigentlich immer denselben Wert von Dir() zugewiesen bekommen).
Viele Grüße
Martin

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verständnisfrage: 8 Zeilen VBA-Code nachvollziehen
24.09.2014 10:24:48
Rudi
Hallo,
ein Blick in die Hilfe bringt oft weiter.
Die Dir-Funktion gibt den ersten Dateinamen zurück, der mit dem Argument Pfadname übereinstimmt. Weitere mit dem Argument Pfadname übereinstimmende Dateinamen erhalten Sie durch das erneute Aufrufen der Dir-Funktion ohne Angabe von Argumenten.
Gruß
Rudi

AW: Verständnisfrage: 8 Zeilen VBA-Code nachvollziehen
24.09.2014 10:44:11
Martin
Hallo Rudi,
vielen Dank für deine schnelle und hilfreiche Antwort. Dann Frage ich gleich mal neugierig weiter: Kann man bei einer User Defined Function eine Art "Index" in Form einer Variable ohne zwangsweise modul- oder globalweiten Gültigkeitsbereich hochzählen lassen? (Also meine Frage lautet, ob man soetwas wie die Dir-Funktion auch benutzerdefiniert umsetzen kann.)
Viele Grüße
Martin

Anzeige
AW: ggf mit Static
24.09.2014 12:47:07
Daniel
Hi
du kannst sog. Statische Variablen verwenden.
diese gelten wie normale Variablen nur innerhalb der Funktion (also nix global), sondern behalten ihren Wert nach Makro/Funktionsende und haben dann diesen Wert beim Makro-Start.
Hier mal ein beispiel:
bei einem erneunten Aufruf der funktion ohne Parameter wird der zuletzt eingegebne Wert verwendet
Function Test(Optional EingabeAnwender As String = "xxx") As String
Static Wert As String
Dim bolNeuerWert As Boolean
If EingabeAnwender = "xxx" Then
bolNeuerWert = False
Else
Wert = EingabeAnwender
bolNeuerWert = True
End If
Test = IIf(bolNeuerWert, "neu: ", "alt: ") & Wert
End Function
die Rücksetzung der Static-Variablen erfolgt:
- bei Start von Excel
- nach einem Fehlerabbruch
- nach dem Befehl END
- nach Ausführen der Buttons "Zurücksetzen" im VBA-Editor
Gruß Daniel

Anzeige
AW: ggf mit Static
24.09.2014 18:27:08
Martin
Hallo Daniel,
ich bin immer begeistert, wenn ich dazulerne! DANKE!
Ich habe nachgeschlagen und festgestellt, dass ich beim Lesen meines schlauen Excelbuches entweder nicht richtig aufgepasst oder es einfach wieder vergessen habe. Ich tippe mal auf Ersteres, weil kein Beispielcode abgedruckt wurde und ich es deshalb nicht verinnerlicht (oder verstanden) habe.
Viele Grüße
Martin

AW: ggf mit Static
24.09.2014 21:37:54
Martin
Hallo Daniel,
so, ich habe gleich mal eine praktische (sinnlose) Übung gemacht, die mir so durch den Kopf gegangen ist. Eine Ermittlung des Wochentages, wobei der Wochentag bei fehlender Argumentenangabe einfach um einen Tag nach oben gesetzt wird:
Sub Beispiel()
Dim i As Integer
Debug.Print Wochentag(Date)
For i = 1 To 20
Debug.Print Wochentag
Next
End Sub
Function Wochentag(Optional dteDatum As Date) As String
Static intWeekday As Single
Dim arrWeekdays()
arrWeekdays = Array("Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", " _
Sonntag")
If dteDatum = 0 Then
If intWeekday = 0 Then
Error (5)
Else
intWeekday = intWeekday + 1
If intWeekday = 8 Then intWeekday = 1
End If
Else
intWeekday = Weekday(dteDatum, vbMonday)
End If
Wochentag = arrWeekdays(intWeekday - 1)
End Function
Viele Grüße
Martin

Anzeige
AW: Verständnisfrage: 8 Zeilen VBA-Code nachvollziehen
24.09.2014 10:30:20
Jack_d
Hallo Martin,
ganz einfach
Beim ersten Aufruf der Dir-Funktion müssen Sie einen PathName angeben. Um das nächste Element abzurufen, können Sie die Dir-Funktion nachfolgend ohne Parameter aufrufen
vgl.
http://msdn.microsoft.com/de-de/library/dk008ty4%28v=vs.90%29.aspx

AW: Verständnisfrage: 8 Zeilen VBA-Code nachvollziehen
24.09.2014 10:46:17
Martin
Danke, Jack_d!
Ich habe gleich noch eine Frage nachgeschoben, vielleicht kannst du diese auch beantworten?
https://www.herber.de/forum/messages/1383131.html
Viele Grüße
Martin
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige