【问题标题】:Form in Access "Object not Defined" Error访问“对象未定义”错误中的表单
【发布时间】:2019-09-25 04:12:18
【问题描述】:

我在 Word 和 Project 中编写了用户表单没有问题,但在 MS Access 中加载 Form1 时遇到问题。它给了我这个错误:

对象变量或未设置块

当我使用DoCmd.OpenForm "Form1", acNormal, , , , acDialog 时,表单确实会启动。

我现在了解到Load Form1 在 MS Access 中不起作用。所以我必须使用DoCmd.OpenForm...

但我在访问表单中输入的数据时仍然遇到问题。

我的表单有两个输入字段:frm_Company and frm_Date,下面是代码。

Dim str_Company as String 'variable to capture result for form input
Dim date_Forecast as String 'variable to capture result of form input


DoCmd.OpenForm "Form1", acNormal, , , , acDialog

str_Company = Forms!Form1!frm_Company
date_Forecast = Forms!Form1!frm_Date

当代码执行时 Form1 启动,用户输入两个字段的数据并按下“关闭表单”按钮。当 VBA 尝试执行最后两行时,出现错误:

Microsoft 找不到引用的表单 Form1

感谢您的帮助。

【问题讨论】:

  • 如果您声明 Form1 As Form,然后在没有为该变量分配任何引用的情况下使用它,您 引用了一个无效的对象引用,这将始终引发错误 91。访问表单是文档模块,就像 Excel 中的工作表模块:它们属于 Access,而不是 VBA:它们与用户表单几乎没有共同之处,除了名称中的“表单”。
  • Me 指的是当前对象,你不能用它在表格之外来引用那个表格。
  • 为什么需要打开第二个表单?为什么你需要第二种形式的 2 个值?为什么不只是在第一个表单中输入数据?第二种形式是 UNBOUND 吗?
  • 我的第一个表单打开了一个 Excel 文件,我将使用该文件将数据加载到我的数据库中。在我加载数据之前,我需要用户在Form1 上输入公司名称和文件日期,这将连同从 Excel 电子表格中获得的数据一起加载到数据库的每条记录中。
  • 仍然没有解释为什么不能在第一个表单上输入这两个值。

标签: vba forms ms-access


【解决方案1】:

不必使用表单对象变量来打开表单。只需引用表单名称 - 就像成功的第三次尝试一样。然后如果调用表单需要引用它打开的表单,使用Forms集合。

Forms!Form1.controlname

Forms!Form1!fieldname

Me 限定符引用对象代码落后。

但是,acDialog 会暂停代码执行,直到调用的表单关闭。因此,当第一个表单代码恢复时,第二个表单已关闭且无法找到。第二种形式后面的代码应该首先引用以将值推回第一种形式。替代方法是设置全局变量或 TempVars,然后可以由任何过程引用。

【讨论】:

  • 执行DoCmd.OpenForm "Form1", acNormal, , , , acDialog 后我尝试使用Forms!Form1!fieldname 但收到错误消息Microsoft Access cannot find the form Form1。关于这个问题的任何提示?非常感谢您的快速回复。
  • 好的,Form1 是表单的实际名称并且表单打开了吗?您是否使用您的字段名称代替fieldname?编辑您的问题以显示修改后的代码。
  • 我已经按照@june7 的建议更新了代码。有什么建议吗?
  • 查看修改后的答案。
猜你喜欢
  • 2016-10-18
  • 2022-07-20
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多