【发布时间】:2019-06-06 19:31:54
【问题描述】:
我的 Excel 用户窗体包含各种对象,包括文本框、组合框、单选按钮等。当我的笔记本电脑在扩展坞上并且 VBA 窗口打开时,用户窗体和用户窗体上的对象会收缩和扩展更大的显示器。
当我从 VBA 中的“表单”选项卡访问用户表单编辑器时,我可以拖动用户表单调整大小手柄,用户表单中的对象将立即恢复到其原始状态,但我想以编程方式执行此操作,以便最终用户不会处理缩小/扩展的用户表单。
我曾尝试在打开时调整用户窗体的大小 (UserForm_Initialize),但似乎在用户窗体不活动时发生收缩/扩展,这意味着我的用户窗体调整大小仅用于将用户窗体返回到其收缩/扩展状态而不是它的原始状态。
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
【问题讨论】:
-
表单通常不会自动收缩或扩展 - 恰恰相反,在 MSForms 中制作“反应式”UI 绝对是一场噩梦,因为 UI 框架无济于事有任何布局。表格是否最大化?
BorderStyle是什么? -
您可以尝试处理
Resize事件,看看是否可以绝对定位其中的每个控件(例如Me.TextBox1.Left = Me.Width - RightMargin - Me.TextBox1.Width等)...祝您好运! -
@MathieuGuindon 我已经为 BorderStyle 尝试了“None”和“Single”,它似乎对缩小/扩大没有影响。另外,我没有给用户调整表单大小的选项,所以它应该总是最大化。
-
拥有一个最大化的表单 is 提供调整大小的选项:所有需要的是...具有不同大小的第二台显示器。当表单移动到另一个监视器并调整大小时,应该触发其
Resize事件。 -
要么你处理
Resize并让表单看起来不错,不管它显示在什么显示器尺寸上,....或者你让它不最大化 - 那样'将永远是相同的大小,无论监视器大小。