
http://www.accessclub.jp/supbeg/091.htmlを参考に、
任意のパスを入力し、フォルダを作成するプログラムを作成いたしました。
そうしました所、存在していないフォルダの中にフォルダを作ることが出来ませんでした
(例えば c:\aaa\bbb と指定した場合、aaa フォルダが存在する場合は bbb フォルダが作成されますが、
aaa フォルダが存在しない場合、bbb フォルダが作成されませんでした)。
上記のような場合、aaa フォルダが存在しなければ、自動的に aaa フォルダを作成し、
その中に bbb フォルダを作成したいと思いましたが、良い手が思いつきませんでした。
その為、何か良い手をご存知の方がいらっしゃいましたら、アドバイスをいただければと思います。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
ごめんごめん、自分で作成したロジックなのに・・・
最後に¥をつけて呼び出し
Call MakePath("C:\aaa\", "bbb\ccc\")
が正解。
Do
'繰り返しスタート
iPos = InStr(iPos + 1, oPath, "\")
'\が何文字目にあるか調べる
'初期値はiPos=0なので1から
'bbb\だから4が返る
'2回目は4なので5文字目から調べるbbb\ccc\なので8が返る
'3回目は9文字目から調べるが無いので0が返る
If iPos = 0 Then Exit Do
'iPosがゼロなら繰り返しを終わる
On Error Resume Next
'エラーがあっても無視する
MkDir oRoot & Left(oPath, iPos - 1)
'フォルダーを作成
'1回目はoRootとoPathの先頭から3文字つまりc:\aaa\とbbbなのでc:\aaa\bbbを作成
'2回目はoRootとoPathの先頭から7文字つまりc:\aaa\とbbb\cccなのでc:\aaa\bbb\cccを作成
On Error GoTo 0
'エラーがあったらVBAの標準エラー処理を行う
Loop
'繰り返しはここまで
以上、処理解説
ありがとうございます。
一回で最終フォルダまで作成されることを確認いたしました。
またソースのご解説までしていただきありがとうございます。
教えていただいた内容をベースに、今作成しているプログラムに反映させていただこうと思います。
No.2
- 回答日時:
FileSystemObjectは別にScripting Runtimeを参照設定せずとも
Set fs = CreateObject("Scripting.FileSystemObject")
と書けば出来ますよFileSystemObjectでヘルプ参照
またフォルダー作成はFileSystemObjectを使わなくてもVBA標準命令にMkDirがあります
サンプルです。
本来ならDir(Folder)で有無チェックするのが正解なのでしょうが
すでに存在する場合、エラーになるがOn Error Resume Nextで無視するように手抜きしてます
呼び出しは作成元フォルダー、追加したいフォルダーです
Call MakePath("C:\aaa\", "bbb\ccc")
Function MakePath(oRoot As String, oPath As String)
Dim iPos As Long
iPos = 0
Do
iPos = InStr(iPos + 1, oPath, "\")
If iPos = 0 Then Exit Do
On Error Resume Next
MkDir oRoot & Left(oPath, iPos - 1)
On Error GoTo 0
Loop
End Function
ありがとうございます。
意図した動作になりました。
ただソースの意味が理解できていない為、これからソースの理解に勤めたいと思います。
後、教えていただいたソースでは最終フォルダ(ccc)は作成されず、その後に、fso.CreateFolder(C:\aaa\bbb\ccc)を行うという認識で大丈夫でしょうか?
もし私の認識が間違っているようでしたら、ご指摘いただければと思います。
No.1
- 回答日時:
全般にFSO(VBScript)を使うとよいと思います。
aaa フォルダが存在する場合
aaa フォルダが存在しない場合
はFolderExist(パス名)で確認します。
「FolderExist」でWEB照会(Googleなど)のこと。
ーー
存在すれば
fso.CreateFolder ("C:\Documents and Settings\XXXX\My Documents\bbb")
の前半にaaa間でのパスを指定し(ドライブレターからすべて)、最後の部分に
¥bbbを入れます(上記のように)。
ーー
存在しない場合、
aaaの親フォルダ名でfso.CreateFolderの前の部分を指定して、最後の部分で¥aaaを指定します。親フォルダは存在を操作で確認しておく。
それでaaaフォルダが出来ます。
その後は、引き続き、上記の「存在する場合」のスクリプトのコードを入れます。bbbフォルダを中に作ります。
---
参考にフォルダ作成で
WEBにあった例を少し変えて載せておきます。アクセスVBAでテスト済み。xxxxをユーザーアカウントで変えてください。
下記ではマイドキュメントにbbbフォルダが出来ます。
削除の部分はコメントアウトしてます。
Sub test02()
Dim fso, fldr, s
' FileSystemObject オブジェクトのインスタンスを取得します。
Set fso = CreateObject("Scripting.FileSystemObject")
' Drive オブジェクトを取得します。
Set fldr = fso.GetFolder("c:")
' 親フォルダの名前を表示します。
MsgBox "親フォルダの名前:" & fldr
' ドライブの名前を表示します。
MsgBox "格納されているドライブ " & fldr.Drive
' ルート ファイルの名前を表示します。
If fldr.IsRootFolder = True Then
MsgBox "これはルート フォルダです。"
Else
MsgBox "これはルート フォルダではありません。"
End If
' FileSystemObject オブジェクトでフォルダを作成します。
fso.CreateFolder ("C:\Documents and Settings\XXXX\My Documents\Bogus")
MsgBox "作成したフォルダは C:\bbb です。"
' フォルダのベース名を表示します。
MsgBox "ベース名 = " & fso.GetBaseName("C:\Documents and Settings\XXXX\My Documents\bbb")
' 作成されたフォルダを削除します。
'fso.DeleteFolder ("C:\bbb")
'MsgBox "削除したフォルダは C:\////\Bbbb です。"
End Sub
ありがとうございます。
教えていただいたソースを実行すると、マイドキュメントの中にBogusフォルダが生成されました。
ただ、今回やりたい事に結びつける事が出来ませんでした。
ご説明文から推測するに、教えていただいたソースをループさせる必要があるのかなという気がしましたが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 同じ名前のフォルダがあれば作成したブックを格納するマクロをつくりたい 2 2023/01/16 16:19
- その他(プログラミング・Web制作) フォルダを一括で作成する方法 0 2022/07/27 19:19
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Windows 10 ショートカットの作り方と使い方について教えて下さい。 3 2022/05/27 08:44
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Windows 10 フォルダの新規作成を必ず「ドキュメント」にする方法 1 2023/06/24 09:08
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- その他(プログラミング・Web制作) セレクトボックスで選択された値をコントローラーで使用したい 2 2022/07/26 16:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
"ダウンロード"のフォルダを消...
-
bat ファイルでフォルダ作成&移動
-
auoneのwebメールを使っている...
-
フォルダ階層が深いファイルの...
-
【Excel VBA】PDFを作成して,...
-
複数のテキストファイルをexcel...
-
Microsoft Access エラー 3051
-
batファイル処理でのテキストフ...
-
web.configファイル内、valueに...
-
Accessでパソコンの情報を得るには
-
エクセルVBA フォームを開く時...
-
Excelでdatファイルを作成??
-
バッチによるショートカットの...
-
Excel VBAどこが間違ってますか?
-
VBAのDoLoopでファイルがあるか...
-
バッチファイルが作成できない
-
WORDでたまにでてくる。
-
IEで複数のファイル選択方法
-
Webサイト アプリのコンパイル他
-
Excel-VBA 撮影日時の取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォルダ作成用バッチファイル...
-
サンダーバードでの新規にフォ...
-
bat ファイルでフォルダ作成&移動
-
Thunderbird ローカルフォルダ...
-
BIGLOBEのウェブリメールはフォ...
-
GoogleWorkspaceについての質問
-
シャープSH-01E メジャーアップ...
-
LANDISKに新しいフォルダを追加...
-
Accessでフォルダを自動生成す...
-
デスクトップ上にフォルダを作...
-
FTPで、フォルダコピー
-
Accessのフォルダ作成に関して ...
-
マイドキュメントにマイビデオ...
-
auoneのwebメールを使っている...
-
至急!バッチ作成について
-
Outlook Express アドレス帳の...
-
"ダウンロード"のフォルダを消...
-
Windows XPを立ち上げたら自動...
-
フォルダを楽していっぱい作る方法
-
フォルダ階層が深いファイルの...
おすすめ情報