第0回で配布しました汎用プロシージャのコードの紹介と簡単な解説をやっていきたいと思います!
以下のリンクから .bas ファイルをダウンロードできます(zipファイル)
今回ご紹介するプロシージャは
プロシージャ名 | 概要 |
---|---|
CreateDummyFolder | 重複しない一時フォルダの作成 |
さて...汎用と言っておきながら少々マニアック(?)なプロシージャのご紹介です。
こちら、親フォルダの絶対パスを渡すと、そのフォルダ内に名前が重複しないフォルダを生成し、生成したフォルダの絶対パスを返すものになっております。どういうときに使うんだとお思いになられるかと思いますが、個人的な実体験として**.emlファイル**を展開するときにこの処理が役に立ちました。
emlファイルとはールのヘッダ情報(送信者、受信者、件名など)と本文、添付ファイルが含まれるzipファイルのようなものになります。
私が作成したツールはemlファイルを展開し、メールの件名と同名のフォルダを生成し、メール本文等を.txtファイルにまとめ添付ファイルとともに生成したフォルダ内に保存するというものだったのですが、保存したメール件名が同じだった場合フォルダ生成時にエラーが発生してしまいました。
処理の都合上、ダミーのフォルダを生成すれば解決できることに気が付き、下に紹介するようなコードを追加することによって解決いたしました。
フォルダに限らずですが、例えばExcelのシートなどなかなかエラーの解決ができないときはダミーのデータを生成しワンクッション置くことによってエラーを回避できるパターンがありますので頭の片隅に入れていただければ幸いです...
CreateDummyFolder
Function CreateDummyFolder(basePath As String, Optional baseName As String = "Dummy") As String
'------------------------------------------------------------------------------------------------------------------------------
' 概要 |指定パスに重複のないダミーフォルダを作成し、その絶対パスを返す
'------------------------------------------------------------------------------------------------------------------------------
' 引数1 |basePath - フォルダを作成する親ディレクトリの絶対パス(String型)
' 引数2 |baseName - フォルダ名のベース(既定値:"Dummy")(String型)
'------------------------------------------------------------------------------------------------------------------------------
' 戻り値 |String型 - 作成されたフォルダの絶対パス
'------------------------------------------------------------------------------------------------------------------------------
' 実装 |Ver.1.0.0(2025/04/20:新規)
'------------------------------------------------------------------------------------------------------------------------------
Dim dummyNumber As Long '重複回避の際に付与する番号
Dim newFolder As String '作成するフォルダ名(絶対パス)
'フォルダ名を初期化
newFolder = basePath & "\" & baseName
dummyNumber = 1
'重複回避ループ
Do While Dir(newFolder, vbDirectory) <> ""
newFolder = basePath & "\" & baseName & "_" & dummyNumber
dummyNumber = dummyNumber + 1
Loop
MkDir newFolder 'フォルダ作成
CreateDummyFolder = newFolder
End Function
詳細な説明は割愛させていただきますが、本プロシージャ(関数)は生成したフォルダの絶対パスが返ってきますので、それを活用して不要であればそのフォルダを削除したり名前を変更することもできます。
今回は応用的な内容でしたが、「困ったときはダミーを作ってみる」というテクニックの紹介でした!
直感!VBAシリーズ記事一覧
もしよろしければ他の記事もご覧ください!