Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5825 / 13645 ツリー ←次へ | 前へ→

【48661】マクロブックのクラスモジュールのイベント kobasan 07/4/29(日) 13:58 質問[未読]
【48662】Re:マクロブックのクラスモジュールのイベ... kobasan 07/4/29(日) 14:19 発言[未読]
【48663】Re:マクロブックのクラスモジュールのイベ... ichinose 07/4/29(日) 14:24 発言[未読]
【48664】Re:マクロブックのクラスモジュールのイベ... kobasan 07/4/29(日) 16:06 お礼[未読]

【48661】マクロブックのクラスモジュールのイベン...
質問  kobasan  - 07/4/29(日) 13:58 -

引用なし
パスワード
   マクロブックのクラスモジュールで、WBook_SheetSelectionChangeのイベントは発生するのですが、Bookを開いたときのイベントWBook_Openが発生しないのですが、なぜでしょうか。

Excel2002

'標準モジュール
Private clsBook As Class1

Sub Open_WBook()
Dim FileName As Variant
  '
  FileName = ThisWorkbook.Path & "\test.xls"
  Workbooks.Open FileName
  Set clsBook = New Class1
  Set clsBook.WBook = ActiveWorkbook
End Sub

'クラスモジュールClass1
Public WithEvents WBook As Workbook

Private Sub WBook_Open()
  MsgBox WBook.Name & "  " & ActiveSheet.Name '<==ダメ
End Sub

Private Sub WBook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  MsgBox WBook.Name & "  " & ActiveSheet.Name '<==OK
End Sub

【48662】Re:マクロブックのクラスモジュールのイ...
発言  kobasan  - 07/4/29(日) 14:19 -

引用なし
パスワード
   >マクロブックのクラスモジュールで、WBook_SheetSelectionChangeのイベントは発生するのですが、Bookを開いたときのイベントWBook_Openが発生しないのですが、なぜでしょうか。
>
>Excel2002
>
>'標準モジュール
>Private clsBook As Class1
>
>Sub Open_WBook()
>Dim FileName As Variant
>  '
>  FileName = ThisWorkbook.Path & "\test.xls"
>  Workbooks.Open FileName
>  Set clsBook = New Class1
>  Set clsBook.WBook = ActiveWorkbook
>End Sub

投稿してから分かったことが一つ。
Bookを開いてからクラスにインスタンスを作っているから、イベントが発生しないのかな。

【48663】Re:マクロブックのクラスモジュールのイ...
発言  ichinose  - 07/4/29(日) 14:24 -

引用なし
パスワード
   ▼kobasan さん:
こんにちは。

>マクロブックのクラスモジュールで、WBook_SheetSelectionChangeのイベントは発生するのですが、Bookを開いたときのイベントWBook_Openが発生しないのですが、なぜでしょうか。

そりゃあね、test.xlsを開いた時にClass1のWBookプロパティにオブジェクトが
設定されていないもの・・、いや、Class1のインスタンスだって作成されていないよね?

ApplicationオブジェクトのWorkbookOpenイベントで拾う方が良いのではないですか?


>
>Excel2002
>
>'標準モジュール
>Private clsBook As Class1
>
>Sub Open_WBook()
>Dim FileName As Variant
>  '
>  FileName = ThisWorkbook.Path & "\test.xls"
>  Workbooks.Open FileName
>  Set clsBook = New Class1
>  Set clsBook.WBook = ActiveWorkbook
>End Sub
>
>'クラスモジュールClass1
>Public WithEvents WBook As Workbook
>
>Private Sub WBook_Open()
>  MsgBox WBook.Name & "  " & ActiveSheet.Name '<==ダメ
>End Sub
>
>Private Sub WBook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
>  MsgBox WBook.Name & "  " & ActiveSheet.Name '<==OK
>End Sub

【48664】Re:マクロブックのクラスモジュールのイ...
お礼  kobasan  - 07/4/29(日) 16:06 -

引用なし
パスワード
   ichinose さん こんにちは。

>そりゃあね、test.xlsを開いた時にClass1のWBookプロパティにオブジェクトが
>設定されていないもの・・、いや、Class1のインスタンスだって作成されていないよね?

やっぱり、ですよね。

 投稿するまでは、いろいろ試しても、思いつめて頭が固くなっていて、気づかないけど、投稿してしまうと、気が楽になるのか、気が変わるのか、ネックに気がついてしまう。

人間てこんなもんなんかな。


>ApplicationオブジェクトのWorkbookOpenイベントで拾う方が良いのではないですか?

WorkbookOpenをヘルプで検索して、解決させることができました。


ApplicationオブジェクトのWorkbookOpenイベントを新しく勉強することができて、質問して良かったです。有り難うございました。

ところで

Private Sub WBook_Open()

このイベントを使うタイミングは存在するのかな?

5825 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free