Excel VBA中如何将拼接字符串转换为Chart对象?
解决Chart对象赋值与类型不匹配问题
听你描述的问题,核心是错误地用字符串来代表Chart对象,导致要么对象未初始化,要么类型不匹配。咱们一步步来解决:
先搞清楚两个错误的根源
- 错误1(运行时91):当你声明
cht As Chart时,直接把拼接的字符串赋值给它是完全不对的——对象变量需要指向实际的对象实例,而不是一串文本。这就好比你告诉程序“我要一辆车”,但你只给了它“车库里的红色轿车”这句话,而不是真的把车开过来,程序当然找不到对象。 - 错误2(编译错误):当你把
cht改成String类型,调用CopyPasteChartFull时,这个子程序的参数应该要求传入Chart对象,你传了字符串,类型自然不匹配,编译器直接报错。
正确的做法:直接获取Chart对象,不要拼接字符串
你根本不需要把路径拼成字符串,直接用变量引用工作表和图表名称,就能拿到真实的Chart对象。修改代码里的Case "chart"部分:
Case "chart", "Chart" ' 直接通过变量获取Chart对象,用Set赋值给cht Dim cht As Chart ' 把声明移到这里或者顶部都可以 Set cht = ThisWorkbook.Worksheets(sH).ChartObjects(NameRange).Chart ' 现在直接传cht对象给子程序 CopyPasteChartFull Sld, cht, LeftPos, TopPos, WidthPos, HeightPos
为什么这样可行?
Worksheets(sH):通过变量sH的值(比如"Forecast")找到对应的工作表ChartObjects(NameRange):在工作表里找到名为NameRange(比如"Chart 1")的图表容器.Chart:从容器里取出真正的Chart对象,用Set赋值给cht变量,这样cht就指向了实际的图表,而不是一串文字。
(可选)如果非要用字符串解析对象(不推荐)
如果你因为某些特殊原因必须用字符串路径,也可以用Eval函数来解析,但这种方式容易出错,而且调试麻烦,不建议在生产代码里用:
Case "chart", "Chart" Dim cht As Chart ' 注意字符串里的引号要转义,用两个双引号代表一个 Dim chartPath As String chartPath = "ThisWorkbook.Worksheets(""" & sH & """).ChartObjects(""" & NameRange & """).Chart" Set cht = Eval(chartPath) CopyPasteChartFull Sld, cht, LeftPos, TopPos, WidthPos, HeightPos
还是那句话,优先用直接对象引用的方式,代码更清晰,也不容易出问题。
内容的提问来源于stack exchange,提问作者TisButaScratch
相关产品推荐
相关产品推荐

