2014-12-02 75 views
2

我正在嘗試製作更新特定工作表的標準化過程。除了我給他們的功能之外,我不需要用戶控制。爲此,我鎖定了工作表,然後使用特定的宏加載表單。一種形式旨在從工作表中刪除數據。它可以像書面和測試一樣正常工作,但我試圖對其進行更新,以便在沒有任何相關數據的情況下打開它時,會彈出一個對話框,然後使用Unload Me關閉表單。這將關閉的形式,但然後練成引發一個錯誤:在初始化時關閉表單拋出錯誤

Run-time error '91': Object variable or With block variable not set

形式由僅具有一個線的模塊加載:

MyForm.Show 

這就是Excel是從引發錯誤。在初始化表單時,組合框將根據表單中的數據填充值。如果加載後組合框爲空,表單應該拋出對話框然後關閉。

If ComboBox.ListCount = 0 Then 
    MsgBox "No Data" 
    Unload Me 
End If 

如何在沒有從模塊拋出錯誤的情況下執行加載檢查?

+0

你只是嘗試過'Me.Hide'嗎?我認爲'Unload'方法失敗了,因爲有些引用禁止你從堆棧內存中移除它。 – 2014-12-02 22:33:32

回答

2

這實際上並不能回答你的問題。但是我建議在實際加載表單之前檢查模塊代碼。喜歡的東西:

Sub LoadForm() 
    If Sheets("Sheet1").Range("A1") = "" Then '<~~ your condition here 
     MsgBox "No Data" 
    Else 
     MyForm.Show 
    End If 
End Sub 
+0

這是一個足夠簡單的解決方法。謝謝。 – vrcaldwellv 2014-12-02 23:49:09

1

另一種方法是放置Unload Me Activate事件:

Private Sub UserForm_Activate() 
    ... 
    If ComboBox.ListCount = 0 Then 
     MsgBox "No Data" 
     Unload Me 
    End If 
End Sub 
1

當您嘗試和卸載用戶窗體中它的初始化事件的問題發生。由於該對象還沒有完成初始化,它不能被卸載。解決此問題的最佳方法是在嘗試初始化表單之前檢查條件,或者將檢查和隨後的卸載語句放入用戶窗體的激活事件中。只要表單從隱藏狀態變爲可見狀態,就會調用Activate,這會在表單完成初始化後發生。