我有一个组合框从MySysObjects
获取行数,并在数据库中显示完整的表单列表。
从组合框中选择一个表单名称,并使用VBA将其作为字符串传递给函数(因为不知道如何将该字符串转换为Form)。
所以,一旦表单的字符串值传递给函数,我现在有了我希望做的东西的形式的字符串变量...
我通常会使用:
Function MyFunction()
Dim frmForm as Form
Set frmForm = form("MyForm")
DoCmd.OpenForm frmForm.Name, acDesign, , , , acHidden
With frmForm
Do stuff...
End With
End Function
但是!因为我已经将一个字符串变量传递给函数 - 例如:
Function MyFunction(strFormName as String)
Dim frmForm as Form
Set frmForm = Form(strFormName) 'THIS DOESN'T WORK
DoCmd.OpenForm frmForm.Name, acDesign, , , , acHidden
With frmForm
Do stuff...
End With
End Function
我的问题是如何使用Set
语句返回Form
个对象?
我可以在表单上转换组合框值并将Form
对象传递给函数或将组合框值转换为函数并使用Set
或其他任何内容转换它。
我希望这是一个简单的语法问题,但是当我尝试了所有我知道的事情时,我必须尝试这个难以捉摸的答案!
答案 0 :(得分:1)
这一行有两个问题:
Set frmForm = Form(strFormName)
首先,集合的名称为Forms
,而不是Form
。
第二,Forms
是目前开放的表格集合。因此,Forms(strFormName)
如果strFormName
当时未打开则会引发错误。
如果你只是DoCmd.OpenForm strFormName, acDesign, , , , acHidden
,表单将在设计视图中打开并隐藏,无论它是否已经打开。然后你可以执行Set frmForm
而不会触发错误。
Function MyFunction(strFormName As String)
Dim frmForm As Form
DoCmd.OpenForm strFormName, acDesign, , , , acHidden
Set frmForm = Forms(strFormName)
With frmForm
'Do stuff...
End With
End Function