フォルダの削除するには?

解決


メロディ  2008-11-04 17:01:28  No: 140786  IP: 192.*.*.*

フォルダとそのフォルダの中に入っているデータを消したいのですが、
最後のフォルダを削除するところで、エラーがでてしまいます。
どなたかご教授いただけると幸いです。
よろしくお願いします。

Const BAK = "BAK"                         
Const TMP = "TMP"                        

Sub aaa()
    
    Dim sDestination As String
    sDestination = "D\catdb\usr\temp01"

    Dim sBAKPath As String
    Dim sTMPPath As String
    sBAKPath = sDestination & "\" & BAK
    sTMPPath = sDestination & "\" & TMP
            
    Dim BAKFolder As String
    Dim TMPFolder As String
    BAKFolder = Dir(sBAKPath, vbDirectory)
    TMPFolder = Dir(sTMPPath, vbDirectory)
    
    Dim iFile1 As String
    Dim iFile2 As String
    iFile1 = Dir(sBAKPath & "\" & "*.*")
    iFile2 = Dir(sTMPPath & "\" & "*.*")
 
    If BAKFolder <> "" Then
        If iFile1 <> "" Then
            Kill sBAKPath & "\" & "*.*"
        End If
    End If
        RmDir (sBAKPath)
    If TMPFolder <> "" Then
        iFile2 = Dir(sTMPPath & "\" & "*.*")
        If iFile2 <> "" Then
            Kill sTMPPath & "\" & "*.*"
        End If
    End If
        RmDir (sTMPPath)    ←ここでエラー"Path/File access error" 
End Sub

編集 削除
やじゅ  2008-11-05 00:25:40  No: 140787  IP: 192.*.*.*

RmDir 関数だと、ディレクトリ内が空でないと削除されません。
RmDirを使うのをやめて、下記サイトのを使うと
フォルダとそのフォルダの中も消せます。

http://jeanne.wankuma.com/tips/vb6/directory/delete.html
http://jeanne.wankuma.com/tips/vb.net/directory/delete.html

編集 削除
メロディ  2008-11-05 11:32:03  No: 140788  IP: 192.*.*.*

やじゅさんありがとうございます。

http://jeanne.wankuma.com/tips/vb6/directory/delete.html
こちらを参考にさせていただきました。

FileSystemObjectオブジェクトは、Microsoft Scripting Runtimeのライブラリを参照させないとできないんですね。
チェックを入れてやってみたら無事にフォルダを消すことができました。

ただこちらの環境がライブラリ設定の追加を許す環境か、確認しないとわからないので、現在検証しています。

ありがとうございました^^

編集 削除
メロディ  2008-11-05 12:01:24  No: 140789  IP: 192.*.*.*

申し遅れましたが、VBで質問させていただいておりますが、こちらの環境がVBAになります。
なのでMicrosoft Scripting Runtimeのチェックが外れている状態がデフォルト設定となります。
他の端末でマクロを動かすと、Microsoft Scripting Runtimeのチェックが外れている状態である可能性が高いため、チェックをいれる作業を要します。
※チェックをはずした状態で動かした場合にエラーとなりました。

現在の仕様では、Microsoft Scripting Runtimeのチェックを入れる作業はなしの方向で、考えなければいけない状況になるかもしれません。

初心者のため、参照設定を入れていいものかどうかがわからないので、
申し訳ないですが・・・

引き続き検証を続けますが、他にいい案があれば、アドバイスをお願いします。

編集 削除
やじゅ  2008-11-05 12:56:49  No: 140790  IP: 192.*.*.*

参照設定を入れない場合は、CreateObjectを使うといいですよ
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

編集 削除
メロディ  2008-11-05 13:56:55  No: 140791  IP: 192.*.*.*

早速の返信ありがとうございます^^
やじゅさんのアドバイスで問題なく動作しました!

言われただけでまだ理解はできてないですが、助かりました。

マクロやりだして、3ヶ月くらいですが、知らないことだらけだし、
こちらのVBAがネットなどにあまり情報がないので、毎日試行錯誤です。

質問してよかったです。
また困ったときはよろしくお願いします。
ありがとうございました。

編集 削除