如何防止Excel UserForm自动收缩/扩展?

j5fpnvbx  于 2023-05-08  发布在  其他
关注(0)|答案(6)|浏览(150)

My Excel UserForms包含各种对象,包括文本框、组合框、单选按钮等。当我的笔记本电脑在对接站上并且VBA窗口在较大的显示器上打开时,UserForm和UserForm上的对象会收缩和展开。
当我从VBA中的“窗体”选项卡访问UserForm编辑器时,我可以拖动UserForm的大小调整手柄,UserForm中的对象将立即捕捉回其原始状态,但我希望以编程方式执行此操作,以便最终用户不会处理缩小/扩展的UserForm。
我已经尝试在打开时调整UserForm的大小(UserForm_Initialize),但似乎收缩/扩展发生在UserForm未激活时,这意味着我的UserForm调整大小仅用于将UserForm返回到其收缩/扩展状态,而不是其原始状态。

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
kq0g1dla

kq0g1dla1#

不要让表单的维度模糊不清或倾向于逻辑循环(即作为自身的函数);在加载/显示之前设置它们。
即:

'where XX and YY are integer constants:
   With YourFormName
        .width=XX
        .height=YY
        .show
    end with

如果你绝对需要在循环语句中招致,那么通过将计算变量存储在全局/局部变量中来间接地进行,然后继续声明其属性(即YourFormName.width=variable)
祝你好运!

kx5bkwkv

kx5bkwkv2#

我有一个类似的问题,每当程序打开登录用户窗体将比上次小。它只在我的笔记本电脑上用额外的显示器做过。我终于用了

Private Sub UserForm_Initialize()
   With Userform
      .Width = Application.Width * 0.3
      .Height = Application.Height * 0.6    
   End With
End Sub

在userforms代码中,它停止了,这意味着它不再向用户显示更改,但如果我打开VBA,它已经更改了高度和宽度的大小,但由于它只在VBA中,用户不必尝试在迷你框中输入密码,这很好。

uxh89sit

uxh89sit3#

我也遇到过类似的问题。唯一对我起作用的是进入Excel的高级选项并选中“禁用硬件图形加速”框。我浪费了几个小时试图找到这个。我希望这对别人有帮助!

nxowjjhe

nxowjjhe4#

https://stackoverflow.com/a/65536526中提出的答案对我很有效:
选择|优化兼容性

deyfvvtc

deyfvvtc5#

不要使窗体最大化。“最大化”意味着你在设计时不知道窗体的大小,因为你要根据显示器的大小来确定窗体的大小。
更大的显示器=更大的最大化形式,这是设计。
如果不希望窗体在不同大小的监视器中显示时自动调整大小,则不要将其最大化。
或者,处理窗体的Resize事件,并以编程方式将每个控件移动到相对于右下边缘所需的位置。请注意,这是非常棘手和非常烦人的代码编写,特别是如果形式是任何复杂的。简单得多,只是没有一个最大化的形式。

9udxz4iz

9udxz4iz6#

这个操作也可以用一个循环来完成。我用这个按钮来增加和减少userform的高度。我创建了一个循环并将其分配给按钮。同时有一个很好的动画。您设置了一个高度值,当按下按钮时,如果高度小于此值,则用户表单会变长,如果高度大于此值,则用户表单会变短。代码:

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

这是视频:https://www.youtube.com/watch?v=1LCxgQGy9tU
Source and Example file here

相关问题