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

http://www.k1simplify.com/vba/tipsleaf/dir.html
を参考にしたのですが

Sub test()
RmDir "\\test-PC\Users\Public\test"
End Sub

でフォルダの削除ができると思ったのですが
パス名が無効ですというエラーになってしまいます。

ネットワークパスだからダメなのでしょうか?
パスはフォルダからコピペしたので間違いないです。

A 回答 (6件)

このような投稿の場合プラットフォームを記載しましょう。



例題として、下記のように、まず本家のリファレンスサイト又はヘルプを見ましょう。で、仕様を理解して使用しましょう。サンプルをそのまま使うのではなく、リファレンスで、仕様を確認しながら再構成する。じゃないと、一生人に聞くことになり、もっとも人に嫌われる人種になります。

http://msdn.microsoft.com/ja-jp/library/0103t1dy …

---抜粋--
PATH

必ず指定します。削除するディレクトリまたはフォルダを表す文字列 (String) 式を指定します。Path にはドライブ名を含めることができます。ドライブを指定しない場合、RmDir 関数は現在のドライブ上のディレクトリを削除します。
--------------

仕様通りの動作をしていることになります。これは「Visual Studio 2008」のリファレンスです。何のツールでバージョン等を記載するのが定石です。Office2003のヘルプにも同じ事が記載されています。が、全てが同じではない。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/12/08 19:41

No.4,5を読みふと思い浮かびましたが



エクスプローラでもフォルダ削除しようとすると「接続してるユーザがいます」とか
「共有が解除されます」とか警告され、とりあえずすぐには削除されず応答待ちになるかと思います、
vba で削除しようとした時にもそのような状況だったんじゃないですか?

>パス名が無効ですというエラー

エラー表示内容の文章が的確でない事はママありますし。

>パスはフォルダからコピペしたので間違いないです。
事前に自機でもネットワークパスからアクセスしたんですよね。

そこら辺を確認してみたら解決につながるかも。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/12/08 19:41

No4です。


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

RmDir "\\test-PC\Users\Public\test"

で削除できます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/12/08 19:41

> ネットワークパスだからダメなのでしょうか?



そうですね。削除前にネットワークドライブのマウントをして、フォルダを削除した後にマウントを解除する方法はいかがでしょう。なお、該当フォルダそのものが共有設定されている場合にはエラーになります。

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/12/08 19:41

No.2です訂正


誤>HTML記述では半角スペースでも
正>HTMLをブラウザで表示した時、画面上半角スペースに見えても
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/12/08 19:41

詳しくないですが。



フォルダにネットワークアクセスのパスワードロックがかかってませんか。
エクスプローラはパスワード保存してるので初回以降は入力なく開けても
Vba からは開けない、という事があったそうです。

http://oshiete.goo.ne.jp/qa/1514291.html
の回答No.4 のお礼欄
ただ、エラーメッセージが違うので、的外れな可能性大ですが。

あと、vba の例ではありませんが、ネットワークパス上におかしな文字が使われていて
見た目スペースだが文字コードが違い、コピペ先で認識しなかった、という事もありました。
文字コードは忘れましたが。
詳しくは確認してませんが多分双方の使用禁止文字の扱いの相違とかあったのでしょう。

本家マイクロソフトのWebページでも「丸付のC」が使われる個所がありこれが時々邪魔。

更に、エクスプローラの例ではありませんが、
HTML記述では半角スペースでもコピペしてみるとそのとおりでない場合とか、よくありますし。

いろいろ疑ってみて検証していくと絞り込めます。
古いツールだと16bit文字コードがダメとか、パス上にスペースある場合は要注意とか、
フルパスの文字数が長いとダメとかいろいろあったりします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/12/08 19:41

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