如何检查Excel工作表是否包含activeX控件?

时间:2015-11-16 11:12:04

标签: excel vba excel-vba

我尝试创建一个放在Workbook_Open()过程中的宏,它为工作簿中的每个 工作表添加组合框的项目,名为CBTask(具有组合框)盒中名为CBTask的盒子)。 不幸的是,代码生成了编译错误:找不到方法或数据成员"

我相信这是因为不是每个表都有CBTask(即使错误恢复下一步也无济于事)。 有没有办法检查工作表是否包含组合框,所以我可以在尝试清除它或添加新项目之前进行检查?

Private Sub Workbook_Open()
Dim ws As Worksheet
Dim i As Integer
Dim strTaskName As String

On Error Resume Next
For Each ws In ThisWorkbook.Worksheets
    ws.CBTask.Clear
    strTaskName = taskName(1)
    Do
        ws.CBTask.AddItem strTaskName
        strTaskName = taskName(i)
        i = i + 1
    Loop While taskName <> "LastOne"
Next ws
On Error GoTo 0
End Sub

(如您所见,此代码还使用附加函数&#34; taskName(intSubtaskValue作为整数)&#34;将整数转换为字符串(例如taksName(1)=&#34; Task01&#34;, taskName(2)=&#34; Task02 ...)

2 个答案:

答案 0 :(得分:2)

Worksheet类没有名为CBTask的成员,这就是代码失败的原因。我建议您使用OLEObjects属性:

ws.OLEObjects("CBTask").Object.Clear

答案 1 :(得分:1)

要扩展Rory的答案,除了完全限定对象外,还可以使用此函数检查工作表上是否存在给定名称的ActiveX控件:

Function obj_exists(obj_name As String, on_worksheet As Worksheet) As Boolean
  On Error GoTo errHandler
  Debug.Print on_worksheet.OLEObjects(obj_name).Name
  obj_exists = True
  On Error GoTo 0
  Exit Function
errHandler:
  obj_exists = False
  On Error GoTo 0
End Function