Excel 如何更改控件';在模块2中带有公共子项的userform上的s值

Excel 如何更改控件';在模块2中带有公共子项的userform上的s值,excel,vba,Excel,Vba,我正在尝试运行一个子系统,根据记录所在单元格的值更改一系列复选框的值。我在模块中将Sub作为public,因为它在userform本身的各种Sub中被多次使用。我的代码如下 Public Sub ExceptionBoxCheck(ControlNameList As Range, BrevCodeList As Range, RecordValueRow As Range, BrevCodeColumn As Integer, AvailCheckBoxes As Integer) D

我正在尝试运行一个子系统,根据记录所在单元格的值更改一系列复选框的值。我在模块中将Sub作为public,因为它在userform本身的各种Sub中被多次使用。我的代码如下

Public Sub ExceptionBoxCheck(ControlNameList As Range, BrevCodeList As Range, RecordValueRow As Range, BrevCodeColumn As Integer, AvailCheckBoxes As Integer)
    Dim ControlName As String, i As Integer, CodeCellContent As String
    Dim BrevCode As String

    For i = 0 To AvailCheckBoxes
        BrevCode = BrevCodeList.Offset(i, 0).Value
        CodeCellContent = RecordValueRow.Offset(0, BrevCodeColumn).Value
        ControlName = ControlNameList.Offset(i, 0).Value
        If InStr(CodeCellContent, BrevCode) <> 0 Then
            Me.Controls(ControlName).Value = True
        End If
    Next i
End Sub
公共子例外框检查(ControlNameList作为范围,BrevCodeList作为范围,RecordValueRow作为范围,BrevCodeColumn作为整数,AvailCheckBox作为整数)
Dim ControlName为字符串,i为整数,CodeCellContent为字符串
作为字符串的Dim BrevCode
对于i=0,可用复选框
BrevCode=BrevCodeList.Offset(i,0).Value
CodeCellContent=RecordValueRow.Offset(0,BrevCodeColumn).Value
ControlName=ControlNameList.Offset(i,0).Value
如果InStr(CodeCellContent,BrevCode)为0,则
Me.Controls(ControlName).Value=True
如果结束
接下来我
端接头

上面的子项应该遍历控件名称列表,并将它们与当前正在检查的控件名称进行比较,AvailCheckBox是要检查的框的总数。我遇到的问题是,我遇到了一个“不正确使用我”的运行时错误,我似乎找不到任何解决这个特定问题的方法。我能想到的唯一一件事是,在Module2中而不是在userform本身中使用此sub会导致问题。

Me
作为变量从表单的类模块中的调用过程传递到sub ExceptionBoxCheck。然后,您可以通过指定的变量名引用该表单上的所有控件。

的可能重复项。有关更多详细信息,请参阅文档
Me
用于类模块,因此在常规模块中使用它是不合适的。@BigBen那篇文章与此类似,但它讨论了在userform本身中创建一个模块,Excel不允许我这样做。不过,Microsoft文档页面的链接非常有用,Variatus给出的答案也同样有助于我保持sub的即插即用质量,多亏了你们两位。我不明白-你说的“Excel让你这么做”是什么意思?我不确定。我尝试将一个模块直接添加到userform中,它在modules目录中而不是在userform本身中创建它。或者我们对同一件事使用了不同的术语。没有什么能阻止您将其添加到userform代码中(在这里它根本不必是
Public