以下是我正在尝试做的一些背景知识:我正在使用多页对象中的复选框创建用户表单来跟踪库存项目和价格。职员检查订单中的所有内容并使用提交按钮,这将采取一些措施。
为了使项目在每次库存项目更改时都不需要编码人员,在激活用户表单时,将从库存工作表上的单元格值动态生成复选框。职员只需调整库存表,表格会自动调整。
这是我动态创建所有复选框的代码(目前此表单最多可容纳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
我错过了图书馆参考吗?我无法弄清楚这一点。