我的宏中有这行代码:
ActiveSheet.ChartObjects("Chart 6").Activate
当我打开文件并在非英语版本的Excel上运行宏时,此代码会中断。例如,在我测试它的日本系统上,我需要将前一行更改为:
ActiveSheet.ChartObjects("グラフ 6").Activate
(グラフ指日语中的图表)
这看起来很荒谬,因为它们是对象名称,无论如何都不是人类可读的,而是用于识别对象。有没有什么方法可以使用Excel的语言工作?
答案 0 :(得分:1)
是的,这些名称用于编程目的,但这些名称对用户也是可见的,因此这是一个有趣的问题......要解决它,您可以简单地通过它的整数索引值来引用图表。
例如,而不是:
ActiveSheet.ChartObjects("Chart 6").Activate
您可以使用:
ActiveSheet.ChartObjects(6).Activate
在上面,我假设“图表6”由值6索引,但它实际上可以是任何数字。例如,如果您创建并销毁了五个以前的图表,并且此图表现在是工作表上的唯一图表,则名为“图表6”的图表实际上将被整数值1(1)索引。
因此,您必须确定图表所对应的索引编号,然后在代码中使用该索引值。
有意义吗?
更新:回复Laurent
至于显示的名称 用户,如果我命名图形怎么办? “摩托艇”?
就是这样!那是你的答案!!
我打算建议你坚持不改变的名称部分。例如,“图表6”正在变为“グラフ6”。因此,在这种情况下,您应该简单地遍历所有图表,查找以名称“6”结尾的图表。但是,更好的是,简单地避免将自动翻译的单词。因此,不要命名它,“图6”,命名,是,“摩托艇”或其他任何不会自动翻译的。
使用这种方法,而不是:
ActiveSheet.ChartObjects("Chart 6").Activate
你会使用:
ActiveSheet.ChartObjects("Motorboat").Activate
同意这不理想。甚至可能有一个我不知道的图表的程序化代码名称,如果它存在,它将允许您使用您想要的任何名称。但是,如果没有这样的功能,那么使用不能翻译的图表名称似乎是最好和最简单的方法。
希望这有帮助!
麦克
答案 1 :(得分:0)
听起来你需要以引用对象本身的方式调用对象,而不是通过各自的文本名称引用对象。
在这种情况下帮助我的一件事是使用For Each
来迭代一组对象。如:
Sub DoSomethingWillAllChartObjects()
Dim cs As ChartObject
Dim ws As Worksheet
Dim wb As Workbook
Set wb = ThisWorkbook
For Each ws In wb.Worksheets
For Each cs In ws.ChartObjects
Debug.Print cs.Name, cs.Index
Next cs
Next ws
End Sub
上面的代码遍历给定工作簿中所有工作表中的所有图表,并允许您对这些对象执行某些操作。您无需知道图表的名称即可对该代码执行某些操作。
也许你可以做的是使用For Each
遍历所有项目,然后添加一些If ... Then
逻辑来测试,看看特定的ChartObject
是否需要在您的代码中执行操作。