我是否可以使用VBA工作表变量Me来填充嵌入在该Excel工作表中的ComboBox?

时间:2015-11-07 02:05:35

标签: excel macos vba excel-vba-mac

我只是尝试填充Excel工作表中嵌入的组合框。我正在使用Excel 2010 for Mac。

以下命令返回运行时错误445“对象不支持此操作”

Public Sub Worksheet_Activate()
With Me.Shapes("TheComboBox").ControlFormat
   .RemoveAllItems
   .List = Array("me", "you")
End With

但以下情况可以正常使用

Public Sub Worksheet_Activate()
With Worksheets(1).Shapes("TheComboBox").ControlFormat
   .RemoveAllItems
   .List = Array("me", "you")
End With

请注意,代码位于Worksheet 1的Worksheet_Activate sub中,因此Me和Worksheets(1)应该引用完全相同的东西(对吗?)。

我在网上发现this类似的帖子暗示Excel for Mac不喜欢在作为变量传递的工作表上使用ControlFormat。是否有解决方法,以避免必须硬编码工作表的数字或名称?我不希望用户四处移动或重命名工作表,从而打破它。

1 个答案:

答案 0 :(得分:1)

由于严格定义的Worksheet_Activate事件使工作表处于活动状态,因此我认为ActiveSheet property应该正确引用正确的工作表。

我会远离工作表.Name propertyWorksheet.Index property,因为工作表通常会在队列中移动并重命名。但是,工作表.CodeName property通常保持静态,尽管只需稍加努力即可更改。

Private Sub Worksheet_Activate()
    With Sheet1.Shapes("TheComboBox").ControlFormat
       .RemoveAllItems
       .List = Array("me", "you")
    End With
End Sub