单击VBA Excel按钮后调整大小(命令按钮)

时间:2012-03-06 09:49:09

标签: excel vba button resize

如何停止按钮调整大小?每次单击按钮时,按钮的大小或字体大小都会发生变化。

注意:我无法锁定我的工作表,因为我的宏会写入工作表。

自动调整大小已关闭。我在Windows 7(64位)上运行Excel 2007。

13 个答案:

答案 0 :(得分:6)

我对ListBoxes使用以下内容。按钮的原理相同;适当调整。

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

答案 1 :(得分:4)

我在onClick的末尾添加了一些代码:

CommandButton1.Width = 150
CommandButton1.Height = 33
CommandButton1.Font.Size = 11

似乎工作。

我的问题略有不同。通过在我的主笔记本电脑显示屏上打开工作簿,然后将其移动到我的大显示器。我会假设相同的根本原因。

答案 2 :(得分:1)

在Excel 2007,2010和2013中看到此问题

此代码可防止问题显示。每次激活活动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

答案 3 :(得分:1)

(Excel 2003)

在我看来,有两个不同的问题: - 点击它时调整ONE按钮文本的大小(虽然不总是,不知道为什么),以及 - 在具有不同分辨率的显示器上打开工作簿时更改所有按钮的大小(即使在返回初始显示时也存在)。

至于个别调整大小问题:我发现修改按钮的一个维度以“恢复”它就足够了。 如:

 myButton.Height = myButton.Height + 1
 myButton.Height = myButton.Height - 1

您可以将它放在每个按钮的点击子(“myButton_Click”)中,或实现它 “onClick”事件的自定义Classe。

答案 4 :(得分:0)

使用表单按钮而不是ActiveX按钮,ActiveX控件随机在表单上行为不端

答案 5 :(得分:0)

按钮宏中有选择命令吗?

在我重命名工作表中的一些单元格后,包括切换按钮在其切换功能之后选择的单元格后,缩短了字体大小。我通过确定Range(“...”)来修复此问题。选择包括新的单元格名称,而不是坐标。

答案 6 :(得分:0)

在Excel打开后,屏幕分辨率/设置发生变化时会发生这种情况。

例如:

  1. 打开一个上面有按钮的工作簿
  2. 从具有不同屏幕尺寸的计算机使用远程桌面登录
  3. 点击按钮=>按钮大小将改变
  4. 我找到的唯一解决方案是关闭Excel并使用新的屏幕设置重新打开它。必须关闭所有Excel实例,包括必须杀死没有接口的其他进程执行的任何不可见实例。

答案 7 :(得分:0)

旧问题,但似乎仍然是我们这些卡在Excel 2007上的问题。在ActiveX Listbox对象上遇到相同的问题,并会在每次重新计算时扩展其大小。 LinkCells属性正在寻找其值的动态(偏移)范围。重组以便它正在寻找正常范围来解决我的问题。

答案 8 :(得分:0)

我使用Excel 2013时遇到了这个问题。一切都工作正常很长时间,突然间,当我点击按钮(ActiveX)时,它变大了,同时字体也变小了。

不保存文件,我重新启动计算机并再次打开相同的Excel文件,一切都很好。

答案 9 :(得分:0)

我打印后调整大小并更改缩放重新绘制屏幕并修复它

ActiveWindow.Zoom = 100
ActiveWindow.Zoom = 75

答案 10 :(得分:0)

在Excel 2016中发现了相同的问题-能够通过更改控制按钮的高度,将其改回并在工作表上选择一个单元格来进行纠正。只是调整大小无法始终如一地工作。下面的命令按钮示例(cmdBALSCHED)

Public Sub cmdBALSCHED_Click()

Sheet3.cmdBALSCHED.Height = 21
Sheet3.cmdBALSCHED.Height = 20
Sheet3.Range("D4").Select

这会将高度重置为20,将按钮字体重置为找到的

答案 11 :(得分:0)

我在使用ActiveX按钮时遇到了同样的问题,并且在Excel中调整大小和移动时旋转。这是在多个不同PC的笔记本电脑和屏幕上使用的共享电子表格。由于它是共享的,所以我不能使用宏来自动重新定位代码并调整其大小。

最后,在寻找解决方案并尝试了所有可能的按钮设置之后。我发现对按钮进行分组可以立即解决问题。控件,按钮,微调器都保持在原位。我已经测试了一个星期,没有问题。只需选择控件,右键单击并分组-就像魔术一样。

答案 12 :(得分:0)

经过一番沮丧的摆弄之后,以下代码帮助我解决了这个Excel / VBA错误。  需要注意的两个关键事项:  

  • 尽管其他人建议先更改大小,然后立即将其更改回来,但请注意,此代码避免在一次切换状态更改时多次更改。如果在一个事件状态更改期间该值两次更改(特别是如果第二个值与初始值相同),则可能永远不会将替代宽度和高度属性应用于控件,这不会将控件的宽度和高度重置为必须防止宽度和高度值减小。
  • 我对宽度和高度使用了硬编码的值。这不是理想的方法,但是我发现这是防止控件在多次单击后缩小的唯一方法。
  •   

 
Private Sub ToggleButton1_Click()
   'Note: initial height is 133.8 and initial width was 41.4

    If ToggleButton1.Value = True Then
        '  [Code that I want to run when user clicks control and toggle state is true (not related to this issue)]
        'When toggle value is true, simply change the width and height values to a specific value other than their initial values. 

        ToggleButton1.Height = 40.4
        ToggleButton1.Width = 132.8
Else
        '  [Code that I want to run when user clicks control and toggle state false (not related to this issue)]
        'When toggle value is false adjust to an alternate width and height values. 
'These can be the same as the initial values, as long as they are in a separate conditional statement. 
         ToggleButton1.Height = 41.4
         ToggleButton1.Width = 133.8
    End If
End Sub


对于不进行切换的控件,您可以使用迭代器变量或其他方法来确保width和height属性在两组相似的值之间交替,这将产生类似于切换状态变化的效果我在这种情况下使用的。