我尝试创建一个放在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 ...)
答案 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