2014-12-13 240 views
2

嘿,我所有的我的VBA代碼有一個相當奇怪的問題。我使用宏以編程方式添加/刪除用戶窗體控件。當我簡單地添加一個用戶表單控件,然後嘗試刪除它,一切工作正常。但只要我嘗試刪除剛剛創建和使用的userform控件(就像userform.Show一樣),我會收到標題錯誤。再次嘗試後,它的工作原理...所以第一個問題是,這到底是什麼?第二個問題是我該如何解決這個問題,或者我甚至需要解決這個問題?我可以通過某種錯誤處理來運行這個錯誤嗎?Excel VBA運行時錯誤'-2147319767(80028029)'

我不知道我的代碼部分有助於理解我的問題,但我相信代碼刪除用戶窗體控件可以幫助:

Public Function delete_userform_controls(strUserForm As String) 
    Dim VBProj As VBIDE.VBProject 
    Dim VBComp As VBIDE.VBComponent 
    Dim iCount As Integer 
    Dim cnt As Control 
    Dim iMaxColumns As Integer 
    Dim lCountOfLines As Long 

    Set VBProj = ActiveWorkbook.VBProject 
    Set VBComp = VBProj.VBComponents(strUserForm) 

    For Each cnt In VBComp.Designer.Controls 
     If TypeName(cnt) = "Label" Then iMaxColumns = iMaxColumns + 1 
    Next cnt 

    With VBComp.Designer 
     For iCount = 0 To iMaxColumns - 1 
      .Controls.Remove ("label_" & iCount & "") 
      .Controls.Remove ("textbox_" & iCount & "") 
     Next 
     .Controls.Remove ("ok_button") 
     .Controls.Remove ("cancel_button") 
    End With 

    With VBComp.CodeModule 
     .DeleteLines 1, .CountOfLines 
    End With 
End Function 

而只是另外,如果我不用戶的任何用戶我可以添加和刪除控件儘可能多,沒有錯誤... thx!

+1

也許是這個問題:http://dailydoseofexcel.com/archives/2014/12/11/recent-update-of-office-causes-problems-with-activex-controls/ – 2014-12-13 14:58:22

+0

你可以改變控件的可見性嗎? – Qbik 2014-12-13 21:53:36

回答

1

我懷疑你是在設計時添加控件,但是一旦載入了你的窗體,你試圖在運行時刪除控件,這是不允許的。當您第一次看到錯誤並選擇[結束]時,您將重置卸載UserForm的VBA環境。 (其他事情也會發生:所有全局變量都會丟失它們的值。)此時,用戶窗體不再被加載,因此您可以刪除控件。

如果這是您的情況,那麼您需要確保在添加控件之前加載用戶窗體。當你第一次做userform.Show時,發生兩件事情:表單被加載,然後它變得可見。您可以在不使用.Load方法使其可見的情況下加載它。然後你可以添加你的控件。只要您不用.Unload方法(或重置VBA)卸載窗體,您的控件將會持續存在。 .Hide和.Show將更改窗體的可見性,但不會導致在運行時添加的控件被丟棄。另一方面,如果您真的想在設計時添加控件以便它們保持(並且在保存工作簿時保存),那麼您需要使用.Unload在刪除控件之前卸載窗體。

+1

感謝您的回覆。最後,這正是你提出的話題。我需要在每個「userform.Show」前添加一個「Load userform」。所以它現在工作:) – Exic 2014-12-14 18:16:52