私は、多くのExcelシート(手で変更するには多すぎます)とすべてのシートのほとんどのマクロを含むマクロxlmを持っています。私はすべてのシートをループし、それぞれのマクロを実行する機能を持っています。要求のために、私は中央マクロを介してイベントハンドラを追加する必要があります。私がVBAを理解して以来、イベントハンドラはシート自体のワークシートコードファイルにしか配置できないので、今私は次に何をするべきではありません。マクロによるイベントコード
このようなことをする方法があるといいですか?
私は、多くのExcelシート(手で変更するには多すぎます)とすべてのシートのほとんどのマクロを含むマクロxlmを持っています。私はすべてのシートをループし、それぞれのマクロを実行する機能を持っています。要求のために、私は中央マクロを介してイベントハンドラを追加する必要があります。私がVBAを理解して以来、イベントハンドラはシート自体のワークシートコードファイルにしか配置できないので、今私は次に何をするべきではありません。マクロによるイベントコード
このようなことをする方法があるといいですか?
イベントハンドラは、任意のクラスモジュールに入れることができます。
Private WithEvents xlApp As Excel.Application
は、その後、あなたが左のドロップダウン、右1のイベントで
xlApp
を持っています:
あなたのアドインはまた、これらのいずれかで、あなたが置くことができ、シートを持っています。あなたが望むものを選択してください。
xlApp
をある点(たとえば、ThisWorkbook.Application
)に設定することを忘れないでください。
Googleからのランダムな読書:Events And Event Procedures In VBA。
イベントは、すべてのシートに対して同じである場合は、その後、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
これはアプリケーション以外のイベントでも機能しますか?例:選択されたセルが変更された場合。 – TheJoeIaut
@TheJoeIautはいそうです。 +1 – brettdj
それは働いた!ありがとう! – TheJoeIaut