将Userform与Excel中的单元格对齐

时间:2011-05-24 21:10:25

标签: excel excel-vba userform vba

我正在尝试在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%。)

考虑到屏幕分辨率/缩放尺寸,有没有办法正确地做到这一点?

由于 牙医

2 个答案:

答案 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启动。尝试展示自己,因为有可能它已经出现在屏幕上了。