使用变量访问MS Access中的表单和控件

时间:2014-07-24 04:10:05

标签: forms variables ms-access controls

我有一个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' .......

希望有人可以帮助我,谢谢!

1 个答案:

答案 0 :(得分:0)

是。

使用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来取回姓名。

请注意,您必须针对特定Controls使用Form,并且加载到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