如何防止 Excel 用户窗体自动 shrinking/expanding?
How to prevent Excel UserForm from shrinking/expanding autonomously?
我的 Excel 用户窗体包含各种对象,包括文本框、组合框、单选按钮等。当我的笔记本电脑放在扩展坞上时,用户窗体和用户窗体上的对象会收缩和展开, VBA window 在更大的显示器上打开。
当我从 VBA 中的“表单”选项卡访问用户窗体编辑器时,我可以拖动用户窗体调整大小手柄,用户窗体中的对象将立即恢复到其原始状态,但我想这样做以编程方式使最终用户不会处理 shrunken/expanded UserForms。
我曾尝试在打开时调整用户窗体的大小 (UserForm_Initialize),但似乎 shrinking/expanding 是在用户窗体未处于活动状态时发生的,这意味着我的用户窗体调整大小仅作用于 return 用户窗体到它的 shrunken/expanded 状态而不是它的原始状态。
Sub UserForm_Initialize()
Call ResizeUserform(Me)
End Sub
Sub ResizeUserform(UserForm_Name As Object)
UserForm_Name.Width = UserForm_Name.Width + 0.001
UserForm_Name.Width = UserForm_Name.Width - 0.001
UserForm_Name.Height = UserForm_Name.Height + 0.001
UserForm_Name.Height = UserForm_Name.Height - 0.001
End Sub
不要使表单最大化。 "Maximized" 意味着您 不 知道 design-time 表单的大小,因为您所做的取决于所显示的显示器大小英寸
更大的显示器 = 更大的最大化形式,这是设计使然。
如果您不希望表单在 different-size 显示器中显示时自动调整大小,请不要将其最大化。
或者,处理窗体的 Resize
事件,并以编程方式将每个控件移动到需要相对于 bottom-right 边缘的位置。请注意,编写这些代码非常棘手且非常烦人,尤其是在表单非常复杂的情况下。只是没有最大化的形式要简单得多。
我有一个类似的问题,每次程序打开登录用户表单都会比上次小。它只在我带有额外显示器的笔记本电脑上完成。我终于用上了
Private Sub UserForm_Initialize()
With Userform
.Width = Application.Width * 0.3
.Height = Application.Height * 0.6
End With
End Sub
在用户表单代码中,它有点停止意味着它不再向用户显示更改,但是如果我打开 VBA 它改变了高度和宽度的大小,但因为它只在 VBA 并且用户不必尝试在迷你框中输入密码就可以了。
这个操作也可以用一个循环来完成。我使用按钮来增加和减少用户窗体的高度。我创建了一个循环并将其分配给 button.At,同时出现了一个不错的动画。
您设置一个高度值,当按下按钮时,如果高度小于此值,则用户窗体变长,如果高度较大,则用户窗体变短。
代码:
Private Sub CommandButton4_Click()
Dim X, d, yuk, mak As Integer
For X = 1 To 100
DoEvents
If e = 0 Then
d = d + 10
yuk = 242
mak = 342
Else
d = d - 10
yuk = 345
mak = 245
End If
UserForm2.Height = yuk + d
If UserForm2.Height >= mak And e = 0 Then GoTo 10
If UserForm2.Height <= mak And e = 1 Then GoTo 20
Next
10 CommandButton4.Caption = "<"
e = 1
ListBox1.ListIndex = 0
ScrollBar1_Change
Exit Sub
20 CommandButton4.Caption = ">"
e = 0
ListBox1.ListIndex = 0
End Sub
我遇到了类似的问题。唯一对我有用的是进入 Excel 的高级选项并选中复选框,"Disable hardware graphics acceleration." 我浪费了几个小时试图找到它。我希望这对其他人有帮助!
不要让表单的尺寸模棱两可或容易出现逻辑循环(即作为其自身的函数);在 loading/showing.
之前设置它们
即:
'where XX and YY are integer constants:
With YourFormName
.width=XX
.height=YY
.show
end with
如果您 绝对 需要在循环语句中产生,通过将计算变量存储在 global/local 变量中间接执行,然后继续声明其属性(即 YourFormName.width=变量)
祝你好运!
我的 Excel 用户窗体包含各种对象,包括文本框、组合框、单选按钮等。当我的笔记本电脑放在扩展坞上时,用户窗体和用户窗体上的对象会收缩和展开, VBA window 在更大的显示器上打开。
当我从 VBA 中的“表单”选项卡访问用户窗体编辑器时,我可以拖动用户窗体调整大小手柄,用户窗体中的对象将立即恢复到其原始状态,但我想这样做以编程方式使最终用户不会处理 shrunken/expanded UserForms。
我曾尝试在打开时调整用户窗体的大小 (UserForm_Initialize),但似乎 shrinking/expanding 是在用户窗体未处于活动状态时发生的,这意味着我的用户窗体调整大小仅作用于 return 用户窗体到它的 shrunken/expanded 状态而不是它的原始状态。
Sub UserForm_Initialize()
Call ResizeUserform(Me)
End Sub
Sub ResizeUserform(UserForm_Name As Object)
UserForm_Name.Width = UserForm_Name.Width + 0.001
UserForm_Name.Width = UserForm_Name.Width - 0.001
UserForm_Name.Height = UserForm_Name.Height + 0.001
UserForm_Name.Height = UserForm_Name.Height - 0.001
End Sub
不要使表单最大化。 "Maximized" 意味着您 不 知道 design-time 表单的大小,因为您所做的取决于所显示的显示器大小英寸
更大的显示器 = 更大的最大化形式,这是设计使然。
如果您不希望表单在 different-size 显示器中显示时自动调整大小,请不要将其最大化。
或者,处理窗体的 Resize
事件,并以编程方式将每个控件移动到需要相对于 bottom-right 边缘的位置。请注意,编写这些代码非常棘手且非常烦人,尤其是在表单非常复杂的情况下。只是没有最大化的形式要简单得多。
我有一个类似的问题,每次程序打开登录用户表单都会比上次小。它只在我带有额外显示器的笔记本电脑上完成。我终于用上了
Private Sub UserForm_Initialize()
With Userform
.Width = Application.Width * 0.3
.Height = Application.Height * 0.6
End With
End Sub
在用户表单代码中,它有点停止意味着它不再向用户显示更改,但是如果我打开 VBA 它改变了高度和宽度的大小,但因为它只在 VBA 并且用户不必尝试在迷你框中输入密码就可以了。
这个操作也可以用一个循环来完成。我使用按钮来增加和减少用户窗体的高度。我创建了一个循环并将其分配给 button.At,同时出现了一个不错的动画。 您设置一个高度值,当按下按钮时,如果高度小于此值,则用户窗体变长,如果高度较大,则用户窗体变短。 代码:
Private Sub CommandButton4_Click()
Dim X, d, yuk, mak As Integer
For X = 1 To 100
DoEvents
If e = 0 Then
d = d + 10
yuk = 242
mak = 342
Else
d = d - 10
yuk = 345
mak = 245
End If
UserForm2.Height = yuk + d
If UserForm2.Height >= mak And e = 0 Then GoTo 10
If UserForm2.Height <= mak And e = 1 Then GoTo 20
Next
10 CommandButton4.Caption = "<"
e = 1
ListBox1.ListIndex = 0
ScrollBar1_Change
Exit Sub
20 CommandButton4.Caption = ">"
e = 0
ListBox1.ListIndex = 0
End Sub
我遇到了类似的问题。唯一对我有用的是进入 Excel 的高级选项并选中复选框,"Disable hardware graphics acceleration." 我浪费了几个小时试图找到它。我希望这对其他人有帮助!
不要让表单的尺寸模棱两可或容易出现逻辑循环(即作为其自身的函数);在 loading/showing.
之前设置它们即:
'where XX and YY are integer constants:
With YourFormName
.width=XX
.height=YY
.show
end with
如果您 绝对 需要在循环语句中产生,通过将计算变量存储在 global/local 变量中间接执行,然后继续声明其属性(即 YourFormName.width=变量)
祝你好运!