我有一个MyForm1表单,其中包含一个具有该方法的模块。
Public Sub CreateSQL(ProductID as variant)
Me.Recordsource = " SELECT * FROM ProductOrders " _
" WHERE ProductID = " & Nz(ProductID ,0)
Me.Requery
End Sub
我将其用作名为MyMainForm的表单的子表单。
当我在MyMainForm上更改控件的值时,它成功执行以下行:
Me.Subform1.Form.CreateSQL ProductID:=Me.cboProductID
我的问题:
为什么在我输入Me.Subform1.Form.
后出现的智能感知列表中未列出成员?
有没有办法让它们上市?
是否有一个属性可以让我访问子窗体控件“源对象属性”(即Me.Subform1.form)中引用的窗体的“Form_MyForm1”类?
这就像我需要能够写:
Me.Subform1.Form_MyForm1.CreateSQL ProductID:=Me.cboProductID
这样的财产是否已经存在?如果是这样,我如何访问它?它在属性集合中吗?
PS:如果您需要更多信息,请参阅长堆栈溢出问题中发布的相同问题here
哈维
答案 0 :(得分:0)
但是看起来你可以通过使用表单及其子表单控件的主/子链接选项来省去很多麻烦。
答案 1 :(得分:0)
而是调用方法Me.Subform1.Form.CreateSQL
的mainform您应该在子窗体中创建一个指向主窗体的对象变量,并响应事件,例如:
Dim WithEvents cvMyParentForm As Form
Property Set MyParentForm(MyParentForm As Form)
Set cvMyParentForm = MyParentForm
End Property
Property Get MyParentForm() As Form
Set MyParentForm = cvMyParentForm
End Property
当主窗体打开时,使用Form_Open事件来"初始化"子表格
Private Sub Form_Open(Cancel As Integer)
If Me.Subform1.Form.MyParentForm Is Nothing Then
Set Me.Subform1.Form.MyParentForm = Me
End If
End Sub
然后你可以让子窗体响应主窗体引发的FORM事件。
如果您需要让子窗体响应您在主窗体中声明的任何事件,则需要使用上面的代码来使用Form_MyMainFormname类型
Dim WithEvents cvMyParentForm As Form_MyMainFormName
Property Set MyParentForm(MyParentForm As Form_MyMainFormName)
Set cvMyParentForm = MyParentForm
End Property
Property Get MyParentForm() As Form_MyMainFormName
Set MyParentForm = cvMyParentForm
End Property
Private Sub cvMyParentForm_Current()
'MsgBox "Sub form current event - does syncing"
Me.Form.Recordset.FindFirst "ID = " & Nz(cvMyParentForm.ID, 0)
If Me.Form.Recordset.NoMatch Then
MsgBox "Humph"
Else
End If
End Sub
Private Sub cvMyParentForm_MyEvent()
MsgBox "A user define event 'MyEvent' was fired on the main form"
End Sub