我只有一个简单的循环:
Dim o As OLEObject
For Each o In ActiveSheet.OLEObjects
If InStr(1, o.Name, "abc") Then
MsgBox o.Visible = False
End If
Next o
这应该显示我的ActiveX按钮的名称,但是没有显示。当我调试程序时,For Each循环不会一次启动。
我使用了Workbooks("MyWorkbook.xlsm").Sheets(1).OLEObjects.Visible = False
,它对我所有的按钮都适用。有谁知道为什么我的循环不起作用或如何设置名称包含“ abc”的按钮的Visible属性?
我尝试过:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B6:C20")) Is Nothing Or Not Application.Intersect(Target, Range("H6:H20")) Is Nothing Then
'Me.OLEObjects.Visible = False <-- This works fine
Dim o As OLEObject
For Each o In Me.OLEObjects
MsgBox o.Visible = False
Next
End If
End Sub
答案 0 :(得分:1)
替换行
For Each o In OLEObjects
使用
For Each o In Workbooks("MyWorkbook.xlsm").Sheets(1).OLEObjects
您可能应该放置不同于我在OLEObjects之前放置的东西,但是您将需要某种形式的图纸引用。
答案 1 :(得分:1)
OLEObject(单数)没有固有的关系,并且OLEObjects(复数)集合属于工作表,而不是工作簿(.parent.parent之外),当然也不属于Application对象。
如果您要尝试从该工作表的私有代码表访问该工作表上的按钮,
private sub meh()
Dim o As OLEObject
For Each o In ME.OLEObjects
If InStr(1, o.Name, "abc") Then
MsgBox o.Visible = False
End If
Next o
end sub
如果您试图访问另一个工作表中的OLEObjects或从公共模块代码表中访问OLEObject,则像以前一样,求助于完全合格的父级。
public sub meh2()
with Workbooks("MyWorkbook.xlsm").Sheets(1)
Dim o As OLEObject
For Each o In .OLEObjects '<~~ note .OLEObjects inside the With ... End With
If InStr(1, o.Name, "abc") Then
MsgBox o.Visible = False
End If
Next o
end with
end sub