2016-02-05 55 views
0

我有一个未绑定的窗体,并具有未绑定的控件(Text0)。在Text0中输入RefNo。我想打开另一个窗体(frmDisclosure),它有一个包含RefNo的子窗体(frmRefNosList)。我打开frmDisclosure代码: 私人小组Command8_Click()尝试使用基于子窗体控件的DoCmd.OpenForm打开窗体

Dim Refce As Variant 

DoCmd.OpenForm "frmDisclosure" 
Forms!frmDisclosure.FilterOn = False 
Refce = "Forms!frmDisclosure!frmRefNosList.Form!RefNo" 
DoCmd.OpenForm "frmDisclosure", acNormal, "", Refce & " = " & Me.Text0, , acNormal 

End Sub 
+0

它没有任何意义。您打开frmDisclosure两次,第二次应用无意义的过滤器。 – Gustav

+0

它使得莫尔感觉可能是明显的。表单披露通常会打开一个筛选器,在我使用的其他代码中,该筛选器必须被删除。“打开两次”可用于其他代码。看来我的'Refce'有错。删除过滤器,我收到一条消息,指出frm Disclosure无法找到。 –

+0

控件的名称是相同的。 –

回答

0

这不是我想要的答案,但我创建了产生frmDisclosure对应Text0未绑定窗体上的ID号查询。然后,我使用DLookup从未绑定的表单中检索该ID号,然后以此方式打开frmDisclosure。在未绑定的表格中完成所有事情本来会更好。

+0

你想要的可能性更大,但你可能必须更清楚你想要做什么。到目前为止,我认为你已经说过你有Form1和Text0,并且你希望在Text0中放置一个refno,按下按钮(?)并打开Form2,它有一个子表单,该子表单应该包含一个refno你已经放入Text0(?)此外,参数'Refce = Me.Text0'是一个WHERE子句,与您打开的表单相关,因此'Refce'应该是frmDisclosure表单上的一个字段。是吗?这很令人困惑,因为你已经在你的VBA中定义了'Refce'作为变量[继续...] –

+1

[...] WHERE子句参数应该围绕对用双引号打开的表单中的字段的引用,然后连接其他任何不在该表单上的内容,例如:'“Refce =”&Me.Text0“(我假设这是一个数字字段;如果是文本则需要以不同的方式写入)。我也认为你在哪里指定'Refce = Forms!frmDisclosure.frmRefNosList!RefNo',它应该更像'Refce = Forms!frmDisclosure!frmRefNosList.Form!RefNo'(请参阅本指南:http://access.mvps。组织/门禁/表格/ frm0031.htm)。 –

+0

谢谢你马特·霍尔。我上面编辑了我的问题。我有Form1和Text0,并且我在Text0中输入了一个RefNo,按下一个按钮(Command8),并希望打开Form2,该Form2具有包含Ref0o的子表单,该列表包含我放入Text0中的RefNo。 'Refce = Me.Text0'是一个与我想要打开的表单相关的WHERE子句。 'Refce'等同于我的frmDisclosure表单中的字段(RefNo)。我现在得到的是Form2打开,但有一个窗口'输入参数值F01056106。弄清楚我希望输入参数值的'控制'。如果我插入该数据,Form2将以添加模式打开。 –

2

我们在聊天讨论后,我嘲笑式的东西,希望看起来像你试图做:

Link to Access file mock-up

为其他可能读这以后这里有一些澄清:

  • 形式Form1中有一个名为Text0它和一个按钮文本框。
  • 当按钮被按下时,它应该打开Form2,其上有一个 子窗体。然后
  • 窗体2应该打开到一定的记录,然后过滤 记录其子窗体显示在提供的所有应用价值Text0

这里是什么Form1中看起来我的实体模型像:

enter image description here

所以,当我提供了一个引用号,然后单击按钮...

enter image description here

...下面的代码(注释)是该按钮的点击事件中运行:

Private Sub cmdOpen_Click() 

    ' check user has provided a RefNo in the textbox... 
    If _ 
     Me.Text0 = "" Or _ 
     IsNull(Me.Text0) _ 
    Then 

     ' ...if a RefNo has not been provided, give an error message 
     MsgBox "Please provide a Ref No.", vbExclamation Or vbOKOnly, "Disclosure Search" 

    Else 

     ' ...if a RefNo has been provided, look in the table that lists an applicant's 
     ' forms and return the ApplicantID (or equivalent field you're using) for the RefNo provided 
     Dim varApplicantID As Variant 
     varApplicantID = DLookup("ApplicantID", "tblRefNos", "RefNo=" & Me.Text0) 

     ' ...check that an applicant record can be actually be found from the RefNo provided 
     If _ 
      IsNull(varApplicantID) _ 
     Then 

      '... if an applicant record is not found, give an error message 
      MsgBox "Could not find an applicant with the RefNo provided.", vbExclamation Or vbOKOnly, "Disclosure Search" 

     Else 

      '... if an applicant record is found, open Form2 to that applicant's record 
      DoCmd.OpenForm "Form2", , , "ApplicantID=" & varApplicantID 

      '... and then filter the subform on Form2 by the RefNo provided 
      Forms!Form2!frmApplicantForms_sub.Form.Filter = "RefNo=" & Me.Text0 
      Forms!Form2!frmApplicantForms_sub.Form.FilterOn = True 
      Forms!Form2!frmApplicantForms_sub.Form.Requery 

     End If 

    End If 

End Sub 

这将导致窗体2开放来源于正确的申请记录的引用号提供,并且还过滤由引用号提供窗体:

enter image description here

您的具体项目布局可能与我嘲笑的不同,所以有些可能需要针对您的设置进行调整,但希望我在此处演示的原则很容易翻译。

祝你好运!

+0

非常感谢。我会稍后看看它是如何工作的。 –

相关问题