2016-01-17 44 views
0

我試着用下面的代碼循環訪問strDir變量,在4個不同的位置創建4個不同的文件夾。通過變量循環創建文件夾

它不創建文件夾。沒有錯誤出現。

Dim i as Integer 
JobName = NewJob.Value 

If New_Job.JobYes.Value Then 
strDir1 = "C:\QTR\" & JobName & " QTR" 
strDir2 = "C:\QT\" & JobName & " QT" 
strDir3 = "C:\EMAILS\" & JobName & " EMAILS" 
strDir4 = "C:\DOCUMENTS\" & JobName & " DOCS"   

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

回答

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函數返回ù PPER和大號奧爾乙陣列的 oundaries。

+0

感謝Jeeped,壞習慣我現在將設置Required Variable Decleration。 – Geoff

+0

謝謝你Jeeped。如果我們需要添加新的目錄,我們只需要將它添加到數組中,但在我的答案中,我們需要更改3行:)。 – Fadi

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 
0

這的確會給出一個錯誤,因爲它無法以連接「strDir」 &我在一起,要使用特定的參數。正確地解決這個問題最簡單的辦法是跳過循環及用途:

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

如果你真的需要創建目錄的一個巨大的量,可以說> 10,那麼你可能需要動態地使用按名稱請求參數,但如果你不需要它,我不會推薦它。