与ActiveX控件一起放置在同一工作表上时,Userform不可见

我已经问这个问题之前find这个问题Excel工作表上的用户表消失当Excel工作表有ActiveX控件! 我为什么发现我接受答案的错误。 我试图在这里重新打开这个问题。 我一直在一个项目中,我打算有一个工作表,其中包含一个用户窗体和一些ActiveX控件。 activeX控件在工作表上。 我用下面的脚本重复了我正面临的问题。 当子程序完成时,用户窗体在屏幕上不可见。 如果我注释掉与OLEObject有关的行,我可以在屏幕上看到用户窗体是无模式的。 问题是,这是行为的预期? 为什么用户表单在工作表上有activeX时无法显示?

Sub DemoFailure() Dim myOleObj As OLEObject Dim myRng As Range Set myRng = ThisWorkbook.Sheets("Sheet1").Range("C4") ThisWorkbook.Sheets("Sheet1").Select ThisWorkbook.Sheets("Sheet1").Activate With ActiveSheet myRng.RowHeight = 20 Set myOleObj = .OLEObjects.Add(ClassType:="Forms.CheckBox.1", DisplayAsIcon:=False, Left:=myRng.Left + 2, Top:=myRng.Top + 2, Width:=myRng.Width - 4, Height:=myRng.Height - 4) With myOleObj '.Object.Caption = .Name = "CheckBox" & CStr(ii) End With End With UserForm1.Show vbModeless End Sub 

当一个ActiveX控件添加到工作表时,会导致在该例程结束时重置VBAproject,这就是为什么你的表单被卸载的原因。 我build议你使用表单控件而不是ActiveX,或者使用OnTime在重置后显示表单:

 Sub DemoFailure() Dim myOleObj As OLEObject Dim myRng As Range Set myRng = ThisWorkbook.Sheets("Sheet1").Range("C4") ThisWorkbook.Sheets("Sheet1").Select ThisWorkbook.Sheets("Sheet1").Activate With ActiveSheet myRng.RowHeight = 20 Set myOleObj = .OLEObjects.Add(ClassType:="Forms.CheckBox.1", DisplayAsIcon:=False, Left:=myRng.Left + 2, Top:=myRng.Top + 2, Width:=myRng.Width - 4, Height:=myRng.Height - 4) With myOleObj '.Object.Caption = .Name = "CheckBox" & CStr(ii) End With End With Application.OnTime Now(), "ShowIt" End Sub Sub ShowIt() UserForm1.Show vbModeless End Sub