マイドキュメントにフォルダがなければ作るマクロ
2021年10月07日
10月1日に人事異動があり、仕事の内容がガラッと変わった。
日常的にマクロで作られたツールを触ることになったw
仕事を覚えたらソースコードを読み解いてみよう。
パソコンが変わったので、さっそくマクロの移植っと・・・。動かない。
マクロの実行記録をログファイルに吐き出す処理をしているけど、
ログファイルを置くフォルダがないって。
というわけで今回は、フルパスで指定したフォルダがなければ、
上の階層から順にフォルダを生成するマクロを作ってみた。
まずは、マイドキュメントフォルダ名の取得方法。
Windowsキー+Rでウィンドウ開いて、「.」を打つと
ユーザーフォルダを開けるんだって!
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1306709.html
でもマクロではこれを使えないようで、
CreateObject("Wscript.Shell")を使って取得する。
With CreateObject("WScript.Shell")
pPath = .SpecialFolders("MyDocuments") 'MyDocuments, DeskTop,
End With
https://excel-ubara.com/excelvba4/EXCEL293.html
これでフォルダのフルパスが指定できるので、
¥でスプリットして配列に変換。
配列の上から順に使ってフォルダパスを作り
そのフォルダがなければフォルダを作る処理の繰り返し。
汎用的に使うサブモジュールには★をつけてみた。
目立つ名前にしておけば、ソースを提供するときに
サブモジュールの渡し忘れを防げるかな。。。
以下、ソース。
日常的にマクロで作られたツールを触ることになったw
仕事を覚えたらソースコードを読み解いてみよう。
パソコンが変わったので、さっそくマクロの移植っと・・・。動かない。
マクロの実行記録をログファイルに吐き出す処理をしているけど、
ログファイルを置くフォルダがないって。
というわけで今回は、フルパスで指定したフォルダがなければ、
上の階層から順にフォルダを生成するマクロを作ってみた。
まずは、マイドキュメントフォルダ名の取得方法。
Windowsキー+Rでウィンドウ開いて、「.」を打つと
ユーザーフォルダを開けるんだって!
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1306709.html
でもマクロではこれを使えないようで、
CreateObject("Wscript.Shell")を使って取得する。
With CreateObject("WScript.Shell")
pPath = .SpecialFolders("MyDocuments") 'MyDocuments, DeskTop,
End With
https://excel-ubara.com/excelvba4/EXCEL293.html
これでフォルダのフルパスが指定できるので、
¥でスプリットして配列に変換。
配列の上から順に使ってフォルダパスを作り
そのフォルダがなければフォルダを作る処理の繰り返し。
汎用的に使うサブモジュールには★をつけてみた。
目立つ名前にしておけば、ソースを提供するときに
サブモジュールの渡し忘れを防げるかな。。。
以下、ソース。
Option Explicit
'C:\Users\oiran\Documents\VBA\LOG\SysLog
Sub ★フォルダがなければ作る(Path As String)
With CreateObject("Scripting.FileSystemObject")
Dim tmp, j As Long, strDir As String
tmp = Split(Path, "\")
For j = 0 To UBound(tmp)
If j = 0 Then
strDir = strDir & tmp(j) & "\"
Else
strDir = strDir & tmp(j) & "\"
If .FolderExists(strDir) Then
'あればなにもしない
Else 'なければ作る
.CreateFolder strDir
End If
End If
Next j
End With
End Sub
Function ★MyDocumentのパスを取得()
With CreateObject("WScript.Shell")
★MyDocumentのパスを取得 = .SpecialFolders("MyDocuments") 'MyDocuments, DeskTop,
End With
End Function
Function ★DeskTopのパスを取得()
With CreateObject("WScript.Shell")
★DeskTopのパスを取得 = .SpecialFolders("DeskTop") 'MyDocuments, DeskTop,
End With
End Function
Sub test()
Dim pPath As String: pPath = ★MyDocumentのパスを取得()
Dim Path As String: Path = pPath & "\VBA\LOG\SysLog"
Debug.Print Path
Call ★フォルダがなければ作る(Path)
End Sub
PR
Comment