2016-09-22 127 views
0

我有一個應該關閉其前身的訪問形式 -Access窗體不會關閉

If CurrentProject.AllForms("fmFileCheck").IsLoaded Then 
    DoCmd.Close acForm, "fmFileCheck", acSaveNo 
    Else 
    End If 

IF語句工作正常(我注入了一個消息框,以測試),但形式只是不關。沒有任何錯誤信息或任何東西,它只是坐在那裏和我一樣,像一隻松鼠嘲笑一隻貓。

編輯:

的形式在它的前身的「當前」事件和上面的代碼打開執行導通「電流」 - 但如果代碼開放所述第二形式是通過在一個按鈕時調用首先它工作正常 - 所以我猜這個問題是在那裏的某個地方?

+0

什麼是DoCmd.SetWarnings'的'設置?如果你不指定'acSaveNo',會發生什麼? (我發現從未設置,因爲它總是回來咬我) – Brad

+0

我選擇的設置沒有什麼不同,並且SetWarnings沒有被觸及。 –

+0

您正在關閉您打開的同一個表單嗎?或關閉一個不同的?你想做什麼?也許這可能會給我們一個線索! –

回答

0

一種可能性是您的表單實際上命名爲frmFileCheck而不是fmFileCheck?仔細檢查表單名稱上的拼寫。

您還可以調試程序以查看條件是否爲True且命令正在執行。

我認爲你不需要在close語句中嵌套close命令。只需執行該命令,並且如果它被加載,它將關閉它。我幾乎肯定你不會通過關閉未加載的表單來發生錯誤。

+0

不 - 我已經調試過(使用msgbox)並且if語句正常工作,這意味着窗體的名稱是正確命名的並且已加載。 –

0

當其中一個事件過程正在運行時,您無法關閉窗體。

其實你應該得到一個

運行時錯誤「2585」:此操作不能進行,而處理窗體或報表事件。

你的代碼中有On Error Resume Next嗎?這可能是危險的。


我通常的方式去耦合事件是使用定時器事件。

在你的第二個形式,在上面的代碼將運行,做到:

Me.TimerInterval = 1 

,然後(也第二種形式)

Private Sub Form_Timer() 

    Me.TimerInterval = 0 

    If CurrentProject.AllForms("fmFileCheck").IsLoaded Then 
     DoCmd.Close acForm, "fmFileCheck", acSaveNo 
    End If 

End Sub 
+0

你有試過嗎? @MattBowyer – Andre