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