Vba 当excel工作表具有activeX控件时,将显示excel工作表上的Userform!为什么?

Vba 当excel工作表具有activeX控件时,将显示excel工作表上的Userform!为什么?,vba,excel,Vba,Excel,我是这个论坛的新手。请容忍我。 我一直在从事一个项目,其中我计划有一个包含用户表单和一些activeX控件的工作表。activeX控件位于工作表上。我用下面的脚本复制了我面临的问题。当子例程完成时,用户窗体在屏幕上不可见。如果我注释掉与OLEObject相关的行,那么我可以在屏幕上看到userform是无模式的。问题是,这种行为是预期的吗?当工作表上有activeX时,为什么userform不可见 Sub DemoFailure() Dim myOleObj As OLEObject Dim m

我是这个论坛的新手。请容忍我。
我一直在从事一个项目,其中我计划有一个包含用户表单和一些activeX控件的工作表。activeX控件位于工作表上。我用下面的脚本复制了我面临的问题。当子例程完成时,用户窗体在屏幕上不可见。如果我注释掉与OLEObject相关的行,那么我可以在屏幕上看到userform是无模式的。问题是,这种行为是预期的吗?当工作表上有activeX时,为什么userform不可见

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
这段代码适合我(假设“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

您好,Davy C,您的回复(假设“UserForm1”存在于同一模块中)是我问题的答案。Davy,我的接受似乎有缺陷。当我尝试您的建议时,我不确定是否在UserForm1.Show中使用了vbModeless。我在安装activeX的模块中初始化了UserForm的一个新对象。在长时间休息后,我重新访问了我的项目,发现vbModeless导致表单消失。我的意图是让一个带有一些控件的用户表单与工作表上的一些ActiveX控件交互。你能给我个建议吗?我还是死在水里。需要帮助。。。我不确定这根线是否变冷了。我该怎么做才能让这个问题回到主流,这样专家们才能给出他们的建议您好,Davy C,您的回复(假设“UserForm1”存在于同一模块中)是我问题的答案。Davy,我的接受似乎有缺陷。当我尝试您的建议时,我不确定是否在UserForm1.Show中使用了vbModeless。我在安装activeX的模块中初始化了UserForm的一个新对象。在长时间休息后,我重新访问了我的项目,发现vbModeless导致表单消失。我的意图是让一个带有一些控件的用户表单与工作表上的一些ActiveX控件交互。你能给我个建议吗?我还是死在水里。需要帮助。。。我不确定这根线是否变冷了。我该怎么做才能让这个问题回到主流,这样专家们才能给出他们的建议