VBA - podivné chování cyklu „Do While“ a „For each“
Napsal: 25 zář 2019 10:52
Tímto kódem přejmenuji 40 spuborů tak, že před původní název vložím 4místné náhodné číslo. První spuštění kódu je OK. Při druhém spuštění již kód přejmenuje některé soubory 2x (vždy ty stejné). Viz spoiler.
Poznatky:
1. Když je souborů méně (například 15) tak prvních 9 spuštění kódu je OK. Teprve 10-té spuštění přejmenuje některé soubory 2x.
2. Když je souborů 99, tak již druhé spuštění kódu přejmenuje některé soubory dokonce 3x.
3. Když soubory ukládám do jiné složky, tak se tento jev neděje.
4. Když použiju tento cyklus „For each", tak to dělá to samé:
Dokáže někdo říct, proč se tak děje, a proč to je rozdílné u různého počtu souborů?
Dodatečně přidáno po 4 minutách 17 vteřinách:
Kdyby si to někdo chtěl vyzkoušet, tak soubory přikládám:
Kód: Vybrat vše
Sub prejmenuj()
Dim F As String
slozka = "D:Zdroj"
F = Dir(slozka) 'funkce DIR přidělí do "f" soubory z adresáře
i = 0
Do While F <> ""
i = i + 1
cislo = Int((9999 - 1000 + 1) * Rnd + 1000)
Name slozka & F As slozka & cislo & "_" & F
F = Dir() 'do "f" nactu dalsí soubor
Loop
End Sub
Poznatky:
1. Když je souborů méně (například 15) tak prvních 9 spuštění kódu je OK. Teprve 10-té spuštění přejmenuje některé soubory 2x.
2. Když je souborů 99, tak již druhé spuštění kódu přejmenuje některé soubory dokonce 3x.
3. Když soubory ukládám do jiné složky, tak se tento jev neděje.
4. Když použiju tento cyklus „For each", tak to dělá to samé:
Kód: Vybrat vše
Sub pokusEACH()
Set fso = CreateObject("Scripting.FileSystemObject")
Set F = fso.GetFolder("D:Zdroj") 'Return the Folder object
For Each file In F.Files
cislo = Int((9999 - 1000 + 1) * Rnd + 1000)
Name file As F & "" & cislo & "_" & file.Name
Next file
End Sub
Dokáže někdo říct, proč se tak děje, a proč to je rozdílné u různého počtu souborů?
► Zobrazit spoiler
Dodatečně přidáno po 4 minutách 17 vteřinách:
Kdyby si to někdo chtěl vyzkoušet, tak soubory přikládám: