如何在 VBA (Excel) 中使用变量设置系列数据

问题描述

我知道已经有一些关于此的主题,但我已经尝试了一些解决方案,但似乎没有任何效果,所以我将在这里碰碰运气。

我正在尝试通过变量设置图表中的系列数据。如果我不使用变量,我会有这样的事情:

   ActiveChart.FullSeriesCollection(1).XValues = _
        "='sheetname_xpto'!$A$2:$A$" & lw

上面的代码有效。现在,我想用一个变量交换 'sheetname_xpto'。所以我已经尝试了几个选项,例如:

Dim sname As String
sname = ActiveSheet.Name

    ActiveChart.FullSeriesCollection(1).Values = _
        "="sname"!"$C$2:$C$" & lw

 ActiveChart.FullSeriesCollection(1).Values = _
        "=Sheets(sname)!"$C$2:$C$" & lw

 ActiveChart.FullSeriesCollection(1).Values = _
        "='&sname&'!"$C$2:$C$" & lw

和许多其他。 所有这些,当通过语法测试时,只需将“sname”放在系列数据值上,而不是工作表的实际名称。有人可以帮我吗?

解决方法

你必须区分在 VBA 中执行的部分和在 Excel 中执行的公式。对于 VBA,您的公式只是一个字符串。

VBA 运行时将引号之间的所有内容视为字符串的一部分。如果找到变量或函数名称或其他任何内容,它将不会查看字符串。另一方面,Excel 对 VBA 中使用的变量一无所知,因此无法读取内容。

如果您需要将变量的内容作为字符串的一部分,请使用字符串连接(您已经为变量 lw 执行了此操作)。

ActiveChart.FullSeriesCollection(1).Values = "=" & sname & "!$C$2:$C$" & lw

在 VBA 中处理公式时,我强烈建议您将公式写入中间变量 - 如果出现问题,使用调试器很容易检查该变量的内容

Dim formula As String
formula = "=" & sname & "!$C$2:$C$" & lw
ActiveChart.FullSeriesCollection(1).Values = formula