字符串变量的 MS Access 参考表格

MS Access Reference Form by string variable

我有一个组合框,它从 MySysObjects 获取行源并显示数据库中的完整表单列表。 使用 VBA 从组合框中选择表单名称并将其作为字符串传递给函数(因为不知道如何将该字符串转换为表单)。 所以,一旦表单的字符串值被传递给函数,我现在就有了表单的字符串变量,我想做一些事情...... 我通常会使用:

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 语句来 return 一个 Form 对象? 我可以在表单上转换该组合框值并将 Form 对象传递给函数,或者将组合框值转换为函数并使用 Set 或任何需要的方法进行转换。 我希望这是一个简单的语法问题,但由于我已经尝试了我所知道的一切,它一定是我没有尝试过的难以捉摸的答案!

这一行有两个问题:

Set frmForm = Form(strFormName)

首先,集合的名称是 Forms,而不是 Form。 其次是 Forms 是当前打开的表单集合。所以如果strFormName当时没有打开,Forms(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