プロが教える店舗&オフィスのセキュリティ対策術

先日教えて頂けたマクロがあります、このマクロを実行すると作業ブック内の不要なフォルダを削除できます。
このマクロでは不要なフォルダを一つだけ選択して削除できますが、複数選択して削除出来る方法を詳しいコード共に教えてください。
よろしくお願いします。
マクロ
Sub フォルダ削除()
Dim InitialPath As String
InitialPath = ThisWorkbook.Path
Dim rs As Integer
rs = MsgBox("フォルダを削除します。", vbCritical + vbOKCancel, "削除の確認")
If rs = vbOK Then
Dim folderPath As Variant
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "削除するフォルダを選択してください"
.InitialFileName = InitialPath
If .Show = -1 Then
folderPath = .SelectedItems(1)
Call MoveDustbox(folderPath)
Else
MsgBox "削除をキャンセルしました。", vbInformation
Exit Sub
End If
End With
End If
End Sub
よろしくお願いします。

A 回答 (3件)

こんにちは



組み込みダイアログボックスでは、フォルダの選択は1つしかできません。
「OK」が押されたら、再度そのフォルダを開いた状態でダイアログを表示し、「Cancel」されるまで繰り返すことで、結果的に複数のフォルダーを選択させることは可能です。
ただし、不特定のユーザが使用するのであれば、このUIは誤解を招く可能性がありますので、わかっている人だけが使う前提でないと、同じものを何度も選択しかねません。

不特定ユーザでも誤解されにくいようにするのなら、1つ選択して「削除しました」までを繰り返すようにすれば間違えはなくなると思いますが、少々うっとおしいUIになりかねません。
他の方法としては、フォームなどのリストに選択フォルダを追加してゆくようなUIも考えられますが、内容からして果たしてそのようなものが必要なのかは疑問です。


一方で、フォルダの削除って、普通にエクスプローラ上でフォルダを選択してDeleteキーを押せばできますし、この操作を知らないユーザも稀でしょう。

わざわざUIを変えてまで同じ内容のことを実現するよりも、VBAからエクスプローラを開いて、後はユーザに任せた方が簡単ではないでしょうか?
どうせ、削除フォルダの選択判断はユーザ任せなんですから、変わりないと言えるでしょう。
フォルダ選択の操作は、ダイアログでもエクスプローラでも変わりませんし、むしろ、エクスプローラの方が見慣れている分、やりやすいかも知れません。
そうすれば、下記程度のもので済んでしまいます。
(さらに言うなら、こんなものが必要なのかどうかすら疑問ですけれど・・)

MsgBox "不要なフォルダを削除してください"
Shell "C:\Windows\Explorer.exe " & ThisWorkbook.Path, vbNormalFocus

※ ↑は、ごく一般的なOSの状態を想定してあります。
    • good
    • 3
この回答へのお礼

回答ありがとうございました。
参考にさせて頂きます。

お礼日時:2023/07/07 13:35

通常ダイアログではフォルダの複数選択はできません。


力業やダイアログ風にユーザーフォームで自作するしかないと思います
オブジェクトが必要になりコード提示だけでは動きませんのでコードを所望されても私には気力がありません
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
一つ前の質問に補足が出来なかった為、改めて質問をさせて頂きました。
やはりそうなんですね。
納得出来ました。
いつもありがとうございます。

お礼日時:2023/07/07 11:39

https://www.239-programing.com/excel-vba/func/fu …



For i = 1 To .SelectedItems.Count
strFiles = strFiles & vbLf & .SelectedItems(i)
Next i

ここがヒントなのでは?(前の質問については見てないですが)

If .Show = -1 Then
For i = 1 To .SelectedItems.Count
folderPath = .SelectedItems(i)
Call MoveDustbox(folderPath)
Next i
Else

かな?
検証はしてません。
検索しただけです。

Dim i As Integer
変数の宣言をお忘れなく。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
参考にさせて頂きます。

お礼日時:2023/07/07 11:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!