VBA点击按钮多次调用函数仅执行一次问题求助
问题解决:按钮点击后仅执行一次函数就停止
你的代码在执行第一个changechart调用时就触发了运行时错误,导致后续代码无法执行。核心错误出在changechart子程序里的Sheets("Sheet2").x这一行——x是你传入的Range类型参数,不能通过工作表对象加.的方式引用,这属于语法错误。
下面提供几种修正方案:
方案1:直接传入Sheet2的Range对象
先在主程序里明确指定要引用的工作表,再将Range对象传入子程序:
Public Sub CommandButton1_Click() ' 处理Chart 7 Sheets("Sheet1").ChartObjects("Chart 7").Activate Call changechart(Sheets("Sheet2").Range("F2:G11"), "Title 1") ' 处理Chart 3 Sheets("Sheet1").ChartObjects("Chart 3").Activate Call changechart(Sheets("Sheet2").Range("A11:B18"), "Title 2") End Sub
修改changechart子程序,直接使用传入的Range参数:
Sub changechart(x As Range, T As String) ActiveChart.ChartTitle.Text = T ActiveChart.SetSourceData Source:=x End Sub
方案2:传入单元格地址字符串
如果更习惯用地址字符串指定范围,可以修改参数类型:
Public Sub CommandButton1_Click() Sheets("Sheet1").ChartObjects("Chart 7").Activate Call changechart("F2:G11", "Title 1") Sheets("Sheet1").ChartObjects("Chart 3").Activate Call changechart("A11:B18", "Title 2") End Sub
Sub changechart(x As String, T As String) ActiveChart.ChartTitle.Text = T ActiveChart.SetSourceData Source:=Sheets("Sheet2").Range(x) End Sub
优化方案:避免使用Activate(更稳定)
频繁使用Activate容易因工作表/图表激活状态变化引发错误,建议直接引用Chart对象:
Public Sub CommandButton1_Click() Dim chtObj As ChartObject ' 处理Chart 7 Set chtObj = Sheets("Sheet1").ChartObjects("Chart 7") Call changechart(chtObj.Chart, Sheets("Sheet2").Range("F2:G11"), "Title 1") ' 处理Chart 3 Set chtObj = Sheets("Sheet1").ChartObjects("Chart 3") Call changechart(chtObj.Chart, Sheets("Sheet2").Range("A11:B18"), "Title 2") End Sub Sub changechart(cht As Chart, x As Range, T As String) cht.ChartTitle.Text = T cht.SetSourceData Source:=x End Sub
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

