Проблема в пользовательских формах VBA - полностью изменено разрешение - PullRequest
0 голосов
/ 16 октября 2018

Я создал файл Excel с несколькими пользовательскими формами в VBA, которые содержат кнопки (элементы управления формой).Обычно я работаю с док-станцией, чтобы подключить свой ноутбук к большому экрану (в моем офисе).иногда я открываю файл без док-станции (только ноутбук).Сегодня я открыл файл и обнаружил, что разрешение полностью изменилось, пользовательские формы стали такими большими, и во всех кнопках текст внутри обернут вправо.Пожалуйста, обратитесь в службу поддержки, чтобы узнать, как я могу исправить проблему?

спасибо

enter image description here

1 Ответ

0 голосов
/ 17 октября 2018

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

Существует 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...