Эта проблема вызвана тем, что файл открывается при изменении разрешения вашего собственного экрана (и возможно , только если это также изменяет соотношение сторон) - наиболее распространенная причина для подключения или отключения ноутбука.на / с внешнего экрана (в данном случае через док-станцию)
Существует 2 формы, которые эта проблема принимает: либо кнопка остается того же размера, но содержимое (текст, изображения и т. д.)масштабируется вверх / вниз, будучи закрепленным в верхнем левом углу (что здесь и произошло), или содержимое остается того же размера, но сама кнопка становится больше / меньше, пока она либо не покрывает весь лист, либо становится слишком маленькой для щелчка.
По моему опыту, единственный способ исправить кнопки - это настроить их и заставить Excel перерисовать фигуру вместо того, чтобы «помнить», как она должна выглядеть.Вы можете сделать это вручную, , но я постараюсь отследить некоторый код для вас, чтобы "сбросить" кнопки. вот код, который поможет вам.
(Для пользовательской формы вы можете просто сможете позвонить Me.Repaint
, чтобы вызвать перерисовку, не беспокоясь об изменении размера - но я не проверял это, так как могуникогда не возникнет эта проблема по требованию> _ <) </p>
Исправление кнопки пользовательской формы
Sub FixButtonFormat(ByRef Button As Control)
Dim Top As Double, Left As Double, Width As Double, Height As Double, FontName As String, FontSize As Double
Top = Button.Top
Left = Button.Left
Width = Button.Width
Height = Button.Height
FontName = Button.Object.Font.Name
FontSize = Button.Object.Font.Size
'Scale Button up slightly
Button.Top = Top - 1
Button.Left = Left + 1
Button.Width = Width - 2
Button.Height = Height + 2
Button.Object.Font.Size = FontSize + 1
DoEvents
UserForm1.Repaint
DoEvents
'Reset button to original size
Button.Top = Top
Button.Left = Left
Button.Width = Width
Button.Height = Height
Button.Object.Font.Name = FontName
Button.Object.Font.Size = FontSize
End Sub
Исправление кнопки рабочего листа
Sub FixButtonFormat(ByRef Button As Shape)
If Button.Type <> msoFormControl And Button.Type <> msoOLEControlObject Then Exit Sub
Dim Top As Double, Left As Double, Width As Double, Height As Double, FontName As String, FontSize As Double
Dim Screen As Boolean
Screen = Application.ScreenUpdating
Top = Button.Top
Left = Button.Left
Width = Button.Width
Height = Button.Height
If Button.Type = msoFormControl Then 'Form Control
FontName = Button.OLEFormat.Object.Font.Name
FontSize = Button.OLEFormat.Object.Font.Size
ElseIf Button.Type = msoOLEControlObject Then 'ActiveX Control
FontName = Button.DrawingObject.Object.Font.Name
FontSize = Button.DrawingObject.Object.Font.Size
End If
'Scale Button up slightly
Button.Top = Top - 1
Button.Left = Left + 1
Button.Width = Width - 2
Button.Height = Height + 2
If Button.Type = msoFormControl Then 'Form Control
Button.OLEFormat.Object.Font.Size = FontSize + 1
ElseIf Button.Type = msoOLEControlObject Then 'ActiveX Control
Button.DrawingObject.Object.Font.Size = FontSize + 1
End If
If Not Screen Then
Application.ScreenUpdating = True
DoEvents
Application.ScreenUpdating = False
Else
DoEvents
End If
'Reset button to original size
Button.Top = Top
Button.Left = Left
Button.Width = Width
Button.Height = Height
If Button.Type = msoFormControl Then 'Form Control
Button.OLEFormat.Object.Font.Name = FontName
Button.OLEFormat.Object.Font.Size = FontSize
ElseIf Button.Type = msoOLEControlObject Then 'ActiveX Control
Button.DrawingObject.Object.Font.Size = FontSize
Button.DrawingObject.Object.Font.Name = FontName
End If
End Sub