【问题标题】:Finding Column Header Height and Row Header Width查找列标题高度和行标题宽度
【发布时间】:2016-06-12 22:35:54
【问题描述】:

这是对我之前的问题here 的跟进,但不同的是,我觉得最好提出一个新问题。我使用了一系列窗口句柄将用户窗体锁定到 Excel 电子表格,这导致 0,0 位置位于列和行标题的左上角(或“全选”按钮)。 tl; dr 是我试图找到如何确定列标题的高度和行标题的宽度,以便我可以在页面上正确定位用户表单,而不管用户的默认 excel 字体设置。

我认为到目前为止我为我的用户表单提供的代码不会有帮助,但如果有人愿意,我很乐意发布它。我可以通过将 DisplayHeadings 属性设置为 false 来完全删除标题,但这并不能真正实现我的最终目标。

似乎列标题的高度与具有相同字体类型和大小的单元格的默认高度相同。我没有测试过这种方法,因为它只能给我所需的一半,但我仍然想确认这是否准确。

我也知道行标题的宽度会随着您在电子表格上的进一步下降而改变(例如,首先增加 1,000,然后增加 10,000、100,000 和 1,000,000)。我只需要找到最小的宽度(小于 1,000),但如果不太复杂,我想知道如何找到更大的宽度。

为了定位标题大小,我尝试在通过以下代码删除显示标题后比较单元格的 .left 和 .top 属性:

Sub TestHeadings()
   Dim fl, ft, tl, tt As Integer

   tl = Application.ActiveSheet.Range("A1").Left
   tt = Application.ActiveSheet.Range("A1").Top
   Application.ActiveWindow.DisplayHeadings = False
   fl = Application.ActiveSheet.Range("A1").Left
   ft = Application.ActiveSheet.Range("A1").Top

   Debug.Print "True: " & tl & ", " & tt
       'Returns True: 0, 0
   Debug.Print "False: " & fl & ", " & ft
       'Returns False: 0, 0

End Sub

我还尝试通过以下代码在禁用显示标题后比较用户窗体(称为 Working_Menu,.StartUpPosition 属性设置为 0-Manul)的 .left 和 .top 属性:

Sub TestHeadings()
   Dim fl, ft, tl, tt As Integer

   Application.ActiveWindow.DisplayHeadings = False
   With Working_Menu
      .Left = 5 'Also tried 0
      .Top = 5 'Also tried 0
      .Show
    End With
   fl = Working_Menu.Left
   ft = Working_Menu.Top
   Application.ActiveWindow.DisplayHeadings = True
   tl = Working_Menu.Left
   tt = Working_Menu.Top

   Debug.Print "True: " & tl & ", " & tt 
       'Returns True: 5, 145, or 0, 140
   Debug.Print "False: " & fl & ", " & ft 
       'Returns False: 5, 144.75, or 0, 139.5 (Adjusted for screen resolution)

End Sub

我的结果在代码中进行了注释,但两种方法都没有返回任何表明标头大小的差异。有谁知道如何确定列标题的高度或行标题的宽度?

谢谢!

【问题讨论】:

  • rowheightcolumnwidth 有什么问题?
  • 抱歉,我知道这听起来很混乱,但我想要的是行标题的宽度,而不是行高。同样,列标题的高度,而不是列宽。
  • 啊。那是我没有仔细阅读的错。
  • 嘿,不用担心。当我尝试用谷歌搜索时,我遇到了完全相同的问题。
  • 您是否找到了解决此问题的解决方案或解决方法?我想在窗口调整大小时调整工作表的列大小,使它们始终占据窗口宽度的 100%,但无论行/列标题是否可见,ActiveWindow.UsableWidth 属性都保持相同的值。

标签: excel vba


【解决方案1】:

这个Sub将返回它的参数HeightPoints(以点为单位的列标题高度)和WidthPoints(以点为单位的行标题宽度):

Sub HeadingsSize(ByRef HeightPoints As Single, ByRef WidthPoints As Single)
    Dim rC As Range, bSU As Boolean
    Dim x1 As Long, x2 As Long, y1 As Long, y2 As Long
    Const PxToPt As Single = 72 / 96
    bSU = Application.ScreenUpdating
    If bSU Then Application.ScreenUpdating = False
    With ActiveWindow
        Set rC = .VisibleRange.Cells(1)
        y1 = .PointsToScreenPixelsY(rC.Top)
        x1 = .PointsToScreenPixelsX(rC.Left)
        .DisplayHeadings = Not .DisplayHeadings
        y2 = .PointsToScreenPixelsY(rC.Top)
        x2 = .PointsToScreenPixelsX(rC.Left)
        .DisplayHeadings = Not .DisplayHeadings
    End With
    HeightPoints = Abs(y2 - y1) * PxToPt
    WidthPoints = Abs(x2 - x1) * PxToPt
    Application.ScreenUpdating = bSU
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2015-04-07
    相关资源
    最近更新 更多