電子書籍の厳選無料作品が豊富!

よろしくお願いします。
マクロを実行時、下記のエラーがでます。
ちなみにデバッグモードでは、「→」矢印のついた行が黄色くハイライトされます。

「実行時エラー91 オブジェクト変数またはwithブロック変数が設定されていません」

  Set wb1 = Workbooks.Open("\\HOGE-01\hoge_joint\商品リスト\在庫表.xlsm")
→ Set ws1 = wb1.Sheets("総合") ' SheetをSheetsに修正

ただ、当該エクセルファイルのショートカットを作成し、そのショートカットアイコンのプロパティにて以下を登録し、そのショートカットから実行すると正常に実行されます。(作業フォルダは空白でも正常に動きます)

リンク先:\\HOGE-01\hoge_joint\商品リスト\在庫表.xlsm
作業フォルダ:\\HOGE-01\hoge_joint\商品リスト

このファイルをショートカットからではなく、本体から実行し、エラーがでなくなる方法をご教授いただけますと幸いです。

※\HOGE-01\hoge_joint\ とそのサブフォルダは信頼できる場所に設定してあります。
※信頼済みドキュメントの設定では、ネットワーク上のドキュメントは信頼するにチェックしています
※マクロの設定は、警告してVBAマクロを無効にするにチェックしています。
※マクロの設定ですべてのマクロを有効にして試しましたがショートカットからしか動作しませんでした。
※インターネットオプション、セキュリティで、ローカルインターネットに当該のIPを登録しましたが、これもショートカットからしか実行できませんでした。
※共有設定はEveryoneでフルアクセスです。

以上、何卒よろしくお願い申し上げます。

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

  • ご回答、誠にありがとうございます。

    >マクロはOpen済の<在庫表.xlsm>に書かれているんじゃないですか?

    仰せの通りで、No.1様のご回答を見、これに違いない! 思い当たる挙動がある! と思いOpenの箇所を修正、他にも「wb1.Sheets」を多数使っていましたので、「wb1.Sheets」を「ThisWorkbook.Sheets」にカレントプロジェクト単位で総置換したところ、ショートカットからではなく、本体エクセルファイルから正常に実行することができました。AI頼りで作ったプログラムでしたので、正常には動いてくれてとても助かっているマクロなのですが根本的な部分の理解がまったく足りていませんでした。。。

    まだ皆さまからのアドバイスをすべて見切れていませんが、その内容を見、勉強したいと思います。
    取り急ぎの御礼とご報告までにて失礼いたします。

      補足日時:2025/03/22 11:05

A 回答 (3件)

もしかして、マクロはOpen済の<在庫表.xlsm>に書かれているんじゃないですか?それなら、Workbooks.Openをやめて


Set ws1 = ThisWorkbook.Sheets("総合")
としてください。
    • good
    • 0
この回答へのお礼

助かりました

お礼日時:2025/03/22 16:04

こんばんは



ご質問文からはハッキリしませんけれど、シート取得の際のエラーであれば、その前のOpen処理は正しく行われていることになります。
であるなら、当該ブックが開いてアクティブになっている状態でエラーが発生しているはずですが、そうなっていますでしょうか?

もしも、ブックがちゃんと開いているのなら、何らかの理由で戻り値を取得できていない可能性が疑われますが、ウォッチウインドウなどで変数wb1の内容を調べてみてください。
仮に、取得できていないようなら、Open後に
 Set wb1 = ActiveWorkbook
などで、再取得してみても動作しないでしょうか?

なんとなくの雰囲気からは、サーバー側のロケールとの関連などで、日本語のパスが正しく解釈されていないような気もしますけれど・・・
    • good
    • 0
この回答へのお礼

ありがとう

お礼日時:2025/03/22 16:04

こんばんは 


再現できない事と掲示されているコードだけですと 
91エラーを特定するには情報が足りないと思いますので
参考程度でお願いします

>ショートカットからなら正常に動作する疑問
これはショートカットからは単に開くだけでVBAからは開いたのちに特定シートを取得している違いだと思います


以下推測
ざっくりだとwb1が取得できていない為と思うのですが
ステップ実行だとエラーが出ないとか・・・

気になるのは在庫表.xlsmの拡張子・・・マクロ付きブックですね
Open系Activate系イベントなどは有りますか?
他のブックから開く想定で良いのですよね・・・

既にしているかもしれませんが ミニマムで実験を行ってみては
イベントを抑止してみる・読み取り専用で開いてみるとか・・
ActiveWorkbookで取得してみるとか・・・

新規ブック・標準モジュールで

Option Explicit

Private Const TargetPaht As String = "\\HOGE-01\hoge_joint\商品リスト\在庫表.xlsm"
Private Const TargetSheetName As String = "総合"
Dim wb1 As Workbook
Dim ws1 As Worksheet
Dim str As String

Sub test()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False

Call Tst1(True): Debug.Print str
Call Tst2(False): Debug.Print str

Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub


Sub Tst1(fg As Boolean)
str = ""
Set wb1 = Workbooks.Open(TargetPaht, ReadOnly:=fg)
If Not wb1 Is Nothing Then
str = "wb1:True :" & wb1.Name
wb1.Sheets(TargetSheetName).Visible = True
Set ws1 = wb1.Sheets(TargetSheetName)
If Not ws1 Is Nothing Then str = str & " | ws1:True" & ws1.Name
wb1.Close
Set wb1 = Nothing
Set ws1 = Nothing
Else
str = "wb1:NG"
End If
End Sub

Sub Tst2(fg As Boolean)
str = ""
Workbooks.Open TargetPaht, ReadOnly:=fg
Set wb1 = ActiveWorkbook
If Not wb1 Is Nothing Then
str = "wb1:True :" & wb1.Name
Set ws1 = ActiveWorkbook.Sheets(TargetSheetName)
If Not ws1 Is Nothing Then str = str & "| ws1:True : " & ws1.Name
ActiveWorkbook.Close
Set wb1 = Nothing
Set ws1 = Nothing
Else
str = "wb1:NG"
End If
End Sub

イミディエイトウィンドウに出力れますか?
そもそも実行時エラーがはかれてしまいますか?
    • good
    • 0
この回答へのお礼

ありがとう

お礼日時:2025/03/22 16:05

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A