循环变量以创建文件夹

时间:2016-01-17 21:35:06

标签: excel vba loops

我尝试使用下面的代码循环遍历strDir变量,在4个不同的位置创建4个不同的文件夹。

它不会创建文件夹。没有错误出现。

Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7a5f8
Faulting module name: clr.dll, version: 4.0.30319.34209,
time stamp: 0x5348961e
Exception code: 0xc00000fd
Fault offset: 0x0000dfa7
Faulting process id: 0x10e8
Faulting application start time: 0x01d13c4f187f996e
Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Report Id: 7c01148e-a842-11e5-a7b4-005056880172

3 个答案:

答案 0 :(得分:2)

我同意数组方法,但避免在数组中创建空白条目。它有一个从零开始的索引(默认情况下),strDir(4)实际上创建了5个条目;例如 0,1,2,3,4

  

首先,将Option Explicit放在代码表的顶部,或者进入VBE的工具►选项►编辑器,然后选中需要变量声明。这将很快识别代码中strDir之类的未声明变量的使用。

Dim d As Long, strDir As Variant, JobName As String

strDir = Array("C:\QTR\" & JobName & " QTR", _
               "C:\QT\" & JobName & " QT", _
               "C:\EMAILS\" & JobName & " EMAILS", _
               "C:\DOCUMENTS\" & JobName & " DOCS")

For d = LBound(strDir) To UBound(strDir)
    If Dir(strDir(d), vbDirectory) = "" Then
        MkDir strDir(d)
    Else
        Debug.Print strDir(d) & " exists."
    End If
Next d

LBoundUBound函数返回数组的 U pper和 L \ strong B oundaries。

答案 1 :(得分:1)

试试这段代码:

Dim i as Integer  
Dim strDir(4) as String
JobName = NewJob.Value

If New_Job.JobYes.Value Then
strDir(1) = "C:\QTR\" & JobName & " QTR"
strDir(2) = "C:\QT\" & JobName & " QT"
strDir(3) = "C:\EMAILS\" & JobName & " EMAILS"
strDir(4) = "C:\DOCUMENTS\" & JobName & " DOCS"        

    For i = 1 To 4
        If Dir(strDir(i), vbDirectory) = "" Then
            MkDir strDir(i)
        Else
        MsgBox "Directory exists."
    End If
    Next i
Else
End If

答案 2 :(得分:0)

这确实会产生错误,因为它无法连接“strDir”和&我在一起,使用该特定参数。最简单的解决方法是跳过循环并使用:

If Dir(strDir, vbDirectory) = "" Then
    MkDir strDir1
    MkDir strDir2
    MkDir strDir3
    MkDir strDir4
Else
    MsgBox "Directory exists."
End If

如果您确实需要创建大量目录,请说> 10,那么您可能希望按名称使用动态请求参数,但如果您不需要它,我不会推荐它。