【发布时间】: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
我的结果在代码中进行了注释,但两种方法都没有返回任何表明标头大小的差异。有谁知道如何确定列标题的高度或行标题的宽度?
谢谢!
【问题讨论】:
-
rowheight和columnwidth有什么问题? -
抱歉,我知道这听起来很混乱,但我想要的是行标题的宽度,而不是行高。同样,列标题的高度,而不是列宽。
-
啊。那是我没有仔细阅读的错。
-
嘿,不用担心。当我尝试用谷歌搜索时,我遇到了完全相同的问题。
-
您是否找到了解决此问题的解决方案或解决方法?我想在窗口调整大小时调整工作表的列大小,使它们始终占据窗口宽度的 100%,但无论行/列标题是否可见,
ActiveWindow.UsableWidth属性都保持相同的值。