【问题标题】:VBA Compile Error on Function Call函数调用上的 VBA 编译错误
【发布时间】:2017-09-08 20:57:52
【问题描述】:

所以我试图在我调用的函数中运行这个 SQL 脚本,当我尝试运行它时它给了我一个“编译错误:需要对象”!

调用函数的代码

Private Sub cmdLogin_Click()

   Call Load_Username(Username)

End Sub

函数被调用

Private Sub Load_Username(Text As String)

    Dim SQL As String

    Set SQL = "UPDATE tbleUsername " & _
              "SET Username = '" & Text & "' " & _
              "WHERE ID = 1"

    DoCmd.RunSQL SQL

End Sub

【问题讨论】:

  • 文本是保留字。建议您为变量使用不同的名称,看看是否有帮助 - 例如 txtText。从技术上讲,您不是在调用函数,而是在调用 sub。我更喜欢CurrentDb.Execute 而不是DoCmd.RunSQL
  • @June7 Text 不是关键字,你在说什么?
  • 您的数据库中是否存在 tbleUsername?不应该是 tblUsername 吗?
  • 文本是保留字——它在 JET 中有特殊的含义。将保留字用于其他目的可能会导致意外结果。这里可能不是这种情况,但最佳做法是避免使用保留字来命名任何内容。 allenbrowne.com/AppIssueBadWord.html#T
  • 对不起,伙计们,我没有声明这些,因为我只是懒惰了......但这不是问题,因为我使用的是“Set”

标签: sql string vba ms-access


【解决方案1】:
Dim SQL As String
Set SQL = "string literal"

您不能使用Set 来分配字符串文字。使用Set 分配对象引用。该分配是非法的,因为需要一个对象。因此,需要对象

两个可能的修复:

  1. 删除Set 关键字并使用美妙的隐式赋值语法。
  2. Set 关键字替换为过时的 Let 关键字,以获得长期弃用的显式赋值语法。只是建议,因为我看到你也使用了早已弃用的 Call 关键字。

【讨论】:

  • 成功了!感谢您的帮助:) 另一个问题,它提示我“您确定要替换此字段吗?”有什么办法可以去掉这个提示,让它在没有确认信息的情况下运行?
  • 我非常了解我的 VBA,但我不在 Access 中工作。 Excel.Application 有一个 DisplayAlerts 属性,您可以将其设置为 False 以实现类似的功能。也许 Access 有类似的东西?
  • 该死,完全忽略了 Set on string 变量。 CurrentDb.Execute(SQL) 不会触发消息。否则,请使用DoCmd.SetWarnings False,然后使用DoCmd.SetWarnings True 重新打开。
  • @June7 完美运行!你们太棒了,谢谢你们所做的一切:)
  • 我很欣赏关于 Let 关键字的课程。在任何地方(作为一个年轻的程序员)在课堂之外都没有见过它,而且学习新事物总是很有趣!
【解决方案2】:

我认为你应该在call function LoadUsername(UserName)之前定义变量Username

【讨论】:

  • 不。这不会给出 OP 的编译错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 2022-10-06
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
相关资源
最近更新 更多