Folder VBA code contained in the library

The VBA code library contains code related to folders: two snippets for looping a folder, a function FolderExists and a procedure to make folder with subfolders.
The image on the right shows the Code VBA » VBA » Folder menu where the VBA library items are at the bottom. The other items are standard VBA folder procedures and a special tool to easily create a folder string.
- Fill array with subfolders using Dir
- Loop folders using Dir
- Check if a folder exists
- Create multiple nested directories
Fill array with subfolders using Dir
Dim strItemInFolder As String
Dim FolderList() As String 'The array with found folders
Dim intFoundFolders As Integer
strItemInFolder = Dir(, vbDirectory)
Do While strItemInFolder <> ""
If ((GetAttr(strFolder & strItemInFolder) And vbDirectory) = vbDirectory) And _
Not (strItemInFolder = "." Or strItemInFolder = "..") Then
ReDim Preserve FolderList(intFoundFolders)
FolderList(intFoundFolders) = strItemInFolder
intFoundFolders = intFoundFolders + 1
End If
strItemInFolder = Dir
Loop
Loop folders using Dir
Dim strItemInFolder As String
strItemInFolder = Dir(, vbDirectory)
Do While strItemInFolder <> ""
If ((GetAttr( & strItemInFolder) And vbDirectory) = vbDirectory) And _
Not (strItemInFolder = "." Or strItemInFolder = "") Then
'TODO: replace Debug.Print by the process you want to do on the subfolder
'Dim strFilePath As String: strFilePath = strFolder & strItemInFolder
Debug.Print strItemInFolder
End If
strItemInFolder = Dir
Loop
Check if a folder exists

Public Function FolderExists(Directory As String) As Boolean
If Len(Dir(Directory, vbDirectory)) > 0 Then
If GetAttr(Directory) = vbDirectory Then
FolderExists = True
End If
End If
End Function
Create multiple nested directories
Public Function MakeDirMulti(DirSpec As String) As Boolean
'Creates multiple nested directories. (Author C Pearson)
'This is a replacement function for the VBA MkDir function. MkDir
' will create only the last (right-most) directory of a
' path specification, and all directories to the left of the
' last director must already exist. For example, the following will fail
' MkDir "C:\Folder\Subfolder1\Subfolder2\Subfolder3"
' will fail unless "C:\Folder\Subfolder1\Subfolder2\" already
' exists. MakeDirMulti will create all the folders in
' "C:\Folder\Subfolder1\Subfolder2\Subfolder3" as required.
' If a "\\" string is found, it is converted to "\".
' At present, MakeDirMulti supports local and mapped drives,
' but not UNC paths.
' The function will return True even if no directories were
' created (all directories in DirSpec already existed).
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim Ndx As Long
Dim Arr As Variant
Dim DirString As String
Dim TempSpec As String
Dim DirTestNeeded As Boolean
''''''''''''''''''''''''''''''''
' Ensure DirSpec is valid.
''''''''''''''''''''''''''''''''
If Trim(DirSpec) = vbNullString Then
MakeDirMulti = False
Exit Function
End If
If Len(DirSpec) > MAX_PATH Then
MakeDirMulti = False
Exit Function
End If
If Not ((Mid(DirSpec, 2, 1) = ":") Or (Mid(DirSpec, 3, 1) = ":")) Then
MakeDirMulti = False
Exit Function
End If
'''''''''''''''''''''''''''''''''''''
' Set DirTestNeeded to True. This
' indicates that we need to test to
' see if a folder exists. Once we
' create the first directory, there
' will no longer be a need to call
' Dir to see if a folder exists, since
' the newly created directory will, of
' course, have no existing subfolders.
''''''''''''''''''''''''''''''''''''''
DirTestNeeded = True
TempSpec = DirSpec
'''''''''''''''''''''''''''''''''''''
' If there is a trailing \ character,
' delete it.
'''''''''''''''''''''''''''''''''''''
If Right(TempSpec, 1) = "\" Then
TempSpec = Left(TempSpec, Len(TempSpec) - 1)
End If
'''''''''''''''''''''''''''''''''
' Split DirSpec into an array,
' delimited by "\".
'''''''''''''''''''''''''''''''''
Arr = Split(expression:=TempSpec, delimiter:="\")
''''''''''''''''''''''''''''''''''''
' Loop through the array, building
' up DirString one folder at a time.
' Each iteration will create
' one directory, moving left to
' right if the folder does not already
' exist.
''''''''''''''''''''''''''''''''''''
For Ndx = LBound(Arr) To UBound(Arr)
'''''''''''''''''''''''''''''''''
' If this is the first iteration
' of the loop, just take Arr(Ndx)
' without prefixing it with the
' existing DirString and path
' separator.
'''''''''''''''''''''''''''''''''
If Ndx = LBound(Arr) Then
DirString = Arr(Ndx)
Else
DirString = DirString & Application.PathSeparator & Arr(Ndx)
End If
On Error GoTo ErrH:
''''''''''''''''''''''''''''''''''
' Only call the Dir function
' if we have yet to create a
' new directory. Once we create
' a new directory, we no longer
' need to call Dir, since the
' newly created folder will, of
' course, have no subfolders.
'''''''''''''''''''''''''''''''''
If DirTestNeeded = True Then
If Dir(DirString, vbDirectory + vbSystem + vbHidden) = vbNullString Then
DirTestNeeded = False
MkDir DirString
End If
Else
MkDir DirString
End If
On Error GoTo 0
Next Ndx
MakeDirMulti = True
Exit Function
ErrH:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' If an error occured, typically because an invalid
' character was encountered in a directory name, return
' False.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
MakeDirMulti = False
End Function