vba - 使用复选框选中的值进行计算

标签 vba excel

如果 E 列中的文本显示"is",我有一个代码可以将信息从一张纸复制到另一张纸上。然后,它在每一行中添加一个复选框,直到最后一行在以下列中包含数据。

我需要以下方面的帮助:我想在另一张工作表中进行一些计算。如果选中该复选框,我想要计算选中该复选框的行数。获得此计数后,我想计算平均值(计数除以行总数),该总行数包括已检查和未检查的行数。

以下是复制信息并添加复选框的代码:

Sub Copysheet_And_CheckBox2() '<-- you run this
 CopySheet '<-- you call this first
 Dim i As Integer
Dim LastRow As Integer
Dim Search As String
Dim Column As Integer

  Sheets("Audit Items").Activate
   Sheets("Audit Items").Range("A1").Select
  'Sets an Autofilter to sort out only your Yes rows.
   Selection.AutoFilter
   'Change Field:=5 to the number of the column with your Y/N.
    Sheets("Audit Items").Range("$A$1:$G$2000").AutoFilter Field:=4,   Criteria1:="Yes"

'Finds the last row
LastRow = Sheets("Audit Items").Cells(Sheets("Audit Items").Rows.Count, "A").End(xlUp).Row

i = 1
'Change the 3 to the number of columns you got in Sheet2
 Do While i <= 3
  Search = Sheets("Form").Cells(1, i).Value
  Sheets("Audit Items").Activate
  'Update the Range to cover all your Columns in Sheet1.
  If IsError(Application.Match(Search, Sheets("Audit Items").Range("A1:G1"), 0))  Then
      'nothing
   Else
    Column = Application.Match(Search, Sheets("Audit Items").Range("A1:G1"), 0)
    Sheets("Audit Items").Cells(2, Column).Resize(LastRow, 1).Select
    Selection.Copy
    Sheets("Form").Activate
    Sheets("Form").Cells(2, i).Select
    ActiveSheet.Paste
    End If
    i = i + 1
    Loop

   CheckBox '<-- and this second into the same call
   Dim ToRow As Long
   Dim LastRow2 As Long
   Dim MyLeft As Double
   Dim MyTop As Double
   Dim MyHeight As Double
   Dim MyWidth As Double

    LastRow2 = Range("A65536").End(xlUp).Row
    For ToRow = 2 To LastRow2
    If Not IsEmpty(Cells(ToRow, "A")) Then
    Sheets("Form").Activate
        MyLeft = Cells(ToRow, "C").Left
        MyTop = Cells(ToRow, "C").Top
        MyHeight = Cells(ToRow, "C").Height
        MyWidth = MyHeight = Cells(ToRow, "C").Width
        '-
        ActiveSheet.CheckBoxes.Add(MyLeft, MyTop, MyWidth, MyHeight).Select
         With Selection
            .Caption = "Yes"
            .Value = xlOff
            .LinkedCell = "E" & ToRow
            .Display3DShading = False
            If CheckBoxes.Value = True Then
            CheckBoxes.Value = "1"

        End With
        End If
       Next

     End Sub

最佳答案

现在您正在添加控件(即定义它们的属性,例如 x 和 y 坐标,它们应该在屏幕上可见等,并将其添加到控件集合中),但是您没有创建任何事件处理程序(即“当单击控件时,执行此操作”,“如果控件被禁用,则执行此其他操作”等)

StackOverflow 上有一个如何添加事件处理程序的示例,网址为 Assign event handlers to controls on user form created dynamically in VBA

关于vba - 使用复选框选中的值进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30366016/

相关文章:

excel - VBA获取像素颜色

excel - 将参数从 Excel 工作簿中的单元格传递到 SQL 查询

excel vba 选择负范围

vba - Excel VBA - 按名称调用应用程序函数(左、右)

excel - 如何禁用特定工作簿的单元格拖放?

vba - 使用 2 列删除重复项

excel - 在电子表格中仅查找和保留重复项

vba - 如何获取Excel中某个范围的大小

excel - 根据其他单元格中存储的 RGB 值动态更改单元格的背景颜色

vba - 在 excel 中,只想对某些值求和(不像 SUMIF 那样简单)?