当 excel 工作表具有 activeX 控件时,Excel 工作表上的用户表单消失了!为什么



我是这个论坛的新手。 请耐心等待。
我一直在做一个项目,我计划在其中有一个包含用户窗体和一些 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

这段代码对我有用(假设"UserForm1"存在于同一个模块中)。这是对您的代码的非常粗略的重新创建,因为我从您的问题中不知道除了同时显示框和表单之外,您还想实现什么:

Sub Macro2()
Dim myOleObj As OLEObject
Dim myRng As Range
Dim ws As Worksheet
Set ws = ActiveSheet
Set myRng = ws.Range("C4")
myRng.RowHeight = 20
ws.OLEObjects.Add "Forms.CheckBox.1", _
    Left:=myRng.Left + 2, _
    Top:=myRng.Top + 2, _
    Width:=myRng.Width - 4, _
    Height:=myRng.Height - 1 _
Set myOleObj = ws.OLEObjects(1)
With myOleObj
    '.Object.Caption =
    .Name = "CheckBox" & CStr(ii)
End With
UserForm1.Show vmModeless
End Sub

最新更新