在工作表的右上angular显示用户表单

我需要我制作的用户表单显示在工作表的右上angular。 我想我可以手动设置位置,但是当工作簿在不同的屏幕分辨率的计算机上打开时,用户窗体几乎完全脱离屏幕。 我下面的VBA代码有什么问题,是为了使用户窗体本身能够显示整个内容,而是在屏幕的右上方? 它只是没有做任何事情,我认为这是因为代码是不正确的。

谢谢您的帮助

Private Sub UserForm_Activate() Me.StartUpPosition = 0 Me.Top = Application.Top + 25 Me.Left = Application.Left + Application.Width - Me.Width - 25 End Sub 

它应该在用户表单模块中。 它适用于我,但我运行1366分辨率。 有趣的是Excel的应用程序的宽度显示为1033.5。 我编辑了其他答案的子程序debug.print你的值是什么。 尝试再次在你的userform模块中replace它。 然后回到VBA编辑器,看看在即时窗口打印出来的内容。 这样你就可以用不同的分辨率testing不同的工作站,并可能find错误的地方。 只要确保你设置视图 – 立即窗口,以查看打印出来。

如果一切都失败了,则可能需要为每个用户的分辨率进行调整。 请记住,1600分辨率下的25点将是800分辨率下的50点。

 Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long Const SM_CXSCREEN = 0 Const SM_CYSCREEN = 1 Sub VerifyScreenResolution() Dim x As Long Dim y As Long x = GetSystemMetrics(SM_CXSCREEN) y = GetSystemMetrics(SM_CYSCREEN) Debug.Print x, y End Sub 

我害怕你比帮助更令人困惑。 您必须了解“Application.Width”是Excel窗口的整个宽度。 我想下面的代码将帮助你了解数字。 把它放到一个普通的模块中,而不是表单模块,而不是表单模块。 当你运行它时,它将debugging打印出你的计算机分辨率的数字,当你的分辨率最大化时Excel的总宽度,当你的分辨率最小化时Excel的总宽度,以及你的用户窗体的总宽度。 (如果您拥有不同的名称,请从Userform1更改它。)

每台运行你的表单的计算机可能有不同的分辨率,他们的屏幕可能被最大化或最小化,我们不知道这些东西。 但是,它们都是影响总体可用宽度的variables,以及在何处放置表单。 考虑个别像素。 如果您的表单宽度为300像素,并且将其放置在具有1000个像素的屏幕上,那么将表单放在屏幕右边缘的命令将是me.left = 1000 – 300。(或应用程序.width – me.width)但是,如果只有700个可用的像素,那么命令将是me.left = 700-300,或400。

me.left命令告诉计算机在特定位置绘制表单的最左边的像素。 所以,如果你的显示在左边(与“开始”或者窗口button相同的那一面),那么你要告诉它将最左边的像素绘制在0处。我不知道如何更好地解释它。

但是把它放在一个模块中运行。 这可能有助于查看您的命令中的实际数字。

 Public Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long Const SM_CXSCREEN = 0 Const SM_CYSCREEN = 1 Sub VerifyScreenResolution2() Dim x As Long Dim y As Long x = GetSystemMetrics(SM_CXSCREEN) y = GetSystemMetrics(SM_CYSCREEN) Debug.Print "This Computer Resolution Width: " & x, "Resolution Height: "; y ActiveWindow.WindowState = xlMaximized Debug.Print "Application.Width Maximized: " & Application.Width ActiveWindow.WindowState = xlMinimized Debug.Print "Application.Width Minimized: " & Application.Width Debug.Print "Userform1 Width: " & UserForm1.Width End Sub 

这里是我的计算机和表格打印输出。

此计算机分辨率宽度:1366
分辨率高度:768
Application.Width Maximized:1036.5
Application.Width最小化:120
Userform1宽度:240