過去ログ

                                Page      55
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼イベント  素人 02/9/9(月) 12:04
   ┗クラスモジュールで・・・  ichinose 02/9/9(月) 12:24
      ┗Re:クラスモジュールで・・・  素人 02/9/9(月) 16:15
         ┗Re:クラスモジュールで・・・  ichinose 02/9/9(月) 17:14
            ┗訂正です  ichinose 02/9/9(月) 17:20
               ┗Re:訂正です  素人 02/9/10(火) 10:02
                  ┗Re:訂正です  ichinose 02/9/10(火) 11:11

 ───────────────────────────────────────
 ■題名 : イベント
 ■名前 : 素人
 ■日付 : 02/9/9(月) 12:04
 -------------------------------------------------------------------------
   特定のBookが開いたときに、イベントを発生させる方法はありますか?
但し、そのBookそのものに対してはイベントの記述はしません。
よろしくお願いします。
 ───────────────────────────────────────  ■題名 : クラスモジュールで・・・  ■名前 : ichinose  ■日付 : 02/9/9(月) 12:24  -------------------------------------------------------------------------
   ▼素人 さん:
>特定のBookが開いたときに、イベントを発生させる方法はありますか?
>但し、そのBookそのものに対してはイベントの記述はしません。
>よろしくお願いします。
こんにちは。コードを記述するブックにクラスモジュールを作成します。
以下はClass1という名前のクラスモジュールに記述してください。
'=====================================================
Public WithEvents app As Application
'
Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
  If Wb.Name = "aaa.xls" Then
   MsgBox "実行します"
   End If
End Sub
'======================================================
'標準モジュールに
'======================================================
Public opnevt As New Class1
'======================================================
Sub test()
Set opnevt.app = Application
End Sub

testを実行後、aaa.xlsを開いた場合、クラスモジュールに記述されているイベントプログラムが実行されるはずです。
 ───────────────────────────────────────  ■題名 : Re:クラスモジュールで・・・  ■名前 : 素人  ■日付 : 02/9/9(月) 16:15  -------------------------------------------------------------------------
   ichinose さん、こんにちわ。

早速試してみましたが、このイベントを発生させるためにはExcel起動のたびにtestを実行しなければならないのでしょうか?
ちなみに、私は”Personal.XLS”のCLASS1と同標準モジュールにtestを記述しました。
”特定のBook”である"aaa.xls"には何も記述していません。
よろしくお願いします。

>>特定のBookが開いたときに、イベントを発生させる方法はありますか?
>>但し、そのBookそのものに対してはイベントの記述はしません。
>>よろしくお願いします。
>こんにちは。コードを記述するブックにクラスモジュールを作成します。
>以下はClass1という名前のクラスモジュールに記述してください。
>'=====================================================
>Public WithEvents app As Application
>'
>Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
>  If Wb.Name = "aaa.xls" Then
>   MsgBox "実行します"
>   End If
>End Sub
>'======================================================
>'標準モジュールに
>'======================================================
>Public opnevt As New Class1
>'======================================================
>Sub test()
>Set opnevt.app = Application
>End Sub
>
>testを実行後、aaa.xlsを開いた場合、クラスモジュールに記述されているイベントプログラムが実行されるはずです。
 ───────────────────────────────────────  ■題名 : Re:クラスモジュールで・・・  ■名前 : ichinose  ■日付 : 02/9/9(月) 17:14  -------------------------------------------------------------------------
   素人 さん:
こんにちは。
>
>早速試してみましたが、このイベントを発生させるためにはExcel起動のたびにtestを実行しなければならないのでしょうか?
基本的には、そうです。
>ちなみに、私は”Personal.XLS”のCLASS1と同標準モジュールにtestを記述しました。
”Personal.XLS”のauto_open()プロシジャーに記述する方法ですね。
それでもいいかも・・・。

他に私が知っている限りではアドインとして、登録する方法もあります。
アドインとして登録するブックの標準モジュールに
'==================================================================
Public evt As Class1
'これだけです。本当は、他の場所に書きたいんですが、エラーになってしまいました

'==================================================================
'Workbookモジュールに
'==================================================================
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Set evt = Nothing
End Sub
'==================================================================
Private Sub Workbook_Open()
  Set evt = New Class1
