问题描述
我正在使用 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
解决方法
未对齐特定于我的非主显示器,是由 Windows 设置修复应用程序缩放引起的。
我曾问过一个关于生成的复选框对齐 vba generated checkboxes not aligning with cells 的类似 stackoverflow 问题,并发现该问题在我的电子表格示例中消失了。我最近重新审视了这个问题,发现这个问题再次出现在保存的电子表格中。
我重新启动了计算机并在主显示器而不是扩展显示器上打开了保存的电子表格,问题就消失了。
所以我查看了监视器设置并注意到一个标记为Advanced monitor settings,并在其下Fix Scaling for Apps。 Fix Scaling for Apps 指出它仅适用于主显示器。我已将其关闭,现在两台显示器之间的 .left 和 .top 保持一致。