Excel VBA运行时错误'-2147319767(80028029)'
嘿,我所有的我的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!
我怀疑你是在设计时添加控件,但是一旦载入了你的窗体,你试图在运行时删除控件,这是不允许的。当您第一次看到错误并选择[结束]时,您将重置卸载UserForm的VBA环境。 (其他事情也会发生:所有全局变量都会丢失它们的值。)此时,用户窗体不再被加载,因此您可以删除控件。
如果这是您的情况,那么您需要确保在添加控件之前加载用户窗体。当你第一次做userform.Show时,发生两件事情:表单被加载,然后它变得可见。您可以在不使用.Load方法使其可见的情况下加载它。然后你可以添加你的控件。只要您不用.Unload方法(或重置VBA)卸载窗体,您的控件将会持续存在。 .Hide和.Show将更改窗体的可见性,但不会导致在运行时添加的控件被丢弃。另一方面,如果您真的想在设计时添加控件以便它们保持(并且在保存工作簿时保存),那么您需要使用.Unload在删除控件之前卸载窗体。
感谢您的回复。最后,这正是你提出的话题。我需要在每个“userform.Show”前添加一个“Load userform”。所以它现在工作:) – Exic 2014-12-14 18:16:52
也许是这个问题:http://dailydoseofexcel.com/archives/2014/12/11/recent-update-of-office-causes-problems-with-activex-controls/ – 2014-12-13 14:58:22
你可以改变控件的可见性吗? – Qbik 2014-12-13 21:53:36