【问题标题】:How to call Form_Load of one form from another form in Access VBA如何在 Access VBA 中从另一个窗体调用一个窗体的 Form_Load
【发布时间】:2015-06-04 12:08:55
【问题描述】:

我有一个 MS Access 表单,它在 grid 中显示记录列表。每行都有一个detail按钮。

点击它时,它打开一个新表单,其中包含该特定选定行的详细信息。

当点击详细表单的关闭按钮时,值被保存到数据库中。

现在,点击关闭,我想执行主表单的表单加载。这是因为我需要在详细更新后刷新一些值

我尝试过这样的事情:

Call Forms!frm_Package!Form_Load

请就如何实现这一点提出建议。我尝试了各种方法,但都无法奏效。

如果需要任何进一步的信息,请告诉我。

【问题讨论】:

    标签: forms vba ms-access events


    【解决方案1】:

    您无法“re-call”加载的原因是因为它是一个Private Sub,并且只有当您在表单中时才能访问该方法。

    破解“external procedure call”的一种方法是将 Form Load 中的代码移动到 Public Sub(使用相同的 Form)中,然后调用新的从表单外部创建 Sub。喜欢,

    Private Sub Form_Load()
        MsgBox "Hello World"
    End Sub
    

    Private Sub Form_Load()
        newPubMethod
    End Sub
    
    Public Sub newPubMethod()
        MsgBox "Hello World"
    End Sub
    

    现在,您甚至可以使用正确的量词从表单外部调用此 Public Sub newPubMethod。

    Private Sub exitButtonName_Click()
        Forms("CallingFormName").newPubMethod
    End Sub
    

    【讨论】:

    • 非常适合我。谢谢..接受你的回答
    【解决方案2】:

    我使用这段代码来做这种事情。当我打开一个弹出式表单时,我隐藏了主表单……我完成了我的工作,然后我返回到了主表单。

    Private Sub Form_Open(Cancel As Integer)
    If gIsLoaded("mainForm") Then Form_mainForm.Visible = False
    End Sub
    
    Private Sub Form_Close()
    ' -- here you will put the code you need!!!
    If gIsLoaded("mainForm") Then Form_mainForm.Visible = True
    End Sub
    
    Function gIsLoaded(strName As String, Optional _
                                          lngtype As AcObjectType = acForm) As Boolean
        gIsLoaded = (SysCmd(acSysCmdGetObjectState, _
                            lngtype, strName) <> 0)
    
    End Function  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多