2012-03-06 930 views
11

如何停止按钮的大小调整?每次点击按钮时,按钮的大小或字体大小都会改变。VBA Excel按钮在点击后调整大小(命令按钮)

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

Autosize已关闭。我在Windows 7(64位)上运行Excel 2007。

+0

为什么你不能锁定表单?您应该可以使用VBA执行此任务。 Sheet.Protect/Sheet.Unprotect(有一个可选的密码变量,你可以通过) – Gaffi 2012-03-06 19:56:45

+1

问题没有通过锁定解决,因为原因似乎是Windows不擅长。请参阅以下类似问题的答案:http://stackoverflow.com/q/1573349/1047635 – 2012-07-03 09:32:44

回答

0

使用形式按钮,而不是一个ActiveX一个,ActiveX控件随机行为不端自己对片

+0

他使用的是ActiveX按钮吗?我以前曾经看到过这个问题(最终将所有内容都移到了新表中,我相信),而无需使用ActiveX按钮。 – Gaffi 2012-03-06 19:58:14

6

我用于列表框以下。按钮原理相同;酌情适应。

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 
0

你必须在按键宏选择命令?

不久之后,我重命名工作表中的某些单元格,其中包括切换按钮在其切换功能之后选择的单元格,缩小了字体大小。我通过确保范围(“...”)来解决这个问题。选择包括新的单元名称,而不是坐标。

0

在Excel打开后屏幕分辨率/设置发生变化时发生。

例如:

  1. 打开具有来自具有不同屏幕尺寸的计算机与远程桌面上它
  2. 登录按钮的工作簿
  3. 单击按钮=>按钮的大小将更改

我发现的唯一解决方法是关闭Excel并用新的屏幕设置重新打开它。必须关闭所有Excel实例,包括其他进程执行的不带接口的任何不可见实例必须被终止。

+0

就我而言,虽然它至少部分与使用不同分辨率的屏幕有关,但此问题不需要在Excel打开后更改分辨率。在Windows 10上的Excel 2007中,当我开始使用笔记本电脑使用外部显示器时,此问题确实开始,但打开Excel后,我从不切换显示器或更改分辨率。插上外部监视器(并且Windows设置为“仅限外部屏幕”,因此只使用外部监视器),打开PC,打开Excel,允许宏,单击任何按钮,缩小尺寸和字体。 – SantiBailors 2017-07-16 10:49:08

0

老问题,但对于我们这些坚持使用Excel 2007的用户来说似乎仍然是个问题。ActiveX ListBox对象有相同的问题,并且在每次重新计算时都会扩大其大小。 LinkCells属性正在为其值设置一个动态(偏移量)范围。重组,以便它正在寻找一个正常的范围解决了我的问题。

3

我添加了一些代码到onClick从而末尾:

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

似乎工作。

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

+0

这是一个很好的想法。我的问题是,随着点击问题的累积,我必须设置'Font.Size = 200'来查看文本。我对微软印象不深,因为这个问题似乎已经存在好几年了。 – Holene 2015-11-24 09:39:35

+0

如果我使用ActiveX控件,代码就可以工作。相反,如果我使用一个形状(例如,一个圆形,一个正方形)并为其分配一个宏,那么您的代码将不起作用。我用形状名称替换CommandButton1(例如,rectangle2),但它不起作用。你能帮我吗?谢谢。 – Marco 2018-01-27 15:57:08

0

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

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

0

矿印刷后的调整和改变变焦重划屏幕,并固定它

ActiveWindow.Zoom = 100 
ActiveWindow.Zoom = 75 
0

看这个问题在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 
+1

看起来你忘了在你的例子中格式化所有的代码。从Sub Shared_ObjectReset()开始,以EndSub结尾。 – nicorellius 2016-07-27 16:47:36

0

(Excel 2003中)

在我看来,有两个不同的问题: - 调整大小就可以了,当点击一个按钮的文字(尽管并非总是如此,不知道为什么),和 - 在不同分辨率的显示器上打开工作簿时(即使返回初始显示时仍然存在),更改所有按钮的大小。

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

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

你可以把它放在每个按钮的点击子(“myButton_Click”),或者实现它 为“点击”事件自定义CLASSE。