VBでフォルダを作成する、基本的なロジックを作成しています。
現在、仮にD:\にはフォルダが存在しないとして、
MkDir "D:\Test\Temp\"
とするとエラーになってしまいます。
MkDir "D:\Test\"
とするとフォルダが作成されるのですが、
その後に、
MkDir "D:\Test\Temp\"
とすると、やはりエラーになってしまいます。
どのようにすれば、1つの処理の中で、複数階層のフォルダが作成できるのでしょうか?
ちなみにVB6.0 SP5で、実際にはMkDir関数の引数は文字列変数です。
よろしくお願いします。
No.7ベストアンサー
- 回答日時:
うーん。
下の方法で出来ない事はないと思うのですが。コードがあっていると仮定した場合、もしかしてフロッピーなどのアクセスが非常に遅いメディアに対して行っているという事はないですか?
その場合、少しウェイトをおいてあげないと間に合わない可能性はあります。フォルダ作成は実際はWindowsがやっていますが、ファイル操作関連は遅延書き込みを行っている為、コード上では終了していても、実際にはまだフォルダが出来ていないという事も考えられます。
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
を宣言して
MkDir "D:\Test\"
Call sleep(500) '0.5秒まつ。待ってる時間に別に根拠はないので適当なものにかえてください。
MkDir "D:\Test\Temp\"
とかやってみてはどうでしょう?
あとは
Private Sub mMakeDir()
On Error Goto ErrChk
MkDir "D:\Temp\Test\"
Exit Sub
ErrChk:
Debug.Print Err.Description
End Sub
などのコードを書いて、なぜエラーになっているかをチェックしてはどうでしょう?(Err.Description はエラーオブジェクトの直前におきたエラーの内容を表示します)
案外思っていない事でエラーになっているかもしれません。
それでも駄目なら、MkDirなどのOSよりのファイル操作コマンドは使わずに、FileSystemObjectを使ってみてはどうでしょう?
Dim aoFso As Object ' File System Object
On Error GoTo ErrChk
Set aoFso = CreateObject("Scripting.FileSystemObject")
Call aoFso.CreateFolder("D:\Temp\")
Call aoFso.CreateFolder("D:\Temp\Test\")
ErrChk:
Set aoFso = Nothing
End Sub
※エラーチェックをいれているのは、フォルダ作成に失敗しても、オブジェクトを確実に解放する為。
DirやMkDirなどのOSよりのファイル操作コマンドは、コードが正しくても時々理不尽な失敗をするので、そのせいかもしれません。
みなさん、ご回答ありがとうございました。
とくにサンプルソースなどは大変参考になります。
質問内容についてはいまだになぞのままなんですが・・・
No.6
- 回答日時:
>MkDirは、1階層下のフォルダを作成するので
そうでもないのでは。
MkDir "D:\Test\Temp\"はTestフォルダがない段階でエラーになるのでは?。
ーーーー
中間ディレクトリを作成することが出来ます。
batというディレクトリ配下にcommandというディレクトリがあり(こここに注意)、その配下にmdというディレクトリがあるディレクトリ構造を作成するには
mkdir \bat\command\md
というように書きます。
http://www.confrage.com/dos/command/md/md.html
ーーーーーー
>MkDir "D:\Test\"
>MkDir "D:\Test\Temp\"は¥不要では?
No.5
- 回答日時:
当方の環境ではできますので、単純なエラーかも。
セミコロンだったり、\マークが抜けていたり、前後のmkdirで親ディレクトリがなかったり。フルパスでの指定ですよね?
No.4
- 回答日時:
ちなみに自分はこんな感じで作っているのでが、
どうでしょうか?
Dim vPath As String 'パス
Dim strFile As String '検索等で使用
Dim strdir As String 'ディレクトリ作成で使用
Dim strmkdir() As String 'ディレクトリ作成
Dim lngI As Long 'ループカウンタ
vPath=D:\Test\Temp
'★ディレクトリの作成処理
strmkdir = Split(vPath, "\") '\ごとに区切る
For lngI = LBound(strmkdir) To UBound(strmkdir)
If lngI <> 0 Then
strdir = strdir & "\" & strmkdir(lngI)
Else
strdir = strdir & strmkdir(lngI)
End If
'指定されたフォルダがない場合は作成する
strFile = Dir(strdir, vbDirectory)
If Len(Trim(strFile)) = 0 Then
MkDir strdir
End If
Next lngI
No.3
- 回答日時:
ディレクトリを複数階層新規に作成する場合は
順番に作成していけばできます。
飛び越しで2階層以上を一度に作成しようとするとエラーになります。
なので後者の方法でできるはずですが、何か勘違いはありませんか?
なお、引数は文字列変数とのことなので、
ループ内での"\"の判定が必要になります。
後日でしたら私の方でもコードを確認することはできるのですが・・・
No.2
- 回答日時:
MkDirは、1階層下のフォルダを作成するので
MkDir "D:\Test"
MkDir "D:\Test\Temp"
で「D:\Test\Temp」のフォルダは作成できますよ。
ただし、既に「D:\Test\Temp」が存在している場合は
同じフォルダを作成しようとしてエラーとなります。
作成前に、以下の判定式を使ってみたらどうでしょう。
Dim strDirName As String
strDirName = Dir("D:\Test\Temp", vbDirectory)
If strDirName <> "" Then
MsgBox "既にフォルダが存在しています。"
Else
MkDir "D:\Test"
MkDir "D:\Test\Temp"
End If
回答ありがとうございます。
>MkDirは、1階層下のフォルダを作成するので
そのようですね。
で、2回に分けて作成しているのですが、やはりエラーになってしまいます。
ちなみに、このPGでは作成するフォルダは必ず存在しない前提で実行されます。
(存在する場合は実行されません)
No.1
- 回答日時:
MkDir "D:\Test"
のエラーチェックをして、なかったら
MkDir "D:\Test\Temp"
最後の\マークをはずして試してみてください。
参考URL:http://www.microsoft.com/japan/msdn/library/defa …
回答ありがとうございます。
説明が不足して申し訳ありません。
MkDir "D:\Test\Temp"
でも同じエラーです。
エラー内容は"パスが見つかりません"です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- Windows 10 外部ドライブにマウントできない問題について 9 2022/03/22 18:08
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- Visual Basic(VBA) Excel VBA 同じ名前のフォルダがあれば作成したブックを格納するマクロをつくりたい 2 2023/01/16 16:19
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- その他(プログラミング・Web制作) フォルダを一括で作成する方法 0 2022/07/27 19:19
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
あなたにとってのゴールデンタイムはいつですか?
一週間の中でもっともテンションが上がる「ゴールデンタイム」はいつですか? その逆で、一週間でもっとも落ち込むタイミングでも構いません。 よかったら教えて下さい!
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
2024年のうちにやっておきたいこと、ここで宣言しませんか?
2024年も残すところ50日を切りましたね。 ことしはどんな1年でしたか? 2024年のうちにやっておきたいこと、 よかったらここで宣言していってください!
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
VB6.0-整数と余りを求める
Visual Basic(VBA)
-
VB6.0でネットワークドライブの接続・切断
Visual Basic(VBA)
-
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
-
4
VB6でのファイル作成方法
Visual Basic(VBA)
-
5
VB6で時刻の範囲に入っているか調べたいのですが。
Visual Basic(VBA)
-
6
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
7
Redim とEraseの違いは?
Access(アクセス)
-
8
VBでクリックイベントを発生させたいです
Visual Basic(VBA)
-
9
VB6のメモリ解放に関して
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Subversionのリポジトリの削除
-
FTPコマンドでディレクトリごと...
-
CFileDialogの最初のディレクト...
-
バッチを用いたフォルダの自動移動
-
rmdirでフォルダが消せません
-
図に示す階層構造で,現在のデ...
-
renameでのPermission deniedエ...
-
aspのページが表示できません
-
ファイル選択ダイアログで選択...
-
Subversionで、ファイルをリネ...
-
Visual C++でのfelicaプログラム
-
現在位置より2つ上のディレク...
-
DLL のロードの順序
-
PHPにて所有者名を変更出来...
-
Tcl/Tkの超初歩的な質問です。
-
makefile でファイルをコピーす...
-
絶対パス?絶対アドレス?意味...
-
コマンドプロンプトを指定のデ...
-
visualstudioでc#のdllができない
-
ファイル一覧表(LAN内の別PC)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
CFileDialogの最初のディレクト...
-
バッチを用いたフォルダの自動移動
-
makefile でファイルをコピーす...
-
VB.NET 最下位のディレクトリ名...
-
MkDir関数
-
現在位置より2つ上のディレク...
-
絶対パス?絶対アドレス?意味...
-
renameでのPermission deniedエ...
-
visualstudioでc#のdllができない
-
ファイル選択ダイアログで選択...
-
FTPでのファイルとディレクトリ...
-
str ! = NULL
-
powershell で書いたプログラム...
-
DLL のロードの順序
-
バッチファイルで特定ファイル...
-
JAVA内で複数のファイルを削除...
-
fopenでファイルが開かない場合...
-
includeが出来ない訳とは?
おすすめ情報