Forms 在MS Access中访问窗体和控件时使用变量

Forms 在MS Access中访问窗体和控件时使用变量,forms,variables,ms-access,controls,Forms,Variables,Ms Access,Controls,我有一个MS Access项目,我想包括一些数据格式。我已经知道如何进行格式化,但是由于有很多控件和窗体,我很难重新键入代码并输入活动窗体和控件的名称 是否可以在失焦事件上设置当前窗体和活动控件 我试着用这段代码格式化SettAmount文本框,效果很好 Dim varEnteredValue As Variant varEnteredValue = Forms!dbfrmCrew.SubFrmCrew.Form.SettAmount.Value If IsNumeric(varEntered

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

是否可以在失焦事件上设置当前窗体和活动控件

我试着用这段代码格式化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”

希望那里的任何人都能帮助我,谢谢

是的

使用表单集合之类的变量

Dim nameOfForm as String
Dim frm as Form
nameOfForm = "MyFormName"
Set frm = Forms(NameOfForm)
Dim nameOfControl as String
Dim ctrl as Control
nameOfControl = "MyControlName"
Set ctrl = frm.Controls(nameOfControl)
或控件集合

Dim nameOfForm as String
Dim frm as Form
nameOfForm = "MyFormName"
Set frm = Forms(NameOfForm)
Dim nameOfControl as String
Dim ctrl as Control
nameOfControl = "MyControlName"
Set ctrl = frm.Controls(nameOfControl)
您可以使用frm.name或ctrl.name取回名称

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

要继续编辑,请执行以下操作:

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

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

我把表格改成了表格。我还编辑了我上述问题的最后一部分。但我还是做不好。是否无法使用变量访问窗体的控件?thnks!