こんにちは。
> 別プログラムからOPEN
というのは、どんなプログラムでしょう?
仮に、
Excel VBA、から、Workbooks.Open メソッドで、
ということでお話ししますが、条件によっては、
VBAからでなくとも流用出来ます。
> 処理をWorkbook_Openに書きたいのですが
Workbook_Open イベントでなくても良ければ、
Workbook_Open イベントの代りに、
標準モジュールに、
Private Sub Auto_Open()
MsgBox "手動で起動したら警告メッセージ"
End Sub
とプロシージャを置いて、ここで処理すれば十分、
という場合もあるかと思います。
通常、ブックを開くと、まず、
Workbook_Open イベント が発生します。
もしも手動で開かれた場合は、この後に、
Private Sub Auto_Open() が呼び出されます。
手動であろうがなかろうが、共通の処理がある場合などでは、
以下のサンプルのようにしてみては如何でしょう。
従来、Workbook_Open イベント で処理していた内容を、
標準モジュールのPrivate Sub WbkOpenSeq()に書くようにして、
Application.OnTime メソッドを使って、実行プロシージャを呼ぶようにすれば、
Private Sub Workbook_Open()
Private Sub Auto_Open()
Private Sub WbkOpenSeq()
の順に実行されるようになります。
WbkOpenSeq実行時に、手動で開いたどうか判るように書いています。
flgAutoOpen と名付けたフラグは、
手動で開かれたなら、True、それ以外は、False、という意味です。
Private Sub Auto_Open() を通った=手動で開かれた場合だけ、
flgAutoOpen はTrueになります。
(以下の記述中、Workbook_Open、Auto_Open、の二つは規定の名前です。
それ以外のプロシージャ名、変数名、は、私が勝手に付けている名前です。)
' ' ========== ThisWorkbook モジュール ==========
Private Sub Workbook_Open()
Application.OnTime Now, "WbkOpenSeq"
End Sub
' ' =============================================
' ' =============== 標準モジュール ==============
Private flgAutoOpen As Boolean
Private Sub Auto_Open()
flgAutoOpen = True
End Sub
Private Sub WbkOpenSeq()
' ' 共通の処理があればココに。
If flgAutoOpen Then ' ' 手動
MsgBox "手動で起動したら警告メッセージ"
Else ' ' 手動じゃない
' ' 従来 Workbook_Open イベントで処理していた内容をココに。
End If
' ' 共通の処理があればココに。
End Sub
' ' =============================================
お礼
「Private Sub Auto_Open()」こういうのあったんですね。 初めて知りました。完璧です。これで対処できます。ありがとうございました!