Подтвердить что ты не робот

Кнопка VBA Excel изменяет размер после нажатия на нее (кнопка Command)

Как я могу остановить изменение размера кнопки? Каждый раз, когда я нажимаю кнопку, изменяется либо размер кнопки, либо размер шрифта.

Примечание. Я не могу заблокировать свой лист, так как мой макрос напишет в лист.

Автозагрузка отключена. Я запускаю Excel 2007 в Windows 7 (64 бит).

4b9b3361

Ответ 1

Я использую следующие для 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

Ответ 2

Я добавил код в конец onClick таким образом:

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

Кажется, работает.

У меня проблема была несколько иной. Открыв книгу на моем основном дисплее ноутбука, переместите ее на мой большой монитор. Я бы предположил ту же самую причину.

Ответ 3

Увидеть эту проблему в 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

Ответ 4

(Excel 2003)

Мне кажется, что есть два разных вопроса: - изменение размера кнопки ONE при нажатии на нее (хотя не всегда, не знаю почему), и - изменение размера кнопок ALL при открытии книги на дисплее с другим разрешением (которое сохраняется даже при возврате на начальный экран).

Что касается отдельной проблемы с изменением размера: я обнаружил, что достаточно изменить один размер кнопки, чтобы "омолодить" ее. Например:

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

Вы можете поместить его в каждую кнопку, нажав кнопку sub ( "myButton_Click" ), или реализовать ее пользовательский Classe для события onClick.

Ответ 5

Используйте кнопку "Формы", а не ActiveX, элементы управления ActiveX случайно ошибочно себя ведут на листах

Ответ 6

У вас есть команда выбора в макросе кнопок?

Вскоре после того, как я переименовал некоторые ячейки на листе, включая ту, которую выбирает кнопка переключения после ее функции переключения, размер шрифта сократился. Я исправил это, убедившись, что Range ( "..." ). В число включено новое имя ячейки, а не координаты.

Ответ 7

Это происходит, когда разрешение/настройки экрана меняются после открытия Excel.

Например:

  • Откройте книгу, на которой есть кнопка.
  • Вход с удаленного рабочего стола с компьютера с различным размером экрана
  • Нажмите кнопку = > размер кнопки изменится

Единственное решение, которое я нашел, - закрыть Excel и снова открыть его с новыми настройками экрана. Все экземпляры Excel должны быть закрыты, в том числе любой невидимый экземпляр, исполняемый другими процессами без интерфейса, должен быть убит.

Ответ 8

Старый вопрос, но все же кажется проблемой для тех из нас, кто застрял в Excel 2007. Имел такую ​​же проблему в ActiveX Listbox Object и расширил свой размер при каждом пересчете. Свойство LinkCells искало динамический диапазон (смещение) для его значений. Реструктуризация, так что она искала нормальный диапазон, исправила мою проблему.

Ответ 9

У меня возникла эта проблема с использованием Excel 2013. Все для хорошей работы в течение длительного времени и внезапно, когда я нажал на кнопку (ActiveX), она стала больше, а шрифт стал меньше в то же время.

Без сохранения файла я перезапустил свой компьютер и снова открыл тот же файл Excel, и все будет хорошо.

Ответ 10

Мое изменение размера после печати и изменение масштаба изменило изображение и зафиксировало его

ActiveWindow.Zoom = 100
ActiveWindow.Zoom = 75

Ответ 11

Нашел такую же проблему с Excel 2016 - удалось исправить, изменив высоту кнопки управления, вернув ее обратно, затем выбрав ячейку на листе. Просто изменение размера не работает последовательно. Пример ниже для командной кнопки (cmdBALSCHED)

Public Sub cmdBALSCHED_Click()

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

Это вернет высоту обратно к 20, а шрифт кнопки вернется к исходному.

Ответ 12

У меня возникла та же проблема с кнопками и вращениями ActiveX в Excel при изменении размера и перемещении. Это была общая электронная таблица, используемая на нескольких разных ноутбуках и экранах ПК. Поскольку это было общим, я не мог использовать макросы для автоматического изменения положения и изменения размера в коде.

В конце концов, после поиска решения и пробуя всевозможные настройки кнопок. Я обнаружил, что группировка кнопок сразу же решила проблему. Элементы управления, кнопки, вращатели остаются на месте. Я проверил это в течение недели и никаких проблем. Просто выберите элементы управления, щелкните правой кнопкой мыши и сгруппируйте - работает как по волшебству.

Ответ 13

После некоторого разочарования следующий код помог мне обойти эту ошибку 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


Для элемента управления, который не переключается, вы можете использовать переменную итератора или какой-либо другой метод, чтобы гарантировать, что свойства ширины и высоты чередуются между двумя одинаковыми наборами значений, что приведет к эффекту, аналогичному изменениям состояния переключения, которые я использовал в этом случае.