在 VBA 中访问选择组合框列返回“函数未定义”-错误

Posted

技术标签:

【中文标题】在 VBA 中访问选择组合框列返回“函数未定义”-错误【英文标题】:Access selecting combobox column in VBA returns "function not defined"-error 【发布时间】:2018-02-19 13:38:49 【问题描述】:

当尝试在 VBA 中访问我的组合框的特定列值时,我会收到一个运行时错误,告诉我“函数未定义”。

我的调用结构中是否有任何错误或其他错误?

我之前完全清除了主题表,现在想从带有两个列的组合框中插入新数据:

 strAdd = "INSERT INTO TopicsTbl ( TopicName, CategoryID, CategoryName) " & _ 
"VALUES (Forms!frmAdd_Rename_Delete_Topic!txtTopicName, Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(0), Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(1));"

值调用在 vba 中的一行,所以请假设“line1”和_“line2”不是问题。 (这里显示不好)

提前致谢!

【问题讨论】:

请查看How do I format my code blocks?。是一两行吗? 感谢您的编辑,我不知道这一点。我将 INSERT INTO 和 VALUES 分隔在两个不同的行中,是的,但不是值(文本):) 【参考方案1】:

问题在于您引用列号的方式。您可以通过使用参数或字符串连接来解决此问题:

使用字符串连接:

strAdd = "INSERT INTO TopicsTbl ( TopicName, CategoryID, CategoryName) " & _ 
"VALUES (Forms!frmAdd_Rename_Delete_Topic!txtTopicName, " & Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(0) & ", """ & Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(1) & """);"

我假设第一个连接列是一个数字,第二个是数据库中的字符串。字符串连接是一种不好的做法,因为它会打开数据库以进行 SQL 注入,并且在存储包含字符串分隔符的值时会导致错误。

作为替代,使用参数(我使用隐式参数类型,有时需要显式类型):

strAdd = "INSERT INTO TopicsTbl ( TopicName, CategoryID, CategoryName) " & _ 
"VALUES (Forms!frmAdd_Rename_Delete_Topic!txtTopicName, ?, ?);"
Dim qd As DAO.QueryDef
Set qd = CurrentDb.CreateQueryDef("",strAdd)
qd.Parameters(0) = Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(0)
qd.Parameters(1) = Forms!frmAdd_Rename_Delete_Topic!txtCategoryName.column(1)
qd.Execute

【讨论】:

非常感谢!几天来我一直在努力解决这个问题,非常感谢您花时间帮助我!我使用了您的第一个解决方案,因为它是内部使用的数据库,不应该是安全问题

以上是关于在 VBA 中访问选择组合框列返回“函数未定义”-错误的主要内容,如果未能解决你的问题,请参考以下文章

通过在列表下拉组合框中选择它来访问 VBA 代码以转到另一个表单上的特定记录

从组合框中访问 VBA 随机值

Ms Access - 从组合框列更新图像

VBA的宏显示“子过程或函数未定义”

访问 VBA 基于组合框导航到记录

访问中的 VBA。组合框的问题