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

excel vba chart .top and cell .top position not consistent

我正在使用 excel vba 生成多个图表。我一直在将 table 数据放在作品 sheet 上,并在顶部生成图表以隐藏 table。除非您使用单元格地址 .TOP 进一步向下 sheet 并将图表 .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 次迭代未隐藏 table 使用与上面相同的生成的 .Top ][2]

当我检查活动单元格 B573 .top = 8236.8

当我检查选定的图表 test20 并查看 activechart.parent.top = 8236.7998046875

在单元格 b573 中使用标记 X 应该被覆盖,但图表的顶部在视觉上位于 b579,显示在下方 6 行并公开所有 table 信息。

我看到有人提到缩放会导致问题,我现在是缩放 = 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 设置 修复应用程序缩放.

引起的

我问过一个关于生成的复选框对齐的类似 Whosebug 问题 ,发现问题在我的电子表格示例中消失了。我最近重新审视了这个问题,发现问题在保存的电子表格中再次出现。

我重新启动了计算机并在主显示器而不是扩展显示器上打开了保存的电子表格,然后问题就消失了。

所以我查看了显示器设置并注意到一个标有 高级显示器设置 的设置,在该设置下 修复应用程序的缩放 修复应用程序的缩放 注意它只适用于主显示器。我已将其关闭,.left 和 .top 现在在两台显示器之间保持一致。