将Userform与Excel中的单元格对齐

将Userform与Excel中的单元格对齐,excel,userform,vba,Excel,Userform,Vba,我正试图在Excel中定位一个userform(名为UserForm1)以与Excel中的单元格引用对齐。如果我使用下面的第一个代码初始化表单,则userform在Excel屏幕中央的大小是正确的 Private Sub UserForm_Initialize() With Me .Width = 200 .Height = 170 End With End Sub 但是,我想调整大小以对齐userform,使其覆盖单元格B3:D15。我试过了 Private Sub UserFo

我正试图在Excel中定位一个userform(名为UserForm1)以与Excel中的单元格引用对齐。如果我使用下面的第一个代码初始化表单,则userform在Excel屏幕中央的大小是正确的

Private Sub UserForm_Initialize()

With Me
  .Width = 200
  .Height = 170
End With

End Sub
但是,我想调整大小以对齐userform,使其覆盖单元格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%)


考虑到屏幕分辨率/缩放大小,有没有一种方法可以正确执行此操作?

首先,我很抱歉将此旧线程从死线程中恢复过来,但其他人对此问题进行了解答,因此要么无法完美执行,要么仅在特定情况下(全屏等)执行。
在许多论坛和其他相关问题上寻找了这些问题的答案后,我在一个法语论坛上找到了一些简单的代码,这些代码对于32位版本的excel(office 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
通过将
替换为UserForm1
,将
替换为
替换为Me
,并在需要时删除
.Show
,可以很容易地从
用户表单启动上面的代码(因为它可能已经出现在屏幕上,所以没有必要尝试显示自己)