• ベストアンサー

「Workbooks.Open」の動作について

いつも参考にさせてもらっています。 VBAで別のブックを開こうとして、  Workbooks.Open "WorkBook.xls"  Msgbox "開きました。" と記述しました。 ですが、「WorkBook.xls」ファイルは開くのですが 次のメッセージボックスが表示されません。 デバッグ実行すると、「Workbooks.Open」でファイルが開かれた後、 処理が終了されているみたいです。 どうしても原因がわからず、先に進むことができません。 どうすれば、ファイルも開き、メッセージボックスも表示されるのでしょうか? 皆様のお力をお貸し下さい。 お願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。#1のWendy02です。 >相変わらずメッセージボックスは表示されませんでした。 ところで、少し、気になっているのは、Excelのバージョンは、いくつですか? 今は、旧バージョンでは調べていないのですが、いずれにしても、詳しく調べてみないとはっきりしないことがいくつかあります。 Visual Basic Editor 画面を出したまま、そのマクロをステップマクロ(F8)で、調べたら、どこかにマクロが移っているのかもしれません。たぶん、ステップマクロでは、元のマクロには戻らないかもしれませんが、次に、どこに入るかは分かります。 また、MsgBox は、次に行の、その場所でなくてはならないのか、作業など一段落してからでもよいと思います。MsgBox は、ある意味で対話形式になりますから、その場所で止まるのは、あまり効率的なマクロとは言えません。MsgBox なしなら、どうなりますか? Excelの特殊な設定されたブックは、無理です。だいたいは、開く側のブックの性質にもよるのではないかと思います。私は、開かれる側から開く側のマクロを止める方法は、いくつか分かります。 ここのコーナーでも、ずっとダメだししている質問で、DDEリンクやActive X コントロールを使って、外部通信でExcelのファイルにデータを入れている状態では、いくらがんばっても、インターラプト(中断)が入りますから、マクロは途中で終わってしまいます。確か、1秒~5秒周期だっと思います。 これは、私の方の例で、めったにありませんが、かなり短い周期で自動保存をしてまいすが、私のマクロでも、外部からデータを取るマクロは、同じ同期が重なると、マクロは途中で止まるだけでなく、そのブック自体が閉じてしまいます。外部からインターラプトされない方法もありますが、あまりダメ元でやるのは、まずいろいろ調べてからにしたいです。 もう少し詳しい状況を教えてください。

ipsum11
質問者

お礼

別作業に取り掛かった為、時間があいてしまい申し訳ありません。 その為この現象も解決する必要がなくなってしまいました。 後味が悪いですが、再度必要になった時に改めて考えることにします。 色々とありがとうございました。

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

その他の回答 (2)

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.3

VBA編集画面で Project枠でThisWorkbookを選択して、コーディングウィンドの左枠でWorkbookを選択して右枠でイベント(Open)を選択して 例えば Private Sub Workbook_Open() MsgBox "開きました。" End Sub ではダメでしょうか

ipsum11
質問者

お礼

別作業に取り掛かった為、時間があいてしまい申し訳ありません。 その為この現象も解決する必要がなくなってしまいました。 後味が悪いですが、再度必要になった時に改めて考えることにします。 色々とありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。  Workbooks.Open "WorkBook.xls"   それは、『"WorkBook.xls"』の問題ですね。開くと、マクロを帳消しにするコードが入っているのだと思います。 Application.EnableEvents = False Workbooks.Open "WorkBook.xls"  MsgBox "ファイルオープン" Application.EnableEvents = True もしかしたら、こうすれば、通るかもしれません。

ipsum11
質問者

お礼

早速のご回答ありがとうございます。 ご指摘のとおりに試してみたのですが、 相変わらずメッセージボックスは表示されませんでした。 他の原因みたいですね。 もう少し悩んでみます...

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

