【问题标题】:excel vba chart .top and cell .top position not consistentexcel vba图表.top和单元格.top位置不一致
【发布时间】:2021-03-22 18:19:11
【问题描述】:

我正在使用 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

【问题讨论】:

  • 我可以为顶部添加图表漂移权重,现在可以使用,但我有点相信它会回来咬我。通过查看向下约 6060 行的漂移量和预期(粗略猜测)chartDriftWeighting = 0.989579898 ttop = ChartRange.Top * chartDriftWeighting 得出“捏造它 Dim chartDriftWeighting as double”

标签: excel vba excel-charts


【解决方案1】:

未对齐特定于我的非主显示器,是由 Windows 设置修复应用程序缩放引起的。

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

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

所以我查看了监视器设置,并注意到一个标记为高级监视器设置,并在其下修复应用程序缩放Fix Scaling for Apps 指出它仅适用于主显示器。我已将其关闭,现在两台显示器之间的 .left 和 .top 是一致的。

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2012-10-27
    • 2011-10-31
    • 2016-12-09
    • 2020-05-19
    • 1970-01-01
    相关资源
    最近更新 更多