質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

3081閲覧

CreateObjectからExcelのファイルを開くと、workbook_open()が有効にならないことがある

house1059

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

2クリップ

投稿2017/07/27 23:29

編集2017/07/30 23:04

private sub Workbook_open()に関してですが、このトリガーを設定したファイルを直接開く場合問題なく動作を行なっていますが、他のマクロから開いた場合動作しないパソコンがあります。

例えばトリガーを設定しているファイルをa.xlsmとした場合、b.xlsmで次のコードを実行した場合
sub 起動テスト()
set objExl = CreateObject("Excel.Application")
objExl.Workbooks.open( a.xlsm)
objExl.visible = true

end sub

ファイル a.xlsm自体は開きますが a.xlsmのworkbook_open()のコードは実行されないパソコンがあります。

マクロのセキュリティの設定を"すべてのマクロを有効にする"にしても動作しませんでした。

そもそも手動でa.xlsmを開いた場合はworkbook_open()が動作しているのでマクロのセキュリティの線は薄いと思いますが他に見直す設定などありますでしょうか?

環境ですが、動くパソコン、動かないパソコン両方win7、office2010になります

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/28 12:02

OSやOFFICEのバージョン次第で、開く側のマクロがVBAのイベントを止めてから開く、とはなっていないでしょうか?
退会済みユーザー

退会済みユーザー

2017/07/30 00:01 編集

PC1:win7、office2010 b.xlsmからCreateObjectでa.xlsmを開くとworkbook_open()が有効 PC2:win7、office2010 b.xlsmからCreateObjectでa.xlsmを開くとworkbook_open()が有効にならないことがある、こういうことですね。タイトルを「CreateObjectからExcelのファイルを開くと、workbook_open()が有効にならないことがある」にしたほうが回答が得られやすいかもしれません。
退会済みユーザー

退会済みユーザー

2017/07/30 00:06

このブックには他のマクロは含まれていませんか?
house1059

2017/07/30 23:09

slashさんありがとうございます。助言どおりタイトルを変更させて頂きました。また、他のマクロも含んでいましたがテスト用にCreateObjectのみのbookで試してみても同様にworkbook_openが動作するPCとしないPCがあるようです
guest

回答1

0

ベストアンサー

はずれかもしれませんが、一応確認してください。

考えられる問題1:
Application.EnableEvents = Falseで、どこかでイベントが止められている
起きること:
この状態だと、イベントが無効のままブックを開いてしまい、「ブックを開いたよ」イベントも止められて素通りしてしまいます。
対策:
ブックを開く前にApplication.EnableEvents = Trueを挟んでください

考えられる問題2:
ThisWorkbookではなく、Module1Sheet1などにworkbook_open()が書かれている
起きること:
この状態だと、workbook_openが無視されます。
対策:
ThisWorkbookworkbook_open()を加えてください。

投稿2017/07/30 00:16

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

house1059

2017/07/31 12:20

ご検討ありがとうございます。 考えられる問題1:  Application.EnableEvents = trueに設定しても起動しないPCではやはり起動しませんでした。 考えられる問題2:  Workbook_Open()イベントの記載個所に関してはThisWorkbookに記載されていることをかくにんしました。
退会済みユーザー

退会済みユーザー

2017/07/31 12:24

http://officetanaka.net/excel/vba/file/file01.htm こちらにあるように、CreateObject("Excel.Application")を通さずに、(いわゆる)普通のやり方で開いてみてはいかがでしょうか? エクセルの中でVBAを動かしている中でファイルを開くのであれば、こちらの方が正攻法ですよね。こちらなら問題が起きない可能性があります(保証はありませんが...)
house1059

2017/08/01 13:48

提案ありがとうございます。確かにCreateObjectせずにVBAの中でworkbooks.openにより開いてみた場合問題なくworkbook_openイベントは発生いたしました。しかしながら、この場合だと親Excelのプロセスに引っ張られてしまいますのでCreateObjectで独立したExcelを立ち上げる仕様にしておりました。
退会済みユーザー

退会済みユーザー

2017/08/01 23:12

CreateObject以外で別プロセスで開く方法が見つかりました。 https://okwave.jp/qa/q7962768.html shellから開くと良いようです。こちらなら別プロセスで開いてしかもworkbook_openが働く可能性があります。一度検討ください。
house1059

2017/08/02 14:16

度々ありがとうございます。 shellを使って試してみましたが以下のような挙動になりました。 Excelのプロセスがない状態:  Excelは立ち上がりますが、workbook_open()は実行されない。 Excelのプロセスが既にある状態:  Excelの子プロセスとして立ち上がり、workbook_open()が実行される。 また、上記リンク先で別の方が回答されているworkbooks.openメソッドの後に実行されている visible = trueを付けたところworkbook_open()イベントが実行されました。。。 バックグラウンドで動作させたかったのでvisible = true → visible = falseの両方を記載して対応することにしました。ちょっと違う形ではありましたがCreateObjectとから独立したExcelを立ち上げ、WorkBooks.OpenからWorkbook_open()イベントを立ち上げる目的は達成することができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問