gpt4 book ai didi

excel - VBA 用户表单中的问题 - 分辨率完全改变

转载 作者:行者123 更新时间:2023-12-04 20:10:05 27 4
gpt4 key购买 nike

我用 VBA 中的几个用户窗体构建了一个 excel 文件,其中包含按钮(窗体控件)。通常我使用扩展坞将我的笔记本电脑连接到大屏幕(我的办公室)。有时我在没有扩展坞的情况下打开文件(只有笔记本电脑)。
我今天打开文件,发现分辨率完全改变了,用户表单变得如此之大,并且在所有按钮中,里面的文本都向右换行。
请您的支持知道我该如何解决这个问题?

谢谢

enter image description here

最佳答案

这是由于在您的 native 屏幕分辨率更改时打开文件(并且可能仅在这也更改了纵横比时)导致的问题 - 将笔记本电脑连接到外部屏幕或从外部屏幕断开连接的最常见原因(在此案例,通过您的扩展坞)

此问题有两种形式:按钮保持相同大小,但内容(文本、图像等)在左上角锚定时放大/缩小 - 这就是这里发生的情况 - 或者内容保持相同的大小,但按钮本身会变大/变小,直到它覆盖整个工作表或太小而无法单击。

根据我的经验,修复按钮的唯一方法是调整它们,并强制 Excel 重新绘制形状,而不是“记住”它应该是什么样子。您可以手动执行此操作,但我会尝试查找一些代码来为您“重置”按钮。这是一些为您做事的代码。

(对于用户窗体,您 可能 只需调用 Me.Repaint 即可强制重绘,而无需费心调整大小 - 但我尚未对此进行测试,因为我永远无法解决此问题-需求>_<)

用户窗体按钮修复

Sub FixButtonFormat(ByRef Button As Control)
Dim Top As Double, Left As Double, Width As Double, Height As Double, FontName As String, FontSize As Double

Top = Button.Top
Left = Button.Left
Width = Button.Width
Height = Button.Height
FontName = Button.Object.Font.Name
FontSize = Button.Object.Font.Size

'Scale Button up slightly
Button.Top = Top - 1
Button.Left = Left + 1
Button.Width = Width - 2
Button.Height = Height + 2
Button.Object.Font.Size = FontSize + 1

DoEvents
UserForm1.Repaint
DoEvents

'Reset button to original size
Button.Top = Top
Button.Left = Left
Button.Width = Width
Button.Height = Height
Button.Object.Font.Name = FontName
Button.Object.Font.Size = FontSize
End Sub

工作表按钮修复

Sub FixButtonFormat(ByRef Button As Shape)
If Button.Type <> msoFormControl And Button.Type <> msoOLEControlObject Then Exit Sub
Dim Top As Double, Left As Double, Width As Double, Height As Double, FontName As String, FontSize As Double
Dim Screen As Boolean
Screen = Application.ScreenUpdating

Top = Button.Top
Left = Button.Left
Width = Button.Width
Height = Button.Height
If Button.Type = msoFormControl Then 'Form Control
FontName = Button.OLEFormat.Object.Font.Name
FontSize = Button.OLEFormat.Object.Font.Size
ElseIf Button.Type = msoOLEControlObject Then 'ActiveX Control
FontName = Button.DrawingObject.Object.Font.Name
FontSize = Button.DrawingObject.Object.Font.Size
End If

'Scale Button up slightly
Button.Top = Top - 1
Button.Left = Left + 1
Button.Width = Width - 2
Button.Height = Height + 2
If Button.Type = msoFormControl Then 'Form Control
Button.OLEFormat.Object.Font.Size = FontSize + 1
ElseIf Button.Type = msoOLEControlObject Then 'ActiveX Control
Button.DrawingObject.Object.Font.Size = FontSize + 1
End If

If Not Screen Then
Application.ScreenUpdating = True
DoEvents
Application.ScreenUpdating = False
Else
DoEvents
End If

'Reset button to original size
Button.Top = Top
Button.Left = Left
Button.Width = Width
Button.Height = Height
If Button.Type = msoFormControl Then 'Form Control
Button.OLEFormat.Object.Font.Name = FontName
Button.OLEFormat.Object.Font.Size = FontSize
ElseIf Button.Type = msoOLEControlObject Then 'ActiveX Control
Button.DrawingObject.Object.Font.Size = FontSize
Button.DrawingObject.Object.Font.Name = FontName
End If
End Sub

关于excel - VBA 用户表单中的问题 - 分辨率完全改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52833514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com