VBA图表Resize代码报错:形状已锁定无法调整,求尺寸控制方案
问题解决方案
1. 重复生成图表工作表的修复
你的代码里调用了两次Charts.Add,这就是生成两个工作表的根源——直接删除第一行无意义的Charts.Add即可。
2. 图表尺寸调整报错的解决方法
报错“形状已锁定无法调整”是因为图表区域(ChartArea)默认被锁定,提供两种可行方案:
方法一:解锁ChartArea后调整尺寸
在修改高度宽度前,先解锁图表区域,调整完成后可重新锁定:
With mychart .ChartArea.Locked = False ' 解锁图表区域 .ChartArea.Height = 107 .ChartArea.Width = 167 .ChartArea.Locked = True ' 可选,调整后恢复锁定 ' 其他图表设置 End With
方法二:直接调整图表工作表的尺寸
由于你创建的是独立图表工作表,也可以直接调整整个工作表的尺寸来控制图表显示大小:
With mychart.Parent ' 指向图表所在的工作表对象 .Width = 167 .Height = 107 End With
修复后的完整代码
Private Sub CommandButton4_Click() Dim chartarray1 As Variant Dim chartarray2 As Variant Dim mychart As Chart Dim fname As String Dim f As String chartarray1 = Array(Val(UserForm1.TextBox6.Value), Val(UserForm1.TextBox7.Value)) chartarray2 = Array("methane", "carbon") ' 仅调用一次Charts.Add,避免生成多余工作表 Set mychart = Charts.Add With mychart .SeriesCollection.NewSeries .SeriesCollection(1).Name = "emissions" .SeriesCollection(1).XValues = chartarray2 .SeriesCollection(1).Values = chartarray1 .ChartType = xlBarClustered ' 方法一:解锁后调整ChartArea尺寸 .ChartArea.Locked = False .ChartArea.Height = 107 .ChartArea.Width = 167 .ChartArea.Locked = True ' 若使用方法二,替换上方代码为: ' .Parent.Width = 167 ' .Parent.Height = 107 .ChartStyle = 6 End With ' 导出图表 mychart.Export "C:\Users\shsy\chart1.jpg" ' 隐藏生成的图表工作表(直接使用mychart的名称,避免ActiveSheet的不确定性) f = mychart.Name Sheets(f).Visible = False ' 加载图片到用户窗体 fname = "C:\Users\shsy\chart1.jpg" UserForm1.Image1.Picture = LoadPicture(fname) End Sub
额外优化说明:
- 显式声明所有变量,避免隐式变量引发的潜在问题
- 直接通过
mychart.Name获取图表工作表名称,替代ActiveSheet,提升代码稳定性
内容的提问来源于stack exchange,提问作者shahin syr
相关产品推荐
相关产品推荐