End Sub

'==================================================================
'最後にClass1というクラスモジュールに・・・
'==================================================================
  Dim WithEvents app As Application
'==================================================================
Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
  If Wb.Name = "aaa.xls" Then
    MsgBox Wb.Name & "を実行します"
    End If
End Sub
'==================================================================
Private Sub Class_Initialize()
  Set app = Application
End Sub
'==================================================================
Private Sub Class_Terminate()
  Set app = Nothing
End Sub
'==================================================================

前回より、クラスをカプセル化してみましたが、基本的には同じです。
これを、"xxx.xla"で保存してみて下さい。
 ───────────────────────────────────────  ■題名 : 訂正です  ■名前 : ichinose  ■日付 : 02/9/9(月) 17:20  -------------------------------------------------------------------------
   ▼ichinose さん:
>素人 さん:
>こんにちは。
>>
>>早速試してみましたが、このイベントを発生させるためにはExcel起動のたびにtestを実行しなければならないのでしょうか?
>基本的には、そうです。
>>ちなみに、私は”Personal.XLS”のCLASS1と同標準モジュールにtestを記述しました。
>”Personal.XLS”のauto_open()プロシジャーに記述する方法ですね。
>それでもいいかも・・・。
>
>他に私が知っている限りではアドインとして、登録する方法もあります。
>アドインとして登録するブックの>'==================================================================
>'Workbookモジュールに
>'==================================================================
   dim evt as class1
>Private Sub Workbook_BeforeClose(Cancel As Boolean)
>  Set evt = Nothing
>End Sub
>'==================================================================
>Private Sub Workbook_Open()
>  Set evt = New Class1
>End Sub
>
>'==================================================================
>'最後にClass1というクラスモジュールに・・・
>'==================================================================
>  Dim WithEvents app As Application
>'==================================================================
>Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
>  If Wb.Name = "aaa.xls" Then
>    MsgBox Wb.Name & "を実行します"
>    End If
>End Sub
>'==================================================================
>Private Sub Class_Initialize()
>  Set app = Application
>End Sub
>'==================================================================
>Private Sub Class_Terminate()
>  Set app = Nothing
>End Sub
>'==================================================================
>
>前回より、クラスをカプセル化してみましたが、基本的には同じです。
>これを、"xxx.xla"で保存してみて下さい。
うっかりしました。
 ───────────────────────────────────────  ■題名 : Re:訂正です  ■名前 : 素人  ■日付 : 02/9/10(火) 10:02  -------------------------------------------------------------------------
   ichinose さん,おはようございます。

トライはしましたが、うまくいきません。

私が目的としているのは、Excelの起動のたびに何も気にしないである特定のブックが開かれたときにあるコードを実行したいのです。

これは不可能ですか?

よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:訂正です  ■名前 : ichinose  ■日付 : 02/9/10(火) 11:11  -------------------------------------------------------------------------
   素人 さん
おはようございます。
>トライはしましたが、うまくいきません。
全然、動作しないと言う事でしょうか?
私のほうでも確認しましたが・・・。
>私が目的としているのは、Excelの起動のたびに何も気にしないである特定のブックが開かれたときにあるコードを実行したいのです。

ということができています。
再度、手順です。

・新規ブックに [#319] のコードをそれぞれのクラスにコピーしてください。

・「名前を付けて保存」の「ファイルの種類」を「Microsoft Excelアドイン(*.xla)」を選択して下さい。選択すると、保存するフォルダも変わるはずです(保存先は、Addinになっているはずですが、)。

・仮にブック名を「evt」で保存してください。

・一度、Excelを終了し、再度、Excelを起動して下さい(念のため)。

・「ツール」---「アドイン」をクリックして下さい。アドイン一覧のダイアログが表示されます。

・一覧の中に保存した「evt」があるはずです。見つかったら、チェックを入れてOKボタンクリックです。

これで、設定完了です。
「aaa.xls」を開くたびにマクロが実行されていますし、これ以降、Excelを開くたびに何かをしなければならないことはないはずなんですが・・。
後、セキュリティは、「中」でOKでした。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 55