【问题标题】:Access VBA Form Private Sub calling Public Function in different Module访问 VBA 表单私有子调用不同模块中的公共函数
【发布时间】:2013-04-12 16:15:44
【问题描述】:

在我的数据库中,我在一个模块中有一个公共函数,它接收一个 SQL 字符串并返回一个打开的记录集。这个函数在被这个模块和其他模块中的其他公共子调用时工作得很好。

但是,如果我尝试使用完全相同的代码调用相同的函数,则会收到编译错误:“参数数量错误或属性分配无效。”

如果我将确切的代码作为公共子代码剪切并粘贴到不同的模块中,它可以正常工作。我怀疑这个问题与命名或隐藏变量有关。不幸的是,我无法通过搜索找到任何解决方案。

Public Function Query(SQL As String) As ADODB.Recordset
   Dim cnnConn As ADODB.Connection
   Dim rsRecord As New ADODB.Recordset
   Set cnnConn = CurrentProject.Connection
   rsRecord.ActiveConnection = cnnConn
   rsRecord.Open SQL
   Set Query = rsRecord
End Function

Private Sub Setup()
   Dim rs As New ADODB.Recordset
   Dim SQL As String
   SQL = "Select * FROM [Configuration]"
   Set rs = Query(SQL) <--- Compile Error
   rs.Close
End Sub

非常感谢任何帮助。

【问题讨论】:

  • 如果把函数从Query重命名为fnQuery,把它的返回值改成Set fnQuery = rsRecord,然后把Setup()改成Set rs = fnQuery(SQL)……这样行吗?跨度>
  • 我还没来得及试一试,办公室就停电了。我会在星期一测试一下。谢谢。
  • 就是这样。谢谢你。我以为我对命名很清楚,因为它是在另一个潜艇上工作的。希望这能教会我遵循正确的命名语法。

标签: windows ms-access vba ms-access-2010


【解决方案1】:

我的预感是使用Query 作为该自定义 VBA 函数的名称会导致问题。

将函数从Query重命名为fnQuery,并将其返回值更改为Set fnQuery = rsRecord。然后将Setup()过程中的赋值语句改为Set rs = fnQuery(SQL)

【讨论】:

    【解决方案2】:

    我发现使用 Debug > Compile 在 VBA 中发现了很多问题 - 它会突出显示很多错误:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-04
      • 2015-04-02
      • 2013-05-01
      • 2012-05-29
      • 2016-01-09
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多