VBA - 编写类以操作Userform上的所有复选框时出错

时间:2017-01-19 22:17:42

标签: excel vba excel-vba checkbox excel-2016

以下是我正在尝试做的一些背景知识:我正在使用多页对象中的复选框创建用户表单来跟踪库存项目和价格。职员检查订单中的所有内容并使用提交按钮,这将采取一些措施。

为了使项目在每次库存项目更改时都不需要编码人员,在激活用户表单时,将从库存工作表上的单元格值动态生成复选框。职员只需调整库存表,表格会自动调整。

这是我动态创建所有复选框的代码(目前此表单最多可容纳160个复选框),以防这影响我的问题(旁注,多页上的每个标签都有一个框架,所有复选框在框架内,因此我可以更改背景颜色,此示例中的框架标题为“frmreg”):

    Sub StoreFrmRegCheckboxGenerator()

    'Works with the store userform

    Dim curColumn   As Long
    Dim LastRow     As Long
    Dim i           As Long
    Dim chkBox      As msforms.CheckBox

    'This sub dynamically creates checkboxes on the Regular Items tab based 
    'on values in Column A of the Inventory sheet

    curColumn = 1 'Set your column index here
    LastRow = Worksheets("Inventory").Cells(Rows.Count, curColumn).End(xlUp).Row

    For i = 2 To 9
        If Worksheets("Inventory").Cells(i, curColumn).Value <> "" Then
            Set chkBox = store.frmreg.Controls.Add("Forms.CheckBox.1", "CheckBox_" & i)
            chkBox.Caption = Worksheets("Inventory").Cells(i,         curColumn).Value & " - $" & Worksheets("Inventory").Cells(i, curColumn).Offset(0, 1).Value
            chkBox.AutoSize = True
            chkBox.WordWrap = True
            chkBox.Left = 5
            chkBox.Top = 1 + ((i - 1) * 25)
        End If
    Next i

    'Cut some code out here identical to this previous section, but for the rest of the cells in column A up to Row 33, in blocks of 8

    End Sub

上面的代码位于Userform_Initialize子中,它完美无缺。

但是,由于复选框的数量不是静态的,并且可以多达160个,所以我试图在任何时候点击任何复选框时写一个子进行同一组操作。

我找到的最接近的解决方案来自这个问题:Excel Macro Userform - single code handling multiple checkboxes,来自sous2817。

以下是我正在尝试使用的代码:

在新的课程模块中:

    Option Explicit

    Public WithEvents aCheckBox As msforms.CheckBox

    Private Sub aCheckBox_Click()
         MsgBox aCheckBox.Name & " was clicked" & vbCrLf & vbCrLf & _
            "Its Checked State is currently " & aCheckBox.Value, vbInformation + vbOKOnly, _
            "Check Box # & State"
    End Sub

“存储”用户窗体位于选项显式:

下的顶部右侧
    Dim myCheckBoxes() As clsUFCheckBox

在Userform_Initialize子的底部,我调用动态创建所有复选框的所有子项:

Dim ctl As Object, pointer As Long
ReDim myCheckBoxes(1 To Me.Controls.Count)

For Each ctl In Me.Controls
    If TypeName(ctl) = "CheckBox" Then
        pointer = pointer + 1
        Set myCheckBoxes(pointer) = New clsUFCheckBox
        Set myCheckBoxes(pointer).aCheckBox = ctl
    End If
Next ctl

ReDim Preserve myCheckBoxes(1 To pointer)

当我尝试打开userform时出现此错误:

“编译错误:用户定义的类型未定义”

指向这一行:

Dim myCheckBoxes() As clsUFCheckBox

我错过了图书馆参考吗?我无法弄清楚这一点。

0 个答案:

没有答案