在Excel Userform上的缩放框架内移动控件

时间:2012-02-05 00:18:01

标签: excel-vba userform vba excel

我有Userform1,其尺寸适合全屏显示在2560 x 1440的显示器中.Userform1包含FrameA,其宽度也是2560,并且放大到10%。

FrameA包含子FrameB,其.Width为8000,其.Left为1000(在FrameA缩放的坐标中)。 FrameB在屏幕上完全可见。

我想将FrameB向右移动,使其右边缘位于显示器的右边缘。有人能告诉我这样做的算法吗?

2 个答案:

答案 0 :(得分:0)

我不记得每一个表格看起来都像我想要的那么麻烦。

我最后搬了很多东西,或许不需要搬家。但是,我终于得到了我相信你寻求的效果,所以我没有尝试将代码移回原来的位置。

第一个关键变化似乎是:

Property StartUpPosition of UserForm1 = 0 - Manual`

没有这个,我无法将表格的高度设置为完整的可用高度。设置.Top没有效果。

第二个关键变化似乎是使用:

  Application.DisplayFullScreen = True

我不记得之前需要这个命令,但是最大化窗口状态不会给出全屏高度。

我放弃了你的例程Sub maximizeWindows()Sub UserForm_initialize(),因为我做了不同的事情,或者因为我移动了代码。我相信你可以将代码移回去,但我还没试过。

我添加了一个新控件cmdExit,其中包含以下事件例程:

Private Sub cmdExit_Click()
  Unload Me
End Sub

Sub runDemo()已成为:

Sub runDemo()

  Application.DisplayFullScreen = True

  Load UserForm1
  With UserForm1
    .Top = 2
    .Left = 0
    .Width = Application.UsableWidth
    .Height = Application.UsableHeight - 2
    .Frame1.Move 0, 0, .InsideWidth, 300
    .Frame2.Left = .Frame1.Left + .Frame1.InsideWidth - .Frame2.InsideWidth
    .Show
  End With

  Application.DisplayFullScreen = False

End Sub

以上对我的影响是:

  • UserForm1占据整个屏幕,而不是底部的Windows任务栏。
  • Frame1位于顶部,占据了屏幕的整个宽度,高度为300。
  • Frame2与Frame1正确对齐。
  • Excel的最大化/正常/最小化状态未更改。

希望这适合你。

答案 1 :(得分:0)

我终于找到了怎么做。

回顾一下问题并简化一下: Frame2完全包含在缩放的Frame1内,需要向右移动,使其右侧与Frame1的右侧齐平。 Frame2的左侧应该移到哪里?

Sub move_Frame2_Hard_Right_Inside_Frame1()
   Dim zoomPct!
   zoomPct! = Frame1.Zoom / 100
   Frame2.Left = Frame1.Width / zoomPct! - Frame2.Width
End Sub