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

下記のVBAを共有した場合、

①のコードでは、
Workbooks.Openで指定した共有パスの「在庫表.xlsm」が開けず、
strPathで指定した共有パスはエラーになりません。

それで仕方なく、②のコードで対応しています。
②のコードは、サーバーとなるPCのパス(C:から始まる絶対パス)と共有側のパス(\\から始まる共有パス)を設定しています。共有のパスが開かなければ(エラーになれば)絶対パスをwb1に代入する、という方法です。共有側でしか機能しなくサーバー機で実行できないのは問題ですので。。

しかし、ファイルを読み込むstrPathでは、①②ともに共有パスだけで問題なく動作します。

「HOGE_joint\商品リスト」\以下の「注文データ」フォルダにはアクセスできているのに
「HOGE_joint\商品リスト」\以下の「在庫表.xlsm」にはアクセスできない原因がわかりません。
もちろん、在庫表.xlsmだけ特別なアクセス設定をしている訳ではなく、HOGE_joint以下の共有設定はすべてeveryoneでのフルアクセスです。

尚、共有先でしたら、Workbooks.Openで絶対パスを記述しなくても正常に動作していますので、「在庫表.xlsm」がないということはありません。

つきまして、
共有する場合は、やはりサーバー機の絶対パスと共有パスの両方が必要なのでしょうか?
その場合、strPathで指定した共有パスだけは、絶対パスがなくとも正常に動作しているのでしょう?

以上につきましてご助言をいただけましたら幸いです。
何卒よろしくお願い申し上げます。



------------------------------------------------------------
Sub DataLoad_test()
Dim ・・・
Dim ・・・
Dim ・・・

' 在庫表を開く
Set wb1 = Workbooks.Open("\\HOGE-MAINPC\joint\商品リスト\在庫表.xlsm")
Set ws2 = wb1.Sheets("販売数")
Set ws3 = wb1.Sheets("在庫高")



strPath = "\\HOGE-MAINPC\joint\商品リスト\注文データ\"
' txtファイルを順に読み込む
strFileName = Dir(strPath & "*.txt")
Do While strFileName <> "

・・・
・・・
・・・
・・・

End Sub



------------------------------------------------------------
Sub DataLoad_test()
Dim ・・・
Dim ・・・
Dim ・・・


'在庫表を開く ※ローカルと共有の2ヶのパスが必要
On Error Resume Next ' エラーが起きても処理を継続する

Set wb1 = Workbooks.Open("\\HOGE-MAINPC\joint\商品リスト\在庫表.xlsm")
If wb1 Is Nothing Then ' ファイルが開けなかった場合は、もう一方のパスを試す
path = "C:\HOGE\joint\商品リスト\在庫表.xlsm"
Set wb1 = Workbooks.Open(path)
End If

On Error GoTo 0 ' エラー処理を元に戻す

Set ws2 = wb1.Sheets("販売数")
Set ws3 = wb1.Sheets("在庫高")

strPath = "\\HOGE-MAINPC\HOGE_joint\商品リスト\注文データ\"
' txtファイルを順に読み込む
strFileName = Dir(strPath & "*.txt")
Do While strFileName <> "

・・・
・・・
・・・
・・・

End Sub

A 回答 (1件)

こんばんは



情報が「できない」だけなので、直接の回答ではありません。

共有ファイルが開けないから、ローカルを代わりに開くのでOKなのでしょうか?
もしそうなのなら、初めからローカルのファイルを開けば済む話だと思われます。
そういうわけにはいかないから「共有ファイル」を利用しようとしているのではないのでしょうか?

>「HOGE_joint\商品リスト」\以下の「注文データ」フォルダにはアクセスできているのに
>「HOGE_joint\商品リスト」\以下の「在庫表.xlsm」にはアクセスできない原因がわかりません。
「できない」だけではなく、例えばエラーになるのであれば、その時のエラーメッセージを見ればヒントがあると思われます。
「ファイルが見つかりません」などなど・・

少しは調べてみる気があるのなら、アクセスできているフォルダからその下部にある、ファイルとパスのリストをVBAで出力してみれば、どのような状態であるかがわかるのではないでしょうか?
(例えば、あるフォルダ内だけアクセスできないとか・・)

共有ファイルの場合は、アクセス権の他に同時アクセスの問題もありそうです。
特に、一度開いた後のクローズ処理をきちんと行わないと、「開いている状態」と認識されたままになる可能性がありそうです。
あるいは、既に他のデバイスからアクセス中である場合の処理も記述しておく必要がありそうに思いますが・・

当該の共有ファイルを編集する必要があるのかないのかも不明ですが、もしも参照だけで良いのなら、ReadOnlyでOpenするという方法も考えられそうに思います。


※ 実際の状態が不明なので、思い付きでの回答ですが、何かのご参考にでもなれば。
    • good
    • 0
この回答へのお礼

サーバ機側にて、共有パスで当該のxlsmを開いたところ、セキュリティのダイヤログが出、「当該xlsmは信頼済みとしてアクセスを有効」とするとパスが通りました。。。;

フォルダにはアクセスできるのにファイルにはアクセスできないのはおかしいと思い込んでしまっていました。

またデバックではただ黄色マーカーされるだけで情報が少なく申し訳ございませんでした。「アクセス禁止ファイルのため参照不可」みたいな警告がでてくれていればよかったのですが;w

この度はご回答をいただき誠にありがとうございました!

お礼日時:2023/03/05 18:06

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