• ベストアンサー

RmDirでフォルダが削除できない vba

http://www.k1simplify.com/vba/tipsleaf/dir.html を参考にしたのですが Sub test() RmDir "\\test-PC\Users\Public\test" End Sub でフォルダの削除ができると思ったのですが パス名が無効ですというエラーになってしまいます。 ネットワークパスだからダメなのでしょうか? パスはフォルダからコピペしたので間違いないです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

このような投稿の場合プラットフォームを記載しましょう。 例題として、下記のように、まず本家のリファレンスサイト又はヘルプを見ましょう。で、仕様を理解して使用しましょう。サンプルをそのまま使うのではなく、リファレンスで、仕様を確認しながら再構成する。じゃないと、一生人に聞くことになり、もっとも人に嫌われる人種になります。 http://msdn.microsoft.com/ja-jp/library/0103t1dy(v=vs.90).aspx ---抜粋-- PATH 必ず指定します。削除するディレクトリまたはフォルダを表す文字列 (String) 式を指定します。Path にはドライブ名を含めることができます。ドライブを指定しない場合、RmDir 関数は現在のドライブ上のディレクトリを削除します。 -------------- 仕様通りの動作をしていることになります。これは「Visual Studio 2008」のリファレンスです。何のツールでバージョン等を記載するのが定石です。Office2003のヘルプにも同じ事が記載されています。が、全てが同じではない。

iwbtsujvtfm
質問者

お礼

回答頂きありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • unagi-pie
  • ベストアンサー率41% (166/397)
回答No.6

No.4,5を読みふと思い浮かびましたが エクスプローラでもフォルダ削除しようとすると「接続してるユーザがいます」とか 「共有が解除されます」とか警告され、とりあえずすぐには削除されず応答待ちになるかと思います、 vba で削除しようとした時にもそのような状況だったんじゃないですか? >パス名が無効ですというエラー エラー表示内容の文章が的確でない事はママありますし。 >パスはフォルダからコピペしたので間違いないです。 事前に自機でもネットワークパスからアクセスしたんですよね。 そこら辺を確認してみたら解決につながるかも。

iwbtsujvtfm
質問者

お礼

回答頂きありがとうございました。

すると、全ての回答が全文表示されます。
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.5

No4です。 ネットワークパスだからダメだと思ったのですが、testフォルダそのものを共有フォルダにしていなければ(ただし、共有フォルダにしていても一度もアクセスしてなければ削除できます) RmDir "\\test-PC\Users\Public\test" で削除できます。

iwbtsujvtfm
質問者

お礼

回答頂きありがとうございました。

すると、全ての回答が全文表示されます。
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

> ネットワークパスだからダメなのでしょうか? そうですね。削除前にネットワークドライブのマウントをして、フォルダを削除した後にマウントを解除する方法はいかがでしょう。なお、該当フォルダそのものが共有設定されている場合にはエラーになります。 Sub Sample() Dim objNtWork As Object, objFileSys As Object Dim MySetDriveName As String Set objFileSys = CreateObject("Scripting.FileSystemObject") Set objNtWork = CreateObject("WScript.Network") MySetDriveName = "Z:" '存在しないドライブを指定してください。 '念のためにドライブがあるかどうかチェックしてますからマウントしてます。 If Not objFileSys.DriveExists(MySetDriveName) Then objNtWork.MapNetworkDrive MySetDriveName, "\\test-PC\Users\Public" Else MsgBox "既に " & MySetDriveName & "ドライブ が存在します。", vbCritical Exit Sub End If objFileSys.DeleteFolder MySetDriveName & "\test", True 'RmDir MySetDriveName & "\test" 'もとのRmDirを使ってもよろしいです。 objNtWork.RemoveNetworkDrive MySetDriveName, True Set objNtWork = Nothing Set objFileSys = Nothing End Sub

iwbtsujvtfm
質問者

お礼

回答頂きありがとうございました。

すると、全ての回答が全文表示されます。
  • unagi-pie
  • ベストアンサー率41% (166/397)
回答No.3

No.2です訂正 誤>HTML記述では半角スペースでも 正>HTMLをブラウザで表示した時、画面上半角スペースに見えても

iwbtsujvtfm
質問者

お礼

回答頂きありがとうございました。

すると、全ての回答が全文表示されます。
  • unagi-pie
  • ベストアンサー率41% (166/397)
回答No.2

詳しくないですが。 フォルダにネットワークアクセスのパスワードロックがかかってませんか。 エクスプローラはパスワード保存してるので初回以降は入力なく開けても Vba からは開けない、という事があったそうです。 http://okwave.jp/qa/q1514291.html の回答No.4 のお礼欄 ただ、エラーメッセージが違うので、的外れな可能性大ですが。 あと、vba の例ではありませんが、ネットワークパス上におかしな文字が使われていて 見た目スペースだが文字コードが違い、コピペ先で認識しなかった、という事もありました。 文字コードは忘れましたが。 詳しくは確認してませんが多分双方の使用禁止文字の扱いの相違とかあったのでしょう。 本家マイクロソフトのWebページでも「丸付のC」が使われる個所がありこれが時々邪魔。 更に、エクスプローラの例ではありませんが、 HTML記述では半角スペースでもコピペしてみるとそのとおりでない場合とか、よくありますし。 いろいろ疑ってみて検証していくと絞り込めます。 古いツールだと16bit文字コードがダメとか、パス上にスペースある場合は要注意とか、 フルパスの文字数が長いとダメとかいろいろあったりします。

iwbtsujvtfm
質問者

お礼

回答頂きありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A