関連するQ&A

  • VBA Workbooks.open

    ブックを開くコマンド × Workbooks("filename.xls").open ○ Workbooks.open filename:="filename.xls" 何故下なのですか?ワークブックコレクションの中から特定のブックを指定し開くなら、上の構文にした方がワークシートコレクション等と構文表現を統一出来ます。 現にブックを閉じるコマンドは Workbooks("filename.xls").close です。何故ブックを開くコマンドだけ別表現なのですか?

  • workbooks.openでフリーズ

    excel2007で作成されたVBAが記述されているファイルですが、 excel2010で実行するとフリーズします。 内容的には、ある2つのファイル内容を参照し、比較するというコードなのですが、 F8で一行ずつ実行していくと、workbooks.openメソッドでフリーズしていることがわかりました。 参照ファイルをローカルに置いて実行するとフリーズせずに処理できますが、 参照ファイルがサーバーにある状態では無理です。 これは、サーバーへのアクセス権限の問題なのでしょうか? でも、excel2007で成功した同じユーザーで実行しても、フリーズとなります。 ネットでいろいろと検索し、openメソッドの前にDoEventsメソッドを記述してみましたがフリーズしました。 どなたか回避策がわかる方、教えてください。お願いします。

  • Sub Auto_Open() 実行されない

    Excel2003VBAについて教えてください。 あるBookから、VBAの”Workbooks.Open”で別のブックを開くように作ってあるのですが、開かれるBookのほうに”Sub Auto_Open()”で特定のシートをアクティブにするように作っています。 普通にBookを開くとSub Auto_Open()は実行されますが、”Workbooks.Open”では実行されません。 ”Workbooks.Open”で開いたときに、特定のシートがアクティブになればそれでよいのですが。 よろしくお願いします。

  • エクセル2000VBAでファイルを操作したい

    いつもお世話になっています。 エクセルVBAで別のワークブックを参照したいので workbooks.open Filename:="C:my documents\***.xls" とすると、そのオープンするワークブックのTisWorkbookのWorkbook_Open()で実行している(.show)メニュー(ユーザーフォーム)が開いてしまいます。 このとき、Workbook_Open()を実行させないでワークブックを開く方法って、 なにかありますか? Shiftを押しながらファイルを開くとき、実行されませんよね?それをVBAでできるのですか? よろしくお願いします。

  • Auto_OpenとWorkbook_Openの違いは?

    Auto_OpenとWorkbook_Openの違いは何でしょうか? マクロから開かれた場合、Workbook_Openしか実行されないことは認識していますが、それ以外に異なる点は無いのでしょうか? Workbook_OpenやWorkbook_BeforeCloseはブックが最初に開かれたり閉じられたりすると認識していますが、最近このマクロを記述しているブックをウィンドウのバックに置いて、他のブックからこのブックにしようとするとやたら時間がかかるような気がしました。 Workbook_OpenやWorkbook_BeforeCloseを削ったら早くなったような気がしましたが、これは単なる気のせいでしょうか? よろしくお願い申し上げます。

  • Openメソッドについて

    ブックAのSheet1にあるセルのデータをブックBのSheet1のセルにコピーするために、以下のようにOpenメソッドを使ったVBAを記述してみたのですが、エラーコード1004「指定されたファイルが存在しません」のようなエラーメッセージが出てきました。Openメソッドが使われている例を見ているとどうやらブックのあるフォルダを指定しているような感じがするのですが、Openメソッドは具体的に該当のブックのある場所を指定しなくてはならないのでしょうか??(私がVBAを記述するにあたり参考にしたインターネットのVBAを紹介するページでは、ブックのある場所を指定せず、私が記述したように直にブック名を入力していました。) お忙しい中申し訳ないのですが、どなたかご教授いただけると、とても嬉しいです!よろしくお願いいたします。 Sub ブックAのデータをブックBに() With Workbooks.Open("ブックA.xlsx")  .Sheets("Sheet1").Range("E8").Value = _ ThisWorkbook.Range("C2").Value End With End Sub

  • Excel VBA の ChangeFileAccess

    Excel(2000 SP-3) VBAの ChangeFileAccessがうまく行きません。 VBAからあるExcelファイルをWorkbooks.Open で開く処理の制御で悩んでいます。 2人で同時にマクロでhoge.xls をOpenすると、どちらも「他のユーザが使用中です」的なメッセージが出ませんでした。 (エクスプローラからクリックしたりして、hoge.xlsを直接開くと、他のユーザが使用中かどうかがわかります) それでは困るので、ChangeFileAccess のNotify:=true をセットしてみたら、2人目は他のユーザが使用中である旨のメッセージが出るようになりました。 しかし、ChangeFileAccess のNotifyはちゃんと設定されているようなのですが、 'ChangeFileAccess'メソッドは失敗しました:'_Workbook'オブジェクト とエラーが出ています。 ChangeFileAccessはどう使うのが正しいのでしょうか? ソースは Workbooks.Open Filename:=ThisWorkbook.Path & "\hoge.xls", updatelinks:=1, Notify:=True ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, Notify:=True って感じなのですが。 Workbooks.Openはちゃんとできています。Workbooks.OpenがコケたらOn Error Goto で拾ってMsgBoxでメッセージを出す、という処理をしているのですが、Workbooks.OpenはOKなのにChangeFileAccessでコケて、On Error Goto に引っかかってしまっています。

  • VBA-Workbook_Open()イベントで

    再度、お世話になります。 手順1.book1よりボタンをクリックしてbook2を開く 手順2.あるフォルダの.xlsファイル名をボタン名に貼り付ける 手順3.book2の戻るボタンでbook2を閉じ、book1を開く 手順4.手順1を実行する という流れを行ったところ1回目のbook2の表示の際にはうまくファイル名を表示できるのですが、戻った後の2回目のbook2の表示ではファイル名が1回目のときのままになってしまいます。 一部 [book2での処理] ***Module1*** Public strPath as String ***ThisWorkbook*** Public Sub Workbook_Open() strPath = "C:\" & Worksheets("Sheet1").Range("A1") myName = Dir(strPath & "\*.xls", vbDirectory) If myName <> "" Then FCnt = FCnt + 1 Worksheets("Sheet1").OLEObjects("btn" & FCnt).Object.Caption = myName Do ・・・(略) Loop End If End Sub ***Sheet1*** Private Sub btnBack_Click() Workbooks.Open Filename:="C:\book1.xls" Workbooks("book2.xls").Close saveChanges:=False End Sub のようにしています。 お手数をおかけしますが、どなたかご教授お願いいたします。

  • VBAでファイルを閉じる時に、他のエクセルファイルを閉じるには?

    VBAで、 Private Sub Workbook_Open() Workbooks.Open FileName:="バス時刻表.xls",ReadOnly:=True End Sub で、バス時刻表.xlsを自動的にオープンした後、 閉じる時に、 Private Sub Workbook_BeforeClose(Cancel As Boolean) Workbooks("バス時刻表.xls").Close End Sub で記述したら、エラーとなります。 どのようにすればいいのでしょうか? よろしくお願いします。

  • エクセルファイルをオープンしたときの再計算について

    エクセルファイルをオープンすると自動的に再計算がされます。VBAを使って、Workbook_Open()で、再計算を止めると、当然、ブックを開いた時全てで再計算が停止してしまいます。 で、質問ですが、あるブックから他のブックを開いた時には、再計算を行なわない(あるブックにVBAを組み込んで・・(イベントは、ボタンにからめてもok!)にして、手動で他のブックを開いた時は、再計算を行なうようなことが出来るのでしょうか? VBA初心者の僕として、精一杯考えたのは、親となるブックから、他のブックを開いた時に、他のブックのWorkbook_Open()イベントが始る前にWorkbook_Open()を書き込めればできると思うのですが?そんなこと無理なのでは?って思います。どなたか?詳しい方いませんでしょうか?宜しくお願い致します。

専門家に質問してみよう