excel vba 图表 .top 和单元格 .top 位置不一致

问题描述

我正在使用 excel vba 生成多个图表。我一直将表格数据放在工作表上,并在顶部生成图表以隐藏表格。除非您使用单元格地址 .TOP 深入工作表并将图表 .TOP 设置为相同的值,否则不会产生相同的结果。

对于第一个图表

当我检查活动单元格 B3 时 .top = 28.8

当我检查所选图表 test1 并查看 activechart.parent.top = 28.9500007629394

picture showing cells(3,2).Top,and activechart.top circled in red the chart table is in cells(7,4) obscured by chart as desired

如果向下滚动 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 AppsFix Scaling for Apps 指出它仅适用于主显示器。我已将其关闭,现在两台显示器之间的 .left 和 .top 保持一致。