Przepisałem powyższy kod (z drobnymi zmianami - przy deklaracji typów - były konieczne, bo w VBA koduje się trochę inaczej) do makra w Excelu:
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Boolean
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal FindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type WIN32_FIND_DATA
Atrybuty As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
nazwa As String * 260
cAlternate As String * 14
End Type
Private WFD As WIN32_FIND_DATA
Sub Main()
Dim uchwyt As Long
Dim NR, Katalog
Dim nazwaPliku
Katalog = "C:\WINDOWS\"
uchwyt = FindFirstFile(Katalog & "*.exe", WFD)
Do: nazwaPliku = Left(WFD.nazwa, InStr(WFD.nazwa, vbNullChar) - 1)
NR = NR + 1
Loop While FindNextFile(uchwyt, WFD)
Call FindClose(uchwyt)
End Sub
I ten kod działa poprawnie zarówno w Windows XP (Excel 2003) jak i Windows 7 64-bit (Excel 2010).