我有一个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' .......
希望有人可以帮助我,谢谢!
答案 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.Name
或ctrl.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