2017-02-08 4 views
3

作成しようとしているディレクトリ階層を定義するフォルダのリストが列Aにあります(「C:\ topFolder \ nextFolder \ lastFolder \」など)。コードがエラーなしで実行しますが、何のフォルダが作成されません。私がここで間違って何をしているのですか?EXCEL VBA - まだ作成されていない場合はディレクトリとフォルダを作成します

Sub newDestination() 
    Dim Path As Variant 
    Dim folderLevel As Variant 

    For Each Path In Sheet11.Range("A:A") 
     For Each folderLevel In Split(Path.Value, "\") 
      folderLevel = folderLevel & "\" 
      If Len(Dir(folderLevel, vbDirectory)) = 0 Then 
       MkDir folderLevel 
      End If 
     Next folderLevel 
    Next Path 

End Sub 
+0

あなたは、その値が何であるかを見るためにfolderLevel = folderLevel& "\" の後のDebug.Print(folderLevel)を置くことができますか? –

+0

'Path'はExcel VBAビルトインメソッドですが、' Path'変数の宣言にエラーはありませんでしたか? – Barney

+0

@Barney 'Path'は、いくつかのオブジェクトのプロパティに組み込まれていますが、Excel-VBAでは組み込みのメソッドではありません。それにもかかわらず、変数名としては非常に良い選択ではありません。 – cyboashu

答えて

3

あなたは孤児のフォルダを作成している。MKDIR「ABC \」ワークブックのディレクトリにABCという名前のフォルダを作成します。場合ワークブックは保存されず、このフォルダはMyDocumentsで作成されます(ほとんどの場合、Excelの設定によって異なります)。

フォールドを作成するには完全にqalifiedパスを渡す必要があります"C:\ Temp \ abc \"のようなあなたの望む場所でのr

あなたのコードでは、あなたのforループの実行方法とフォルダ名の受け渡し方法に問題があります。

これは、あなたがこれを行う必要があるかです:

Sub test() 

    Dim strPath As String 
    Dim lCtr  As Long 

    strPath = "C:\Temp\Parent\Child\ChildsChild" 

    arrpath = Split(strPath, "\") 
    strPath = arrpath(LBound(arrpath)) & "\" 

    For lCtr = LBound(arrpath) + 1 To UBound(arrpath) 
     strPath = strPath & arrpath(lCtr) & "\"    
     If Dir(strPath, vbDirectory) = "" Then 
      MkDir strPath 
     End If 
    Next 

End Sub 
+0

素晴らしい作品です。ありがとうございました! – minnow1

関連する問題