应用程序的Visual Basic(Excel)如何获得所有检查复选框的总和



我创建了一些复选框,我在列表框中选择,如果我我该怎么办添加一个值来总结它们,我将其作为餐厅菜单创建,而我不这样做知道如何总结一下,也许有人可以帮助我。我是Applications Visual Basic的初学者,但我不知道如何做到这一点。也许我需要添加一个新列表框,其中将显示值,然后将它们求和它们

`Private Sub CheckBox1_Change()
If CheckBox1.Value = True Then
ListBox1.AddItem CheckBox1.Caption
CheckBox1.Enabled = False
End If
End Sub
Private Sub CheckBox10_Change()
If CheckBox10.Value = True Then
ListBox1.AddItem CheckBox10.Caption
CheckBox10.Enabled = False
End If
 End Sub
 Private Sub CheckBox11_Change()
  If CheckBox11.Value = True Then
  ListBox1.AddItem CheckBox11.Caption
    CheckBox11.Enabled = False
     End If
      End Sub
    Private Sub CheckBox12_Change()
     If CheckBox12.Value = True Then
       ListBox1.AddItem CheckBox12.Caption
       CheckBox12.Enabled = False
       End If
      End Sub
      Private Sub CheckBox2_Change()
     If CheckBox2.Value = True Then
    ListBox1.AddItem CheckBox2.Caption
    CheckBox2.Enabled = False
    End If
  End Sub
 Private Sub CheckBox3_Change()
 If CheckBox3.Value = True Then
 ListBox1.AddItem CheckBox3.Caption
 CheckBox3.Enabled = False
  End If
  End Sub
  Private Sub CheckBox4_Change()
 If CheckBox4.Value = True Then
 ListBox1.AddItem CheckBox4.Caption
 CheckBox4.Enabled = False
 End If
End Sub
 Private Sub CheckBox5_Change()
  If CheckBox5.Value = True Then
   ListBox1.AddItem CheckBox5.Caption
   CheckBox5.Enabled = False
 End If
 End Sub
  Private Sub CheckBox6_Change()
  If CheckBox6.Value = True Then
 ListBox1.AddItem CheckBox6.Caption
  CheckBox6.Enabled = False
 End If
  End Sub

 Private Sub CheckBox7_Change()
  If CheckBox7.Value = True Then
 ListBox1.AddItem CheckBox7.Caption
 CheckBox7.Enabled = False
  End If
 End Sub
 Private Sub CheckBox8_Change()
 If CheckBox8.Value = True Then
 ListBox1.AddItem CheckBox8.Caption
 CheckBox8.Enabled = False
  End If
  End Sub
 Private Sub CheckBox9_Change()
 If CheckBox9.Value = True Then
 ListBox1.AddItem CheckBox9.Caption
  CheckBox9.Enabled = False
   End If
  End Sub
  Private Sub CommandButton1_Click()
  CheckBox1.Enabled = True
  CheckBox2.Enabled = True
   CheckBox3.Enabled = True
   CheckBox4.Enabled = True
   CheckBox5.Enabled = True
   CheckBox6.Enabled = True
   CheckBox7.Enabled = True
   CheckBox8.Enabled = True
    CheckBox9.Enabled = True
   CheckBox10.Enabled = True
    CheckBox11.Enabled = True
     CheckBox12.Enabled = True
      ListBox1.Clear
       End Sub
     Private Sub CommandButton2_Click()
     MsgBox ("Ordered Successfully!")
      End Sub
      Private Sub Label1_Click()
       End Sub
      Private Sub Label2_Click()
     End Sub
     Private Sub Label3_Click()
    End Sub
    Private Sub Label4_Click()
    End Sub
    Private Sub ListBox1_Click()
    End Sub
    Private Sub UserForm_Click()
    End Sub`

我认为复选框标题具有数字值作为标题。尝试此代码

Private Sub CommandButton2_Click()
Dim ctl         As Control
Dim tot         As Double
For Each ctl In Me.Controls
    If TypeName(ctl) = "CheckBox" Then
        If ctl.Value = True And IsNumeric(ctl.Caption) Then
            tot = tot + Val(ctl.Caption)
        End If
    End If
Next ctl
MsgBox "Total = " & tot & Chr(10) & "Ordered Successfully"
End Sub

如果我正确理解您,则需要在每个复选框事件中声明模块级别的私有变量l_Chx As Byte并将其增加/减少1,以获取当前检查框的数量。。

我想你想总结标签字幕

假设Label1标题在检查CheckBox1(Label2CheckBox2等相同(后要求和,则您可能需要:

  • 在您的用户形式代码窗格的最顶部添加

    Dim total As Double
    
  • 用户形式代码窗格中的任何地方:

    Private Sub CBChange(cb As MSForms.CheckBox)
        With cb
            If .Value Then
                Me.ListBox1.AddItem .Caption
                .Enabled = False
                total = total + Val(Me.Controls("label" & Replace(.Caption, "CheckBox", "")))
            End If
        End With
    End Sub
    
  • 更改所有复选框Change事件处理程序如下:

    Private Sub CheckBox1_Change()
         CBChange Me.ActiveControl
    End Sub
    Private Sub CheckBox2_Change()
         CBChange Me.ActiveControl
    End Sub
    ... and so on..
    

顺便说一句,您可能需要更改CommandButton1_Click事件处理程序如下:

Private Sub CommandButton1_Click()
    Dim iCB As Long
    With Me
        For iCB = 1 To 12
            .Controls("CheckBox" & iCB).Enabled = True
        Next
        .ListBox1.Clear
    End With
End Sub

因为您将项目添加到ListBox,因此可以简单地使用ListBox1.ListCount返回项目数。

(编辑:以下是基于用户通常期望的事情的一般注释。但是,OP代码包括在检查时禁用复选框,因此用户无法取消选中项目。(

您的代码中缺少的是某人取消选中项目(CheckBoxX_Change中的CheckBoxX.Value = False( - 然后您必须从ListBox中删除项目。互联网上将有很多示例"从列表框中删除项目"。

最新更新