我在Microsoft Access 2010数据库中创建了以下导航结构:
您可以看到有两个选项卡,选项卡的数据填充了链接到ClientID的信息,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的列表中添加了一行。相反,我需要代码将空白的MyForm放在ListOfForms当前所在的MainForm的位置。因此,在CommunicationsForms选项卡下,所有用户都会看到一个空白的MyForm对象,它与ListOfForms的形式不同。
当我在布局视图中单击ListOfForms所在的位置时,我看到它在属性表中被称为NavigationSubForm。因此,当用户单击“创建新表单”命令按钮时,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而不仅仅是一个空的空间?
答案 0 :(得分:2)
您标记为“表单列表”的表单似乎是所谓的连续表单,我猜它位于另一个表单上的子表单控件中。我也猜测你的“创建新表单”按钮可能位于连续表单的标题部分。我也假设您的连续表单/子表单绑定到可编辑的记录集/记录源,但我无法通过查看屏幕截图来判断它。
有了这些假设,“创建新表单”按钮的代码可能是这样的:
Private Sub cmdCreateNewForm_Click()
Me.AllowAdditions = True
DoCmd.GoToRecord, , acNewRec
End Sub
如果我上面的任何假设都不正确,那么此代码可能无法正常工作。
请注意,连续表单(和数据表表单)中的新记录始终显示在列表的底部。我不知道有任何简单的方法让它们出现在其他任何地方。