2012-11-01 88 views
2

用这种方法挣扎一下,我有一个数据表格,其中列出了每条记录的ID和其他信息。到目前为止,我已经找到了一些VBA代码,它将打开每个ID作为超链接并将其传递给另一个表单。使用模态或弹出式窗口打开窗体

我是我想要的弹出窗口或模式窗口中打开窗体的问题,到目前为止我的代码是:

Private Sub ID_Click() 
    Dim varWhereClause As String 
    varWhereClause = "ID = " & Me!ID 
    DoCmd.OpenForm "Copy Of test", , , varWhereClause 
End Sub 

回答

5
DoCmd.OpenForm "Copy Of test", , , varWhereClause, ,acDialog 

虽然这将是弹出式和模式。

+0

实际上,使用acDialoog表示窗体是对话框,但不弹出。模态形式和对话形式之间有区别。而对话框形式和弹出窗体之间是有区别的(事实上,模型形式和弹出窗体也有很大不同!)。所以,一个模型形式是<>到对话框形式。弹出窗体是<>到模型窗体。他们每个人都有非常不同的行为和不同的使用案例。例如,弹出窗体可以显示在其他窗体的顶部,但不需要有焦点(因此弹出窗体通常用于向导窗体或帮助类型显示)。 –

+3

如果你打算发表一个长话来纠正别人说的话,至少是对的。我没有试图说明模式和弹出窗口是同义词,我只是表示使用acDialog作为弹出窗口和模态打开。 [AcWindowMode枚举](http://msdn.microsoft.com/en-us/library/office/ff195725.aspx) –

2

acDialog.PopUp的一个小缺点是窗体在访问主窗口之外打开为窗口。这就是为什么如果可能的话我更喜欢使用.Modal

如果您只想阻止其他开放表单,您甚至可以暂时在表单的公开活动中执行Me.Modal = True

.Modal的缺点是它不会等待。在表单关闭之前,DoCmd.OpenForm , , , , , acDialog不会返回。这种同步呼叫有时可能非常有用。

做一个acDialog/PopUp像呼叫保持您可以使用表格内的小动作接入主窗口:

Private bFormOpen As Boolean 

Public Sub ShowModal() 
    SetFocus ' Make the form visible 

    On Error GoTo ForcedClose 
    bFormOpen = True 
    Do While bFormOpen ' Wait until the form is closed 
     Sleep 50 
     DoEvents 
    Loop 

ForcedClose: 
    Exit Sub 
End Sub 

Private Sub Form_Unload(Cancel As Integer) 

    bFormOpen = False 

End Sub 

您可以用比实例化的形式是这样的:

Dim f As New Form_Name 

f.Modal = True 
Call f.ShowModal 

Set f = Nothing 
相关问题