首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工作表更改为运行宏

工作表更改为运行宏
EN

Stack Overflow用户
提问于 2017-03-29 03:41:54
回答 1查看 807关注 0票数 1

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

每次单元格信息!b8更改时,我都需要调用一个宏。换句话说,每次单击复选框时,链接的单元格都会更改,单元格信息!b8会上升或下降,我需要一个宏来运行。

这是我正在使用的代码,但它什么也不做。我对此进行了研究,从我所能看出的情况来看,它应该是可行的??

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$8" Then
        Call CreateFinalWorksheet
    End If
End Sub
EN

回答 1

Stack Overflow用户

发布于 2017-03-29 04:52:02

假设您的所有CheckBoxes都是表单控件,只要稍加修改CheckBox创建,您就可以实现您想要的东西,而无需LinkedCell和CountIfs等。

示例:下面的CreateCheckBoxes()将为范围内的每个单元格创建一个复选框(“d1:d5”),将其命名为前缀和单元格地址,单击时分配子CheckBoxClicked

Sub CheckBoxClicked()中,它将遍历所有工作表(除了命名为"Info"),如果名为then D3的复选框的值为1(勾选),则增加一个计数器。在此之后,如果达到阈值,则调用Sub CreateFinalWorksheet()

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43083875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档