2012-03-06 928 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。