忍者ブログ

マイドキュメントにフォルダがなければ作るマクロ

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


これでフォルダのフルパスが指定できるので、
¥でスプリットして配列に変換。

配列の上から順に使ってフォルダパスを作り
そのフォルダがなければフォルダを作る処理の繰り返し。


汎用的に使うサブモジュールには★をつけてみた。
目立つ名前にしておけば、ソースを提供するときに
サブモジュールの渡し忘れを防げるかな。。。

以下、ソース。



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
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字