【发布时间】:2020-07-12 15:52:48
【问题描述】:
我在 Microsoft access 2010 数据库中创建了以下导航结构:
您可以看到有两个选项卡,选项卡的数据填充了链接到 ClientID 的信息,该信息存储在表单顶部的不可编辑的文本框中。选择通信表单选项卡时,将显示已为特定 ClientID 完成的通信表单列表。并且有一个按钮可以创建一个新表单。我的问题是如何编写宏,以便单击“创建新表单”按钮将导致在表单列表当前占用的空间中加载一个空白的新表单?
以下是我目前所拥有的。它将用户发送到一个新表单,而不是在当前表单的“通信表单”选项卡下嵌入新表单。如何更改以下内容,以便在当前表单的“通信表单”选项卡下加载空白的新表单,以便所有导航控件保持可见/可用?
编辑:
为了解决 HK1 的以下假设,我在上面的屏幕截图中添加了我为创建表单所采取的步骤的以下描述:
1.) I created a blank form in design view.
2.) I added a listbox to list client fullname and id, and a textbox to filter the listbox.
3.) I added the clientid and fullname textboxes to the form, and set them to change based on
what the user selects from the listbox
4.) I dragged a navigation control onto the form next to the listbox
5.) I dragged a form called "ListOfForms" onto a new tab in the navigation control to create the tab
6.) I added the CreateNewForm command button to the ListOfForms form while embedded in the main form
这是 HK1 建议代码的结果:
虽然我很感激,但它并不能满足我的需要。您可以看到它只是在 ListOfForms 中的列表中添加了额外的一行。相反,我需要代码在 ListOfForms 当前所在的 MainForm 位置放置一个空白 MyForm。因此,在 CommunicationsForms 选项卡下,用户将看到的只是一个空白的 MyForm 对象,它与 ListOfForms 不同。
当我在Layout View中点击ListOfForms所在的地方时,我看到在Property Sheet中它被称为NavigationSubForm。因此,当用户单击 Create New Form 命令按钮时,NavigationSubForm 将在 MyForm 中替换 ListOfForms。但是如果用户再次点击 CommunicationForms 选项卡,ListOfForms 将再次被放置在 NavigationSubForm 中。
我尝试了以下方法:
Private Sub cmdCreateNewForm_Click()
Forms!MainForm!NavigationSubform = MyForm
End Sub
但它会生成运行时错误“438”:对象不支持此属性或方法。
接下来,我尝试了:
Private Sub cmdCreateNewForm_Click()
Forms!MainForm.NavigationSubform.SourceObject = MyForm
End Sub
这会导致 NavigationSubForm 变为空白,从而 ListOfForms 消失。这似乎我在正确的轨道上,但是我需要做些什么才能让它在 NavigationSubForm 中放置一个空白的 MyForm 而不仅仅是一个空白空间?
【问题讨论】:
-
必须是宏吗?您会考虑改用 VBA 吗?
-
用vba这应该比较容易吧?
-
是的,事实上,如果您只是将表单的 AllowAdditions 设置为 Yes/True,您甚至不需要这个。另外,我认为您错误地使用了“表单”一词。在大多数情况下,当您说表单时,实际上是指记录。
-
@HK1 谢谢。你能告诉我它的样子吗?我是新手。
-
@TheLaurens 谢谢。你能告诉我如何在VBA中做到这一点吗?我是 VBA 新手,但代码示例帮助我快速学习,因为我知道如何用其他语言编写代码。