工作表更改以运行macros

我的工作簿包含多个工作表,每个工作表都有多个checkbox。 所有工作表中的所有checkbox都有第80行中的链接单元格。在名为“Info”的工作表中,我使用countif来计算所有工作表的行80中文本“TRUE”发生的总次数。 总数在Info!B8。

每次单元格Info!b8改变时,我都需要调用一个macros。 换句话说, 每次单击checkbox时,链接的单元格都会更改,单元格Info!b8会上下移动,并且需要运行一个macros。

这是我正在使用的代码,但它什么都不做。 我研究了这个,从我能告诉它应该工作?

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$8" Then Call CreateFinalWorksheet End If End Sub 

假设你所有的CheckBox都是Form控件,稍微改变了CheckBox的创build,你可以实现你想要的,而不需要LinkedCellCountIfs等。

例如:下面的CreateCheckBoxes()将为Range(“D1:D5”)中的每个单元格创build一个checkbox,用一个前缀和单元格地址命名,单击时指定Sub CheckBoxClicked

Sub CheckBoxClicked() ,它将遍历所有工作表(除名为“Info”之外),然后如果名为ending D3的checkbox的值为1(勾号),则递增计数器。 之后,如果达到阈值,则调用Sub CreateFinalWorksheet()

 Option Explicit Private Const ChkBoxPrefix As String = "cbx_" Private Const ThresholdToCreateFinalWorksheet As Long = 3 Sub CreateChkBoxes() Dim myCBX As CheckBox, c As Range For Each c In Range("D1:D5") 'rngCB With c Set myCBX = ActiveSheet.CheckBoxes.Add(Top:=.Top, Width:=.Width, Height:=.Height, Left:=.Left) End With With myCBX .Name = ChkBoxPrefix & c.Address(0, 0) .Caption = "Check Box " & c.Address(0, 0) 'strCap .OnAction = "CheckBoxClicked" ' "CheckBox_Click" End With Next c End Sub Sub CheckBoxClicked() ' CheckBox_Click() Dim oWS As Worksheet, lChecked As Long On Error Resume Next ' Just in case the named CheckBox does not exist lChecked = 0 For Each oWS In ThisWorkbook.Worksheets If oWS.Name <> "Info" Then ' If you need to keep track of more than 1 checkbox in each worksheet, go through them ' If you need all of them to be checked before CreateFinalWorksheet, exit when a checkbox.value = 0 With oWS.CheckBoxes(ChkBoxPrefix & "D3") ' <-- Change to what you need to keep track of lChecked = lChecked + IIf(.Value = 1, 1, 0) End With End If Next On Error GoTo 0 If lChecked >= ThresholdToCreateFinalWorksheet Then CreateFinalWorksheet End Sub Private Sub CreateFinalWorksheet() Debug.Print "CreateFinalWorksheet()" End Sub 

或者,将事件Sub Worksheet_Calculate()放入Info模块,然后检查Info!B8是否足够大,可以调用CreateFinalWorksheet。