Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _ (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As LongPrivate Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _ (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As LongPrivate Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As _ LongConst MAX_PATH = 260Private Type FILETIME dwLowDateTime As Long dwHighDateTime As LongEnd TypePrivate 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 * 14End Type' Returns a one-based string array containing the files (or directories)' located in the specified path'' the Path argument can contain wildcards, e.g. "C:*.doc")Function FilesToArray(ByVal Path As String, Optional ByVal IncludeDirs As _ Boolean) As String() Dim lRet As Long Dim handle As Long Dim FindData As WIN32_FIND_DATA Dim FileName As String Dim fileCount As Long Dim ok As Boolean ReDim res(0) As String ' start the searching, exit if no file matches the spec handle = FindFirstFile(Path, FindData) If handle < 0 Then FilesToArray = res() Exit Function End If Do ' get this entry's name FileName = Left$(FindData.cFileName, InStr(FindData.cFileName, _ vbNullChar) - 1) If (FindData.dwFileAttributes And vbDirectory) = 0 Then ' this is a file ok = Not IncludeDirs ElseIf FileName <> "." And FileName <> ".." Then ' this is a directory, but not a ./.. entry ok = IncludeDirs Else ' this is a ./.. entry ok = False End If If ok Then ' add this entry to the result fileCount = fileCount + 1 If fileCount > UBound(res) Then ' make room in the array if necessary ReDim Preserve res(fileCount + 100) As String End If res(fileCount) = FileName End If ' read the next file, returns zero when there are no more files lRet = FindNextFile(handle, FindData) Loop While lRet ' stop enumeration FindClose handle ' discard unused array items and return to caller ReDim Preserve res(0 To fileCount) As String FilesToArray = resEnd Function


Data Observability Explained
Data is the lifeblood of any successful business, as it is the driving force behind critical decision-making, insight generation, and strategic development. However, due to its intricate nature, ensuring the