VBA Access

时间:2015-05-20 12:45:11

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

说明:

我有两种不同的形式。

  1. frmABC
  2. frmXYZ
  3. 我的焦点是 frmABC ,我运行的程序将会#14; Tick" frmXYZ 上的一个名为 ChkConfirmed 的复选框。

    问题:

    这两种引用其他表单的方式之间的差异是什么?

    1 即可。 Form_frmXYZ.ChkConfirmed = True

    2 即可。表格!frmXYZ.ChkConfirmed = True

    出于某种原因,只有#2 才能在此方案中使用。对我来说,这真是令人困惑,因为我一直使用#1 而且之前从未抱怨过(当我说抱怨时,我的意思是它完成了这项工作)。

    但是,当我在这里使用#1 并逐步执行代码时,它肯定会运行代码,但不会检查任何框...只是没有。

    所以,我很想知道技术上的差异,以帮助我了解何时使用每一个以及在什么情况下使用。

    编辑: 实际代码段(根据要求提供)

    #1版本

    enter image description here

    #2版本

    enter image description here

2 个答案:

答案 0 :(得分:4)

Access(我认为> = 97)将表单视为,这意味着您的表单现在是一个类模块,可以包含所有[类行为],包括实例化

Form_your_formname:您正通过Class模块引用Form。

Forms!your_form name:您正在通过表单名称引用表单。

要通过Forms!form_name访问表单,必须已加载表单。否则表单无法访问,您将收到错误消息 "the referenced ...... not found"

另一方面,Form_form_name可以作为课程随时访问。它可以像所有类一样有多个实例。通过类模块访问未打开的表单将导致表单被实例化。这意味着Access将创建该表单的新隐藏实例。

要测试此尝试以下内容。

  1. 创建一个名为:frm_test的新表单,其中包含一个名为:txt_id
  2. 的文本框
  3. 转到您的即时窗口并尝试使用以下代码:
  4. 编辑忘了提及。测试表格上附有一个vba模块,然后才变成一个类模块
  5. Form_frm_test.txt_id = 1 Form_frm_test.visible = true ?Form_frm_test.hwnd docmd.openform "frm_test" ?Forms!frm_test.hwnd

    现在你将看到frm_test表单的两个实例,每个实例都有自己的窗口句柄。

    回答您的问题:

    1. 但是,当我在这里使用#1并逐步执行代码时,它肯定会运行代码,但不会检查任何框...只是没有。

      因为您的表单正在实例化并且已隐藏。

    2. 所以,我很想知道技术差异,以帮助我了解何时使用每一个以及在什么情况下。

      上面给出的技术说明。 如果您的表单已经加载,您可以使用Form!form_name / form_name来访问它。如果您正在实例化,请使用类名。

答案 1 :(得分:-2)

说实话,我从来没有见过你的第一个例子,实际上......实际上,Access 2010中的快速测试失败了,需要一个" Object Required"错误信息。我曾经做过的所有代码都使用了感叹号,如果我想要的话,有人会纠正我的感叹号,在你需要引用其他形式的所有情况下工作。