字符串变量的 MS Access 参考表

Posted

技术标签:

【中文标题】字符串变量的 MS Access 参考表【英文标题】:MS Access Reference Form by string variable 【发布时间】:2016-08-21 16:02:49 【问题描述】:

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

【问题讨论】:

【参考方案1】:

这一行有2个问题:

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

【讨论】:

感谢您的回复!是的,我看到我犯了几个错字!!我发现徒手输入更容易,并且显然错过了一些大写问题和缺少字母(尤其是's')!从根本上说,这是我之前多次了解并阅读过的 Set 部分的 ORDER(在打开表单之前您无法设置任何内容!),但由于之前从未真正使用过它,我选择忽略一个基本点!问题已解决!想想我也花了几个小时研究它!一旦你知道;你知道的! 还有...谢谢!谢谢!

以上是关于字符串变量的 MS Access 参考表的主要内容,如果未能解决你的问题,请参考以下文章

MS Access:将查询结果转换为带分隔符的字符串

经典 ASP 和 ms-access:插入数据的问题

MS Access 在多个表的列字段中查找和替换文本

长文本(> 255 个字符)在 MS Access 2013 中导入和添加到现有表时被截断

如何在 Oracle 身份验证中使用 MS Access 连接字符串

将 MS Access 数据迁移到 MySQL:字符编码问题