Vba 使用4个多选复选框为单元格赋值

Vba 使用4个多选复选框为单元格赋值,vba,excel,Vba,Excel,我希望通过使用4个多选复选框为单元格指定一个值,如果条件为真,则每个复选框的值为1。我想在链接单元格中总结它们的值,以便单元格值可以变化。例如: 所有复选框条件为真链接单元格中的值为4 其中一些是真的链接单元格中的值可以在1-3之间变化 如果链接单元格中的值为0,则所有值均为false If CheckBox1.Value = True Then Range("D2").Value = 1 If CheckBox1.Value = False Then Range("D2

我希望通过使用4个多选复选框为单元格指定一个值,如果条件为真,则每个复选框的值为1。我想在链接单元格中总结它们的值,以便单元格值可以变化。例如:

  • 所有复选框条件为真链接单元格中的值为4
  • 其中一些是真的链接单元格中的值可以在1-3之间变化
  • 如果链接单元格中的值为0,则所有值均为false

         If CheckBox1.Value = True Then Range("D2").Value = 1
    
    
         If CheckBox1.Value = False Then Range("D2").Value = 0 etc. 
    

  • 我希望通过使用vba宏来解决这个问题

    你可以这样做。基于链接单元格,如果为真,则获取1;如果为假,则获取零。然后对所有值求和

    对于VBA解决方案

        Private Sub CheckBox1_Click()
        Dim str As Integer
        str = 0
        If CheckBox1.Value = True Then str = str + 1
        If CheckBox2.Value = True Then str = str + 1
        If CheckBox3.Value = True Then str = str + 1
        If CheckBox4.Value = True Then str = str + 1
        Range("D2").Value = str
        End Sub
    

    只需在单击宏foreach复选框之前设置它

    Public count As Integer
    
    Public Sub btn_Click()
    Dim cbName As String
    
    If (count = Null) Then
        count = 0
    End If
    
    cbName = Application.Caller
    
    If (Sheets("Tabelle1").Shapes(cbName).ControlFormat.Value = xlOn And count < 4) Then
        count = count + 1
    ElseIf (count > 0) Then
        count = count - 1
    End If
        Range("A1").Value = count
    End Sub
    
    公共计数为整数
    公共子btn_单击()
    将名称设置为字符串
    如果(count=Null),则
    计数=0
    如果结束
    cbName=Application.Caller
    如果(表(“表1”).Shapes(cbName).ControlFormat.Value=xlOn且计数<4),则
    计数=计数+1
    ElseIf(计数>0)然后
    计数=计数-1
    如果结束
    范围(“A1”)。值=计数
    端接头
    


    这是我问题的答案:

    选项显式

       Sub CheckBox1_Click()
    
    
    Dim count As Integer
    If (count = Null) Then
    count = 0
    End If
    
    count = 0
    If ActiveSheet.Shapes("Check Box 1").ControlFormat = xlOn Then count = count + 1
    If ActiveSheet.Shapes("Check Box 2").ControlFormat = xlOn Then count = count + 1
    If ActiveSheet.Shapes("Check Box 3").ControlFormat = xlOn Then count = count + 1
    If ActiveSheet.Shapes("Check Box 4").ControlFormat = xlOn Then count = count + 1
    Range("A1").Value = count
    

    End Sub

    非常感谢,但我更愿意使用vba宏对其进行排序。正如你所想象的,这个问题不包括大局。嗨,玛蒂,谢谢,但我已经插入了你的代码,当我点击复选框时,D2单元格没有我想要的更改。你对此有什么见解吗?同样,当我运行代码时,会弹出一个窗口,说需要对象。有什么线索吗?你在使用ActiveX控件复选框吗?是的,我在使用它们我在类型不匹配方面有问题你在使用ActiveX复选框我想如果你不关心格式,那么使用FormControls复选框会更加困难你会建议什么呢?我再次选中,我在使用form control复选框,它会不断给出类型不匹配错误有什么线索吗?要么使用表单控件复选框,要么浏览一下Inzina的教程(所以上面有链接)