【发布时间】:2020-07-03 06:36:10
【问题描述】:
下面的代码可以很好地调整工作表中单个图表的大小,或将多个图表调整为相同大小。我正在寻找的是一种根据该工作表上的单元格值来不同地调整(和定位)每个图表的大小(和位置)的方法。
Sub UpdateChart()
Dim objCht As ChartObject
For Each objCht In ActiveSheet.ChartObjects
With objCht.Chart
With .Axes(xlValue)
.MaximumScale = ActiveSheet.Range("E6").Value
.MinimumScale = ActiveSheet.Range("E5").Value
End With
.Parent.Height = ActiveSheet.Range("E7").Value
With .Axes(xlCategory)
.MaximumScale = ActiveSheet.Range("D6").Value
.MinimumScale = ActiveSheet.Range("D5").Value
End With
.Parent.Width = ActiveSheet.Range("D7").Value
End With
Next objCht
End Sub
在 For/Next 循环中,我尝试引用图表名称或 objCht 索引值,但没有成功。
Sub UpdateSomeCharts()
Dim objCht As ChartObject
For Each objCht In ActiveSheet.ChartObjects
With objCht.Chart
If objCht.Chart.Name = "Part 1 Chart_Plan" Then
With .Axes(xlValue)
.MaximumScale = ActiveSheet.Range("E6").Value
.MinimumScale = ActiveSheet.Range("E5").Value
End With
Parent.Height = ActiveSheet.Range("E7").Value
With .Axes(xlCategory)
.MaximumScale = ActiveSheet.Range("D6").Value
.MinimumScale = ActiveSheet.Range("D5").Value
End With
.Parent.Width = ActiveSheet.Range("D7").Value
GoTo Size_Charts_Done
Else:
If objCht.Chart.Name = "Part 1 Chart_Right" Then
With .Axes(xlValue)
.MaximumScale = ActiveSheet.Range("E6").Value
.MinimumScale = ActiveSheet.Range("E5").Value
End With
Parent.Height = ActiveSheet.Range("E7").Value
With .Axes(xlCategory)
.MaximumScale = ActiveSheet.Range("D10").Value
.MinimumScale = 0
End With
.Parent.Width = ActiveSheet.Range("D10").Value
GoTo Size_Charts_Done
Else:
If objCht.Chart.Name = "Part 1 Chart_Left" Then
With .Axes(xlValue)
.MaximumScale = ActiveSheet.Range("E6").Value
.MinimumScale = ActiveSheet.Range("E5").Value
End With
Parent.Height = ActiveSheet.Range("E7").Value
With .Axes(xlCategory)
.MaximumScale = 0
.MinimumScale = -(ActiveSheet.Range("D10").Value)
End With
.Parent.Width = ActiveSheet.Range("D10").Value
GoTo Size_Charts_Done
Size_Charts_Done:
End If
End If
End If
End With
Next objCht
End Sub
使用 debug.print 我可以看到 If 语句正在运行,但是在 .Parent.Height 上失败了。说它在 excel for mac 中不受支持,但同一行在原始代码上运行。
据我了解,VBA for Mac 是 Windows 上可用功能的一个子集,因此并非所有来自该世界的东西都适用于 Macville。
【问题讨论】: