【问题标题】:Using Variable on accessing the Form and Controls in MS Access使用变量访问 MS Access 中的窗体和控件
【发布时间】:2014-09-15 11:49:10
【问题描述】:

我有一个 MS Access 项目,我想包含一些数据格式。我已经知道如何进行格式化,但是有很多控件和表单,我很难重新输入我的代码并输入活动表单和控件的名称。

是否可以在Lost Focus事件上设置当前表单和活动控件?

我尝试使用此代码格式化SettAmount 文本框,它工作正常。

Dim varEnteredValue As Variant
varEnteredValue = Forms!dbfrmCrew.SubFrmCrew.Form.SettAmount.Value

If IsNumeric(varEnteredValue) = True Then
    Forms!dbfrmCrew.SubFrmCrew.Form.SettAmount.Format = "#,##0.00"
Else
    Forms!dbfrmCrew.SubFrmCrew.Form.SettAmount.Format = ">"
End If

我可以获得该函数的所有表单和控件的名称,但我无法将其传递给变量

Dim ctlname, frmname, subfrmname As String

Public Function FormatValue() As Integer

If TypeName(Screen.ActiveForm.ActiveControl) = "SubForm" Then

ctlname = Screen.ActiveForm.ActiveControl.Form.ActiveControl.Name
frmname = Screen.ActiveForm.Name
subfrmname = Screen.ActiveForm.ActiveControl.Name

Else

我试过这个使用变量来获取控件的值:

varEnteredValue = Forms!frmname.subfrmname.Form.ctlname.Value

但是有一个错误 MS Access 找不到表单'frmname'.......

希望有人能帮帮我,谢谢!

【问题讨论】:

    标签: forms variables ms-access controls


    【解决方案1】:

    是的。

    使用像Forms 集合这样的变量

    Dim nameOfForm as String
    Dim frm as Form
    nameOfForm = "MyFormName"
    Set frm = Forms(NameOfForm)
    

    Controls 集合

    Dim nameOfControl as String
    Dim ctrl as Control
    nameOfControl = "MyControlName"
    Set ctrl = frm.Controls(nameOfControl)
    

    您可以使用frm.Namectrl.Name 取回名称。

    请注意,对于特定的Form,您必须使用Controls,并且加载到Forms 中的唯一表单是主动加载的表单。这包括设计视图中的表单。这些在设计视图中打开的表单可能无法访问其所有属性。

    跟进您的编辑:

    您正在尝试将表单名称字符串用作表单对象本身。您需要调用Forms集合中的项目(按名称存储)

    varEnteredValue = Forms(frmname).Controls(subfrmname).Form.Controls(ctlname).Value
    

    在像这样的大长链中使用它们之前检查每个现有的会更安全。比如:

    Dim mainForm as Form
    Dim yourSubForm as Subform
    Dim yourControl as Control
    
    On Error Resume Next
    Set mainForm = Forms(frmname)
    If Err.Number <> 0 then
        Set yourSubForm = mainForm.Controls(subfrmname)
        If Err.Number <> 0 then
            Set yourControl = yourSubForm .Form.Controls(ctlname)
            If Err.Number <> 0 then
                Debug.Print yourControl.Value
            Else 
                MsgBox "Cannot find" & subfrmname
            End If
        Else 
            MsgBox "Cannot find" & subfrmname
        End If
    
    Else 
        MsgBox "Cannot find" & frmname
    End If
    

    【讨论】:

    • 我把 Form() 改成了 Forms()
    • 我还编辑了上述问题的最后一部分。我仍然不能正确地做到这一点。使用变量访问表单的控件是不可能的吗?谢谢!
    猜你喜欢
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    相关资源
    最近更新 更多