Excel VBA运行时错误“-2147319767(80028029)”

嘿,我所有的我的VBA代码有一个相当奇怪的问题。 我使用macros以编程方式添加/删除用户窗体控件。 当我简单地添加一个用户表单控件,然后尝试删除它,一切工作正常。 但只要我尝试删除userform控件,我刚创build和使用(就像userform.Show)我收到标题错误。 再次尝试后,它的作品…所以第一个问题是,这到底是什么? 第二个问题是我该如何解决这个问题,或者我甚至需要解决这个问题? 我可以通过某种error handling来运行这个错误吗?

我不知道我的代码的哪一部分有助于理解我的问题,但我认为删除用户窗体控件的代码可以帮助:

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!

我怀疑你是在devise时添加控件,但一旦加载了用户窗体,你试图在运行时删除控件,这是不允许的。 当您第一次看到错误并select[结束]时,您将重置卸载UserForm的VBA环境。 (其他的事情也发生了:所有的全局variables都失去了它们的值。)在这一点上,用户窗体不再被加载,所以你可以删除控件。

如果这是你的情况,那么你需要确保在添加控件之前载入用户窗体。 当你第一次做userform.Show时,会发生两件事情:表单被加载,然后它变得可见。 您可以加载它,而不使用.Load方法使其可见。 然后你可以添加你的控件。 只要不使用.Unload方法(或重置VBA)卸载窗体,您的控件将保持不变。 .Hide和.Show将更改窗体的可见性,但不会导致在运行时添加的控件被丢弃。

另一方面,如果您真的想在devise时添加控件,以便它们保持(并且在保存工作簿时保存),则需要在删除控件之前使用.Unload卸载表单。