Option Explicit
Private Const INVALID_HANDLE_VALUE = -1
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Private Declare Function FindFirstFile Lib "Kernel32.dll" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "Kernel32.dll" (ByVal hFindFile As Long) As Long
Public Function GetFileSizeKb(ByVal File As String) As Double
Dim lngFile As Long
Dim f As WIN32_FIND_DATA
lngFile = FindFirstFile(File & Chr(0), f)
If lngFile = INVALID_HANDLE_VALUE Then Exit Function
GetFileSizeKb = f.nFileSizeLow / 1024
FindClose (lngFile)
End Function