通过复选框对象名称创建函数(“动态”)

通过复选框对象名称创建函数(“动态”)

我在一张表单中有多个复选框,另一张表单中有表单。选中复选框后,相应的内容将作为表单中的一列添加。

我有 500 多个复选框,所以我想创建一种简单的方法来执行此操作。例如,我有以下复选框:

  • 项目 ID
  • 项目名称
  • 项目类型
  • 项目状态

这些复选框的对象名称以 开头,CB_ 因此 Project_Type 复选框的对象名称是CB_Project_Type

现在,我为每个复选框创建了一个当它被点击时的函数。例如,函数名称是,Sub CB_Project_Type_Click() 然后该函数将检查该列是否存在并将其添加到表单中。

为所有复选框创建一个函数是愚蠢的。我想要一个动态方法。类似这样:如果已选中“ANY”复选框,则使用该复选框对象名称将具有匹配名称的列添加到表单表。

我现在正在使用这个:

Sub CB_Projects_Type_Click()
    CB_List "Projects_Type"
End Sub

Sub CB_List(Name As String)
    If ActiveSheet.Shapes("CB_" & Name).ControlFormat.Value = 1 Then
        For i = 0 To 99
            If IsEmpty(Sheets("English").Range("B1").Offset(0, i)) Then
                Sheets("English").Columns(i + 2).Copy
                Sheets("English").Columns(i + 3).Insert
                Sheets("English").Range("B1").Offset(0, i).Value = Name
                i = 99
            End If
        Next i
    Else
        For i = 0 To 99
            If Sheets("English").Range("B1").Offset(0, i).Value = Name Then
                Sheets("English").Columns(i + 2).Delete
                i = 99
            End If
        Next i
    End If
End Sub

所以您可以看到,至少我使用了一个函数从复选框中获取该列,但我仍然需要为每个复选框创建一个 Sub。我如何使用 1 个终极函数从对象名称中获取函数名称?

我希望我说清楚了。

答案1

循环检查复选框以找到已选中的复选框。

For Each c in ActiveSheet.CheckBoxes
    If c.Value Then CB_List(c.Name)
Next c

编辑:我重读了你的代码,发现你的问题比我最初想象的要复杂一些。为了添加你需要的数据并删除你不需要的数据,我认为你需要每次循环遍历所有复选框。你可以制作一个用户点击的按钮并执行如下操作:

Sub Button1_click()
    Dim c as Checkbox
    For Each c in ActiveSheet.CheckBoxes
        CB_List(c.Name)
    Next c
End Sub

或者你可能必须这样做:

Sub Button1_click()
    Dim c as OLEObject
    For Each c in ActiveSheet.OLEObjects
        CB_List(c.Name)
    Next c
End Sub

并修改此行:

ActiveSheet.Shapes("CB_" & Name).ControlFormat.Value = 1

更改为:

ActiveSheet.Shapes(Name).ControlFormat.Value = 1

相关内容