Visual Studio 2012 - 2 błędy: As Any oraz ByVal

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).

Nie działa wszystkie Public Type zostały zakwestionowane, a po zamianie na moje też nie działa

podejrzewam, że VBA w Excelu jest bardziej zbliżone do VB6 i nie jest kompatybilne z Visual Basic 2012.

Nawet to:

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

w VS2012 musi wyglądać inaczej ja mam tak:

Public Structure FILETIME

      Dim dwLowDateTime As Long

      Dim dwHighDateTime As Long

   End Structure


   Public Structure WIN32_FIND_DATA

      Dim Atrybuty As Long

      Dim ftCreationTime As FILETIME

      Dim ftLastAccessTime As FILETIME

      Dim ftLastWriteTime As FILETIME

      Dim nFileSizeHigh As Long

      Dim nFileSizeLow As Long

      Dim dwReserved0 As Long

      Dim dwReserved1 As Long
 Dim nazwa As String
 Dim cAlternate As String

   End Structure

i być może tu gdzieś jest błąd

nie jestem pewien czy ma tu być “Public Structure”, Dim(próbowałem Public i też nic)

czy też " Dim nazwa As String" zamiast “nazwa As String * 260”

Bardzo dziękuję za poświęcony czas.