MS Access Reference Form by string variable

时间:2016-08-21 16:02:49

标签: forms ms-access reference access-vba ms-access-2013

我有一个组合框从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或其他任何内容转换它。 我希望这是一个简单的语法问题,但是当我尝试了所有我知道的事情时,我必须尝试这个难以捉摸的答案!

1 个答案:

答案 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