通过存储在变量中的名称访问FullSeriesCollection时出现Excel VBA运行时错误13

时间:2017-07-13 13:52:31

标签: excel-vba excel-2016 vba excel

当我尝试使用FullSeriesCollection方法获取或设置图表的各种属性时,我遇到了一个奇怪的小问题。我可以通过索引或系列名称访问它们,但是当我尝试使用存储在变量中的名称时,我得到一个运行时错误13(类型不匹配)。例如:

Dim trendname As String     'I've also tried Variant, but it still gives me error 13
    trendname = "Average"   'when the name is used directly as below

Debug.Print Charts(1).FullSeriesCollection(1).Formula               'This works 
Debug.Print Charts(1).FullSeriesCollection("Average").Formula           'This works 
Debug.Print Charts(1).FullSeriesCollection.Item("Average").Formula      'This works 
Debug.Print Charts(1).FullSeriesCollection(trendname).Formula           'This gives runtime error 13
Debug.Print Charts(1).FullSeriesCollection.Item(trendname).Formula      'This gives runtime error 13
Debug.Print Charts(1).FullSeriesCollection("" & trendname).Formula      '...but this works fine!
Debug.Print Charts(1).FullSeriesCollection.Item("" & trendname).Formula 'This works too

有没有办法可以让它单独引用trendname,而不是需要将变量与空字符串连接起来?是否有一个不同的变量类型我应该将trendname声明为,而不是Variant或String? 虽然连接方法确实有效,但它看起来相当愚蠢,而且我很好奇它为什么只使用变量本身不起作用。

1 个答案:

答案 0 :(得分:1)

您可能已经知道,Index参数必须是Variant。因此,即使您将变量声明为Variant,一旦为其分配了一个字符串,它就会被识别为字符串。因此,您必须使用类型转换函数CVar ...

将索引强制转换为Variant
Debug.Print Charts(1).FullSeriesCollection(CVar(trendname)).Formula

or

Debug.Print Charts(1).FullSeriesCollection.Item(CVar(trendname)).Formula