情シス担当の備忘録

VBA・労働法とか。

【ExcelVBA】ダイアログを表示してパスを文字列として取得し、セルに書き込む

Excelのフォルダを選択するダイアログを表示して、
得た値をエクセルの指定したセルに書き込むマクロです。
(ネットに似たようなコードはいくらでも転がっていると思うけど・・・)

Sub pathselect()
Dim Path As String
  With Application.FileDialog(msoFileDialogFolderPicker)
   If .Show = 0 Then
   Exit Sub
   End If
   Path = .SelectedItems(1)
  End With

Range("A1").Value = Path

End Sub

以上です。


If .Show = 0 Then
Exit Sub
End If

について。
単純にパスを取得するだけなら、この3行を「.show」に変えてもできます。
この一文を入れているのは、「キャンセル」とか「×」を押された時のためです。
この一文がないとエラーになるので、PC慣れしていない人にとっては大事件になります。

f:id:cha-hanman:20200725134047p:plain
こんなエラーが出ます。

以下、画像で挙動を説明します。

エクセルと、マクロ実行用のボタンを用意します。
f:id:cha-hanman:20200725134729p:plain


マクロ実行用のボタンを押すとフォルダ選択のダイアログが開きます。
例として「デスクトップ」を選択してOKを押します。
「キャンセル」や「×」を押すと終了します。
f:id:cha-hanman:20200725134835p:plain


A1セルにフォルダのパスが書き込まれました。
f:id:cha-hanman:20200725134907p:plain
(***には、通常ユーザ名が入ります。)