続 EXCELのマクロでBook1立ち上げ時に自動で別のBookを起動するには
QNo.3774822 「EXCELのマクロでBook1立ち上げ時に自動で別のBookを起動するには」(http://oshiete1.goo.ne.jp/qa3774822.html)でお世話になった者です。その節は多くの方にご回答いただき有難うございました。
前質問ではANo.6にて必要な回答が得られたため締め切り手続きを行ったのですが、この間にANo.7の回答をいただきました。この内容は私にとって大変興味深いもので早速試してみたのですが、私には高度な内容でうまく動作させられませんでした。既に締めていたため新たな質問もできず、こちらに質問させていただく次第です。
次のコードを正しく実行するための記述の仕方をアドバイスいただければ幸いです。
以下ANo.7のご回答者様の回答の抜粋です。
'=============================================
以下は、ほんのお遊びにしか過ぎませんが、こんなことが可能です。
なお、Book1... のような名称というのは、仮の名称であって、特に、それ自体が存在しているとはいえません。
Book1... のSheet1 のA1 に、hirakegoma と入ったときにだけ、別のファイルが開きますが、以下の「待ち時間」の4秒後を過ぎると、何も起こりません。4秒後に入れたものには何も起こりません。開いたと同時では、場合によってはマクロの検索は利かないはずです。
以下のマクロは、カプセル化もしておりませんし、本格的な内容ではありませんが、このようなことが可能です。また、別のソフトのインスタンス生成自体では、Excelのアプリケーションがどのような反応をするかは分かりません。
個人の場合は、"PERSONAL.XLS" ですが、他人に配布する場合は、アドインになると思います。
また、Excelが起動したときに、ブックの中身やブックの名称を全部調べるという方法も可能だと思います。
ループで、
For Each wb In Workbooks
If wb.Name Like "Book#*" Then
Workbooks.Open "Abc.xls"
End If
Next
'-------------------------------------
'Class1
'-------------------------------------
Public WithEvents App As Application
Private Sub App_NewWorkbook(ByVal Wb As Workbook)
'待ち時間
Const TIMELAG As Integer = 4
Set NewWb = Wb
Application.OnTime Now + TimeValue("00:00:" & CStr(TIMELAG)), "OpenSesame"
End Sub
'--------------------------------------
'標準モジュール
'--------------------------------------
Public myClass As New Class1
Public NewWb As Workbook
Public Sub OpenSesame()
'添付用のブック
Const MYBOOK As String = "Test1.xls"
With NewWb.Worksheets(1)
If StrComp(.Range("A1").Value, "HirakeGoma", 1) = 0 Then
If Dir(MYBOOK) <> "" Then
Workbooks.Open "Test1.xls"
Else
MsgBox MYBOOK & "のワークブックが見当たりません。", 48
End If
End If
End With
Set NewWb = Nothing
End Sub
'--------------------------------------
'ThisWorkbookモジュール
'--------------------------------------
Private Sub Workbook_Open()
Set myClass.App = Application
End Sub
'標準モジュールのAuto_Openの場合は、オートメーションでは、そこを通らない可能性があるから、ThisWorkbook モジュールに入れたほうがよいです。Auto_Open は、あくまで、Excelを単独に開いたときだけです。
お礼
ボタンに ThisWorkbook.Workbook_Open を登録したらうまくいきました。 いつもありがとうございます。