我正在尝试在Excel中定位用户窗体(名为UserForm1)以与Excel中的单元格引用对齐。如果我使用下面的第一个代码初始化表单,则用户表单的大小正确位于Excel中的屏幕中心。
Private Sub UserForm_Initialize()
With Me
.Width = 200
.Height = 170
End With
End Sub
但是,我想调整大小以对齐用户窗体,使其覆盖单元格B3:D15。我试过了
Private Sub UserForm_Initialize()
With Me
.Top = Sheet1.Range("B3").Top
.Left = Sheet1.Range("B3").Left
.Width = Sheet1.Range("B3").Offset(0, 4).Left - Sheet1.Range("B3").Left
.Height = Sheet1.Range("B3").Offset(12, 0).Top - Sheet1.Range("B3").Top
End With
End Sub
但用户窗体显示在功能区上(Excel缩放为100%。)
考虑到屏幕分辨率/缩放尺寸,有没有办法正确地做到这一点?
由于 牙医
答案 0 :(得分:2)
当我在寻找类似问题的解决方案时,我偶然发现了这个链接。由于我从这个社区获得了很多,我想我会发布一个潜在的解决方案来解决上述问题。
以下文章可能有用:
http://www.cpearson.com/excel/formposition.htm
先生。 Pearson拥有一个充满提示,技巧和工具的优秀网站,以及一般的良好信息。
答案 1 :(得分:0)
首先,我很抱歉将这个旧线程从死里复活,但是其他人在SO上针对此问题的答案可能无法完美运行,或者只能在特定情况下(全屏等)使用。
在许多论坛和其他与SO有关的问题上寻找了这个问题的答案之后,我在一个法语论坛上找到了一些简单的代码,这些代码对于32位版本的excel(办公室365)就可以了。
在模块中:
Option Explicit
Private Declare Function GetDC& Lib _
"user32.dll" (ByVal hwnd&)
Private Declare Function GetDeviceCaps& _
Lib "gdi32" (ByVal hDC&, ByVal nIndex&)
Sub UserFormAlign()
' 1 inch = 72 points for usually 96 or 120 dpi
Dim x#, y#, w#, h#
x = GetDeviceCaps(GetDC(0), 88) / 72
y = GetDeviceCaps(GetDC(0), 90) / 72
With UserForm1
.StartUpPosition = 0
.Left = (ActiveWindow.PointsToScreenPixelsX(ActiveCell.Left * x) * 1 / x) + ActiveCell.Width
.Top = (ActiveWindow.PointsToScreenPixelsY(ActiveCell.Top * y) * 1 / y) + ActiveCell.Height
.Show 'if not already shown
End With
End Sub
通过将UserForm
替换为With UserForm1
,并根据需要删除With Me
,可以很容易地将上面的代码从.Show
启动。尝试展示自己,因为有可能它已经出现在屏幕上了。