这是有效的,直接引用代号(Sheet3)......
Sheet3.Shapes(PopUp).Visible = True
...但是使用设置为相同Codename值的变量并不是......
WS = ActiveSheet.CodeName
WS.Shapes(PopUp).Visible = True
为什么呢?我问,因为我需要将更大的宏功能扩展到整个工作簿,所以我希望变量能够适用于用户碰巧使用的任何工作表。
感谢任何指导!
答案 0 :(得分:2)
如果将变量ws
变暗为字符串,则它将不能用作工作表对象。
例如,如果您已将工作表的(名称)属性更改为“MyCodename”,则可以将该代号用作工作表对象
MyCodename.Shapes(PopUp).Visible = True
..假设变量popup
属于正确类型并使用适当的值初始化。
答案 1 :(得分:1)
如果你的目标是pass a worksheet并且解决了这个问题,那么传递工作表:
Sub DoSomething(ByVal ws As Worksheet, ByVal popup As String)
ws.Shapes(popup).Visible = True
End sub
然后您可以使用代码名称来获取要传递该过程的特定工作表对象:
DoSomething Sheet1, "shape1"
DoSomething Sheet2, "shape12"
DoSomething Sheet3, "SomeButton"
我只想要一张工作表的宏来传递其代号的变量
如上所述,代码名称是 Worksheet
变量。 VBA使用Worksheet.CodeName
属性的字符串值以该名称生成项目范围的对象变量 - 实际上,使用这些" free"每当您需要引用编译时存在的任何工作表时,变量比通过Sheets
或Worksheets
集合使用工作表{Name
取消引用完全相同的对象引用要好一千倍{ {1}},您的用户可以在任何给定时间随意更改(除非工作簿结构受到保护),并破坏您的代码!
另一方面......
[...]适用于用户碰巧在
上的任何工作表
这是ActiveSheet
的教科书定义 - 如果您需要处理用户碰巧使用的任何工作表,那么您使用ActiveSheet
,这正是指的。