【问题标题】:How to get the properties of the current active form from a class module?如何从类模块中获取当前活动表单的属性?
【发布时间】:2018-02-20 07:36:08
【问题描述】:

我目前有 2 个表单,其中包含 List Box 的记录和一些 Text Box 以允许用户输入。我有一个Command Button,它将数据输入插入到表中,然后我重新查询与表有界List Box,以获取更新的数据。

两种形式的功能代码是相同的,所以我想尽可能多地减少重复代码,我基本上是在尝试做类似这个问题的事情:

How to get instance of actual form from MS Access in a Module (VBA)

我创建了一个类模块来尝试从当前活动的表单中获取Text Box 中的数据输入,并将每个Text Box 的值存储在类的每个属性中,然后在我的表单的@987654328 中引用它@save 命令。

Option Explicit

Public number As String
Public name As String

Public Function getData()

    Dim frmCurrentForm As Form
    Dim frmName As String

    Set frmCurrentForm = Screen.ActiveForm
    frmName = frmCurrentForm.Name

End Function

我能够获取当前活动表单的名称,但不确定从哪里获取表单的Text Box 属性数据输入,例如,命名为textBox_NumbertextBox_Name

上述问题的答案表明要执行以下操作:

Public Sub mFormLoad(p_form As Form)
    'do stuff with p_form
end sub

但使用p_form 对象访问其属性,我只能找到Form 的通用属性,而不是与我的活动表单相关的特定属性,即textBox_NumbertextBox_Name

刚接触 VBA 编程,有人可以指导我吗?

谢谢!

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    使用Controls 集合:

    p_form.Controls("textbox_Number").Value 应该引用您的文本框的值。

    或者,您只能将特定形式作为参数:

    Public Sub mFormLoad(p_form As Form_MyFormName)
        'do stuff with p_form
    End Sub
    

    【讨论】:

    • 感谢您的第一个建议有效!...您能否详细说明替代方案?....您是说如果我的表单名为frmMyForm,那么它将是Public Sub mFormLoad(p_form As frmMyForm)
    • 不,如果您的表单名为 frmMyForm,那么它将是 Public Sub mFormLoad(p_form As Form_frmMyForm)。该方法指定您不采用具有通用 Form 接口(任何表单都具有)作为参数的表单,但该参数必须具有Form_frmMyForm 接口。这样你只能将一个特定的表单传递给子。
    • 很抱歉问这个问题,还在学习 vba,但是当我按照您对 Form_frmMyForm 的建议声明 sub 时,我无法访问它的任何属性,即 p_form. 什么也没给我。 .有什么我做错了吗?
    • 表单需要有一个模块。您可以尝试在模块顶部添加Option Explicit 以便轻松调试。
    猜你喜欢
    • 2011-07-02
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多