如何在模块 2 中使用 Public Sub 更改用户窗体上的控件值

Posted

技术标签:

【中文标题】如何在模块 2 中使用 Public Sub 更改用户窗体上的控件值【英文标题】:How to change a control's value on a userform with a Public Sub in Module 2 【发布时间】:2019-01-11 02:06:05 【问题描述】:

我正在尝试运行一个 sub 来根据记录所在单元格的值更改一系列复选框的值。我在一个模块中将 Sub 作为 public,因为它在各种用户表单本身内的 subs。我的代码如下。

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

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

【问题讨论】:

Invalid use of Me keyword 的可能重复项。有关更多详细信息,请参阅Me keyword 文档。 Me 用于类模块,因此在常规模块中使用它是不合适的。 @BigBen 那篇文章很相似,但是它讨论的是在用户表单本身内创建一个 Excel 不允许我做的模块。不过,指向 Microsoft Docs 页面的链接非常有帮助,Variatus 给出的答案同样有助于我保持 sub 的即插即用质量,因此感谢你们俩。 我没听懂 - 你说的“Excel 让你这样做是什么意思?” 我不确定。我尝试将一个模块直接添加到用户窗体中,它在模块目录中而不是在用户窗体本身中创建它。要么这样,要么我们对同一件事使用不同的术语。 没有什么能阻止你将它添加到用户表单代码中(它根本不必是Public。) 【参考方案1】:

Me 作为变量从Form 的类模块中的调用过程传递给子ExceptionBoxCheck。然后,您可以通过分配的变量名称引用该表单上的所有控件。

【讨论】:

以上是关于如何在模块 2 中使用 Public Sub 更改用户窗体上的控件值的主要内容,如果未能解决你的问题,请参考以下文章

与对象更改通知相比,Google Club Pub/Sub 的可扩展性如何

作为模块化字段访问修饰符的 Dim、Global、Public 和 Private 有啥区别?

如何在 Laravel 中更改默认路径“/public”名称

如何在python3中正确导入同一目录下的模块

VBS脚本编程——过程与函数

Google Pub/Sub 如何在 Pull 上设置读取超时