Кнопка VBA Excel изменяет размер после нажатия на нее (кнопка Command)
Как я могу остановить изменение размера кнопки? Каждый раз, когда я нажимаю кнопку, изменяется либо размер кнопки, либо размер шрифта.
Примечание. Я не могу заблокировать свой лист, так как мой макрос напишет в лист.
Автозагрузка отключена. Я запускаю Excel 2007 в Windows 7 (64 бит).
Ответы
Ответ 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
Для элемента управления, который не переключается, вы можете использовать переменную итератора или какой-либо другой метод, чтобы гарантировать, что свойства ширины и высоты чередуются между двумя одинаковыми наборами значений, что приведет к эффекту, аналогичному изменениям состояния переключения, которые я использовал в этом случае.