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

我尝试创build一个macros,放置在Workbook_Open()过程中,该过程为工作簿中的每个工作 (其中包含名为CBTask的combobox)添加名为CBTask的combobox项目。 下面的代码不幸生成编译错误:找不到方法或数据成员“

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

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 

(正如你所看到的,这段代码还使用额外的函数“taskName(intSubtaskValue as integer)”将整数转换为string(例如taksName(1)=“Task01”,taskName(2)=“Task02 …”

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

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

要扩展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