2012-01-20 17 views
1

私は、多くのExcelシート(手で変更するには多すぎます)とすべてのシートのほとんどのマクロを含むマクロxlmを持っています。私はすべてのシートをループし、それぞれのマクロを実行する機能を持っています。要求のために、私は中央マクロを介してイベントハンドラを追加する必要があります。私がVBAを理解して以来、イベントハンドラはシート自体のワークシートコードファイルにしか配置できないので、今私は次に何をするべきではありません。マクロによるイベントコード

このようなことをする方法があるといいですか?

答えて

3

イベントハンドラは、任意のクラスモジュールに入れることができます。

Private WithEvents xlApp As Excel.Application 

は、その後、あなたが左のドロップダウン、右1のイベントで xlAppを持っています:

あなたのアドインはまた、これらのいずれかで、あなたが置くことができ、シートを持っています。あなたが望むものを選択してください。

xlAppをある点(たとえば、ThisWorkbook.Application)に設定することを忘れないでください。

Googleからのランダムな読書:Events And Event Procedures In VBA

+0

これはアプリケーション以外のイベントでも機能しますか?例:選択されたセルが変更された場合。 – TheJoeIaut

+0

@TheJoeIautはいそうです。 +1 – brettdj

+0

それは働いた!ありがとう! – TheJoeIaut

1

イベントは、すべてのシートに対して同じである場合は、その後、GSergによって提案Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)アプローチを実行すると、最も意味

を作るあなたはまた、プログラムの各シートにコードを追加することができます - あなたは別の追加したい場合に有用であるかもしれませんシート名/インデックスに基づいて異なるシートにセルをトリガする。

先ほどの質問Excel Validation List Increase Font SizeからData Validationコードを追加するには、これを使用できます。コードは通常のコードモジュールをスキップし、ThisWorkbookモジュール

Sub DumpCode() 
    Const vbext_ct_document = 100 
    Dim vbProj As Object 
    Dim vbComp As Object 
    Dim strTxt As String 

    strTxt = "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" & vbNewLine _ 
      & "If Target.Address = ""$A$2"" Then" & vbNewLine _ 
      & "ActiveWindow.Zoom = 120" & vbNewLine _ 
      & "Else" & vbNewLine _ 
      & "ActiveWindow.Zoom = 100" & vbNewLine _ 
      & "End If" & vbNewLine _ 
      & "End Sub" 

    Set vbProj = ActiveWorkbook.VBProject 
    For Each vbComp In vbProj.vbcomponents 
     If vbComp.Type = vbext_ct_document Then 
      If vbComp.Name <> "ThisWorkbook" Then vbComp.CodeModule.InsertLines vbComp.CodeModule.CountOfLines + 1, strTxt 
     End If 
    Next 
End Sub 
関連する問題