2015-11-07 112 views
2

我只是试图填充嵌入在Excel工作表中的组合框。我正在使用Excel 2010 for Mac。我可以不使用VBA工作表变量Me来填充该Excel工作表中嵌入的ComboBox?

下返回运行时错误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 

注意,代码是在工作表1的Worksheet_Activate子等等我和工作表(1)应该提到完全相同的东西(对吧?)。

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

+0

可能相关:为什么是你的[Worksheet_Activate(https://msdn.microsoft.com/en-us/library/office/ff198220.aspx)事件宏** **公众而不是私人** **?这是我不知道的[osx]特性吗? – Jeeped

+0

Nah我只是想从另一个程序中调用它。红鲱鱼......将其改为私人不会影响问题。 – alfymbohm

回答

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 
+0

感谢它的工作。任何想法为什么Me对象不被支持,但ActiveSheet是? – alfymbohm

+1

我不能说。我在Windows环境下进行测试,'Me'与其他特定的工作表参考产生了相同的结果。我只能假设它与[osx]环境有关。 – Jeeped

+0

用于检查Windows的Ta。 – alfymbohm

相关问题