2016-05-04 63 views
0

我在此鏈接下發現之前已詢問此問題 Userform on excel worksheet dissappears when excel sheet has activeX controls! Why 我發現我在接受答案時犯錯了。我試圖在這裏再次重新提出這個問題。 我一直在一個項目中,我打算有一個工作表,其中包含一個用戶窗體和一些ActiveX控件。 activeX控件位於工作表上。我用下面的腳本重複了我正面臨的問題。子例程結束時,用戶窗體在屏幕上不可見。如果我註釋掉與OLEObject有關的行,那麼我可以在屏幕上看到用戶窗體是無模式的。問題是,這是行爲嗎?爲什麼用戶表單在工作表上有activeX時無法顯示?用戶窗體與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 

回答

3

添加一個ActiveX控件到工作表導致的VBAProject的復位時程序結束,這就是爲什麼你的形式被卸載。我建議你使用Form控件而不是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 
相關問題