Making Directory if None Exists

O

Orion Cochrane

I need help making a directory if there isn't one present. I know you have to
use the mkdir command, but I don't know how to use it.

Here's an example:

I run a file, clear its contents, and save it. If I am clearing a December
file, I want a January file in a folder named 2010 in the current directory
and go up one folder (above the 2009 folder).

Basically, I need code to check whether a 2010 folder exists in a directory
path, and, if not, create it and save the file there.

TIA.
 
R

Ron de Bruin

You can start with this one

Change this line
FolderPath = "C:\Users\Ron\test3"

Sub Test_Folder_Exist_FSO_Early_binding()
'If you want to use the the Intellisense help showing you the properties
'and methods of the objects as you type you can use Early binding.
'Add a reference to "Microsoft Scripting Runtime" in the VBA editor
'(Tools>References) if you want that.

Dim FSO As Scripting.FileSystemObject
Dim FolderPath As String

Set FSO = New Scripting.FileSystemObject

FolderPath = "C:\Users\Ron\test3"

If Right(FolderPath, 1) <> "\" Then
FolderPath = FolderPath & "\"
End If

If FSO.FolderExists(FolderPath) = False Then
FSO.CreateFolder FolderPath
Else
MsgBox "Folder exist"
End If

End Sub
 
O

Orion Cochrane

Thanks. I'll try it tonight. I added the Microsoft Scripting Runtime to my
PERSONAL.xls file, which is where I am going to run my macro from.
 
D

Dave Peterson

I just ignore any error that may happen if the folder is already there:

Assuming that C:\my documents\excel exists:

on error resume next
mkdir "C:\my documents\excel\2010"
mkdir "C:\my documents\excel\2010\January"
on error goto 0

======
Another option:

Here's something that Jim Rech Posted:

Option Explicit
Declare Function MakePath Lib "imagehlp.dll" Alias _
"MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long

Sub Test()
MakeDir "c:\aaa\bbb"
End Sub

Sub MakeDir(DirPath As String)
If Right(DirPath, 1) <> "\" Then DirPath = DirPath & "\"
MakePath DirPath
End Sub
 
C

Chip Pearson

Try something like

Sub MakeMultiDir(FullPath As String)
Dim V As Variant
Dim N As Long
Dim S As String
V = Split(FullPath, "\")

For N = LBound(V) To UBound(V)
S = S & V(N)
If Dir(S, vbDirectory) = vbNullString Then
MkDir S
End If
S = S & "\"
Next N
End Sub

You can then call this with code like the following:

Sub AAA()
Dim S As String
S = "C:\Test2\TestSub1\TestSubSub1"
MakeMultiDir S
End Sub

MakeMultiDir will create any sub directories necessary in order to
make the full path specified by the FullPath parameter.

Cordially,
Chip Pearson
Microsoft Most Valuable Professional
Excel Product Group, 1998 - 2009
Pearson Software Consulting, LLC
www.cpearson.com
(email on web site)
 
O

Orion Cochrane

That works great! For me, just 2 lines of code is better. Just the Error
handler and the MkDir line.

Thank you all for helping me immensely.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top