如何防止按钮重新调整大小?每次单击按钮时,按钮的大小或字体大小都会更改。
注意:我无法锁定工作表,因为我的宏将写入该工作表。
已关闭自动调整大小。我在Windows 7(64位)上运行Excel 2007。
如何防止按钮重新调整大小?每次单击按钮时,按钮的大小或字体大小都会更改。
注意:我无法锁定工作表,因为我的宏将写入该工作表。
已关闭自动调整大小。我在Windows 7(64位)上运行Excel 2007。
Private Sub myButton_Click()
Dim lb As MSForms.ListBox
Set lb = Sheet1.myListBox
Dim oldSize As ListBoxSizeType
oldSize = GetListBoxSize(lb)
' Do stuff that makes listbox misbehave and change size.
' Now restore the original size:
SetListBoxSize lb, oldSize
End Sub
这里使用以下类型和过程:
Type ListBoxSizeType
height As Single
width As Single
End Type
Function GetListBoxSize(lb As MSForms.ListBox) As ListBoxSizeType
GetListBoxSize.height = lb.height
GetListBoxSize.width = lb.width
End Function
Sub SetListBoxSize(lb As MSForms.ListBox, lbs As ListBoxSizeType)
lb.height = lbs.height
lb.width = lbs.width
End Sub
onClick
的结尾添加了一些代码,如下所示:CommandButton1.Width = 150
CommandButton1.Height = 33
CommandButton1.Font.Size = 11
看起来可以工作。
我以稍微不同的方式遇到了这个问题。通过在我的主要笔记本电脑显示器上打开工作簿,然后将其移动到我的大型监视器上。我想应该是相同的根本原因。
Font.Size = 200
才能看到文本。我对微软并不印象深刻,因为这个问题似乎已经存在了几年。 - Holene我看到过这个问题在Excel 2007、2010和2013中出现。
以下代码可以防止该问题的发生。每当一个Active X对象被激活时,需要运行该代码。
Sub Shared_ObjectReset()
Dim MyShapes As OLEObjects
Dim ObjectSelected As OLEObject
Dim ObjectSelected_Height As Double
Dim ObjectSelected_Top As Double
Dim ObjectSelected_Left As Double
Dim ObjectSelected_Width As Double
Dim ObjectSelected_FontSize As Single
ActiveWindow.Zoom = 100
'OLE Programmatic Identifiers for Commandbuttons = Forms.CommandButton.1
Set MyShapes = ActiveSheet.OLEObjects
For Each ObjectSelected In MyShapes
'Remove this line if fixing active object other than buttons
If ObjectSelected.progID = "Forms.CommandButton.1" Then
ObjectSelected_Height = ObjectSelected.Height
ObjectSelected_Top = ObjectSelected.Top
ObjectSelected_Left = ObjectSelected.Left
ObjectSelected_Width = ObjectSelected.Width
ObjectSelected_FontSize = ObjectSelected.Object.FontSize
ObjectSelected.Placement = 3
ObjectSelected.Height = ObjectSelected_Height + 1
ObjectSelected.Top = ObjectSelected_Top + 1
ObjectSelected.Left = ObjectSelected_Left + 1
ObjectSelected.Width = ObjectSelected_Width + 1
ObjectSelected.Object.FontSize = ObjectSelected_FontSize + 1
ObjectSelected.Height = ObjectSelected_Height
ObjectSelected.Top = ObjectSelected_Top
ObjectSelected.Left = ObjectSelected_Left
ObjectSelected.Width = ObjectSelected_Width
ObjectSelected.Object.FontSize = ObjectSelected_FontSize
End If
Next
End Sub
Sub Shared_ObjectReset()
开始,到 EndSub
结束。 - nicorellius(Excel 2003)
在我看来,有两个不同的问题: - 点击一个按钮时(虽然不是每次都会发生,但不知道为什么),文本大小会调整; - 当在分辨率不同的显示器上打开工作簿时,所有按钮的大小都会改变(即使回到初始显示器上也是如此)。
至于单个调整大小的问题:我发现只需要修改一个按钮的尺寸就可以“恢复”它。 例如:
myButton.Height = myButton.Height + 1
myButton.Height = myButton.Height - 1
打印后我的大小改变了,更改缩放比例重新绘制屏幕并修复了它
ActiveWindow.Zoom = 100
ActiveWindow.Zoom = 75
在一些沮丧的尝试之后,以下代码帮助我解决了这个Excel/VBA的bug。 需要注意的两个关键点是:
对于不切换的控件,您可以使用迭代变量或其他方法来确保宽度和高度属性在两个类似的值集之间交替,这将产生类似于我在此情况下使用的切换状态更改的效果。
虽然这是一个老问题,但对于那些被困在Excel 2007上的人来说,仍然似乎是个问题。我在ActiveX Listbox Object上遇到了同样的问题,并且每次重新计算时都会扩展其大小。LinkCells属性正在寻找其值的动态(偏移)范围。重构使其寻找正常范围可以解决我的问题。
Public Sub cmdBALSCHED_Click()
Sheet3.cmdBALSCHED.Height = 21
Sheet3.cmdBALSCHED.Height = 20
Sheet3.Range("D4").Select
这将重置高度为20,按钮字体恢复为原始状态。
当Excel已经打开后,屏幕分辨率/设置更改时会发生这种情况。
例如:
我找到的唯一解决方案是关闭Excel并使用新的屏幕设置重新打开它。必须关闭所有Excel实例,包括由其他进程执行的任何不带界面的隐藏实例都必须被终止。