プロが教えるわが家の防犯対策術!

下記のマクロは作業ブック内の指定ファイルを削除出来るマクロになっておりますが、
このマクロを
作業ブック内の指定フォルダが削除を削除出来る方法を詳しいコードを教えてください。
マクロ
Sub Macro1()
' メッセージボックスの表示
Dim result As VbMsgBoxResult
result = MsgBox("不要ファイルを削除します", vbCritical + vbYesNo, "作業フォルダ削除")

' キャンセルがクリックされた場合、マクロの実行を終了
If result = vbNo Then Exit Sub

' ファイル選択ダイアログを開いてファイルを選択
Dim fileDialog As fileDialog
Set fileDialog = Application.fileDialog(msoFileDialogFilePicker)

' 複数のファイル選択を許可
fileDialog.AllowMultiSelect = True

' ファイル選択ダイアログを表示
If fileDialog.Show = -1 Then
' 選択されたファイルを削除
Dim selectedFile As Variant
For Each selectedFile In fileDialog.SelectedItems
On Error Resume Next
VBA.FileSystem.Kill selectedFile
On Error GoTo 0
Next selectedFile

' メッセージボックスの表示
MsgBox "ファイルの削除が完了しました。", vbInformation + vbOKOnly, "作業フォルダ削除"
End If
End Sub
よろしくお願いします。

質問者からの補足コメント

  • 質問文に誤りがありました

    作業ブック内の指定フォルダを削除出来る方法を詳しいコードを教えてください。

    です よろしくお願いします

      補足日時:2023/07/06 20:37
  • 回答ありがとうございます
    前置きは割愛させて頂き
    私のやりたい事は
    作業フォルダの中にある不要のフォルダを
    出来れば複数選択して削除したいです
    その時に メッセージボックスが表示されて
    okの時は マクロが実行し キャンセルの時はマクロは実行されません
    マクロが実行された時には
    不要フォルダをctrl+マウスで指定し
    その後 okをクリックしてフォルダが削除されます その時に警告文等は一切表示されないで削除が完了します 
    マクロが実行される事は出来るだけクリックの回数を減らしたマクロになってしたいです
    このような希望ですが
    ご理解頂けましたでしょうか?
    何卒宜しくお願いします

      補足日時:2023/07/06 21:08
  • 質問に載せた
    ファイル削除マクロが理想です
    このような感じでフォルダも削除したいです
    フォルダは完全に削除で構いません
    なにぶん歳をとってからの作業なので
    色々とご迷惑をお掛けしして申し訳ありませんが
    よろしくお願いします

      補足日時:2023/07/06 21:13
  • ありがとうございます
    何時も助けて頂き感謝致します
    親切に教えて頂き又丁寧に対応して頂けました事を改めてお礼いたします
    早速試してみます
    お礼を送る事ができませんでしたので
    補足にてお送りいたします

      補足日時:2023/07/06 21:32

A 回答 (2件)

参考コード


#1で言うと あ b i ③ です
フォルダとファイル2つ 別のプロシージャ 削除のプロシージャも別
複数選んでも1つでも処理できると思います
ゴミ箱に移動する処理ですが 移動できず削除される場合もあります
たしかネットワークなど・・・エラーは出なかったかと思いますが念のため
on error を入れています ブックがやばそうなのでDoEventsも入れてます

初期フォルダはThisWorkbook.Path
ThisWorkbook.Pathを変えれば最初のフォルダを変えられます

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

Sub ファイル削除()
Dim InitialPath As String
InitialPath = ThisWorkbook.Path
Dim rs As Integer
rs = MsgBox("ファイルを削除します。", vbCritical + vbOKCancel, "削除の確認")
If rs = vbOK Then
Dim sPath As Variant
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "削除するファイルを選択してください"
.InitialFileName = InitialPath
.AllowMultiSelect = True
If .Show = True Then
ReDim filePath(0)
For Each sPath In .SelectedItems
If filePath(0) <> "" Then
ReDim Preserve filePath(UBound(filePath) + 1)
End If
filePath(UBound(filePath)) = sPath
Next
Call MoveDustbox(filePath)
Else
MsgBox "削除をキャンセルしました。", vbInformation
.Execute
End If
End With
End If
End Sub

Sub MoveDustbox(vPath As Variant)
Dim s As Variant
Dim objShell As Object
Set objShell = CreateObject("Shell.Application")
On Error Resume Next
If Not IsArray(vPath) Then
objShell.Namespace(10).MoveHere (vPath)
DoEvents
Application.Wait Now + TimeValue("0:00:01")
Else
For Each s In vPath
objShell.Namespace(10).MoveHere (s)
DoEvents
Application.Wait Now + TimeValue("0:00:01")
Next
End If
Set objShell = Nothing
End Sub
    • good
    • 0

回答サンプルはあとで


回答ではありませんが確認の為投稿します

なんか同じようなご質問を繰り返しをあちらこちらで見かけるけれど
一体どのような事をなさりたいのでしょうか・・・

実行ブックから相対パスのファイルの削除は落ち着いたようですが・・・

実際削除と言っても色々あります

対象の選択
あ msoFileDialogFilePicker や msoFileDialogFolderPicker
い 絶対パス や 相対パス

削除:
a 文字通り元に戻せない削除
b ゴミ箱に入れる削除
(対象(アドレス)によりゴミ箱に入らず結果aになる場合があります)

削除時の確認
i アラートは出さない
ii アラートを出す

処理は何が判り易いですか
①VBA Killステートメント (aになる)i , ii
②FSO DeleteFileメソッドなど(読取専用ファイルを削除できるa b) i,ii
③Shell Namespace MoveHere i,ii や・・・ 
InvokeVerb メニュー操作なので ii になります・・・

ここのところの回答にはMoveHereは無いようですが色々な方法のサンプル提示があるように思います

いくら理解しないで組み立てて使うに徹していても 解らなくなっているのではないかと思います・・が

同じような処理は幾ついるのでしょう・・・
考察してまとめてみてはいかがでしょう

余談 どうでも良い事ですが
回答のサンプルをすぐそのままご質問のコードに提示されてもさすがに触りたくないですね
私が書いたものでも他のサイトにそのまま動かない等と掲示されるのを見ると回答する気にならなくなるのは私だけでしょうか

回答した処理をそのまま使うのは まぁ良いとして問題があった時には
回答者の返信追加を待つなり、解決もしていないのに適当にBAで閉じたり
言っても仕方ないでしょうけれど
3,4年になると思いますが折角VBAに触れる機会があるのに覚えないなんて勿体ないと思いますよ
    • good
    • 1

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