【发布时间】:2021-03-22 18:19:11
【问题描述】:
我正在使用 excel vba 生成多个图表。我一直将表格数据放在工作表上并在顶部生成图表以隐藏表格。除非您使用单元格地址 .TOP 将图表 .TOP 设置为相同的值,否则将不会产生相同的结果。
对于第一个图表
当我检查活动单元格 B3 .top = 28.8
当我检查所选图表 test1 并查看 activechart.parent.top = 28.9500007629394
如果您向下滚动 20 个图表... [图片显示第 20 次迭代的图表没有使用与上面相同生成的 .Top 隐藏表格][2]
当我检查活动单元格 B573 .top = 8236.8
当我检查所选图表 test20 并查看 activechart.parent.top = 8236.7998046875
应该覆盖在单元格 b573 中使用标记 X,但图表顶部在视觉上位于 b579,显示低 6 行并显示所有表格信息。
我看到提到缩放会导致问题,并且我处于缩放 = 100%
我也许可以捏造这个,但我不确定它是否适用于任何地方。
我对想法持开放态度。
使用两个例程窥视 ActiveChart.Parent.top 和 activecell.top
Sub Button4_Click() 'select the chart you want to see .TOP in Q1
Sheet1.Range("Q1").Value = ActiveChart.Parent.Top
End Sub
Sub Button5_Click() 'select the cell you want to see .TOP in T1
Sheet1.Range("T1").Value = ActiveCell.Top
End Sub
Sub PlotDrift()
Dim origin As Range
Dim rngToChart As Range
Dim iLoop As Integer
For iLoop = 0 To 20
Set origin = Sheet1.Range("d" & iLoop * 30 + 7)
origin.Offset(0, 1) = "red"
origin.Offset(0, 2) = "blue"
origin.Offset(1, 0) = "test" & (1 + iLoop)
origin.Offset(1, 1) = "62.0%"
origin.Offset(1, 2) = "38.0%"
origin.Offset(-4, -2).Value = "X" ' top left cell that should be covered.
Set rngToChart = Sheet1.Range(origin.Offset(0, 0), origin.Offset(1, 2))
rngToChart.Select
Dim ChartRange As Range
Set ChartRange = rngToChart.Offset(-4, -2).Resize(RowSize:=18, ColumnSize:=9)
ttop = ChartRange.Top
TLeft = ChartRange.Left
TWidth = ChartRange.Width
THeight = ChartRange.Height
' rngtochart... is selected so just add chart to plot it.
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered, TLeft, ttop, TWidth, THeight).Select
' document in column 1 what excel says it is doing.
origin.Cells(1, 1).Offset(-1, -3).Value = ChartRange.Top
origin.Cells(1, 1).Offset(-2, -3).Value = ActiveChart.Parent.Top
Next iLoop
End Sub
【问题讨论】:
-
我可以为顶部添加图表漂移权重,现在可以使用,但我有点相信它会回来咬我。通过查看向下约 6060 行的漂移量和预期(粗略猜测)chartDriftWeighting = 0.989579898 ttop = ChartRange.Top * chartDriftWeighting 得出“捏造它 Dim chartDriftWeighting as double”
标签: excel vba excel-charts