VBA не может изменить свойство ListBox Height - PullRequest
0 голосов
/ 29 марта 2020

У меня проблема с кодом ниже. Когда я запускаю с помощью отладки (нажимая F8 ), высота списка изменяется в соответствии с кодом. Но когда я запускаю код, используя F5 , высота устанавливается на 1 высоту члена списка. В конце я также попытался использовать .IntegralHeight=True, поэтому это похоже на комментарий в коде.

Кто-нибудь сталкивался с этим раньше? Ps .: Я запустил код с помощью Variable Inspection, и пока не закончится подпрограмма Opções_povoar, свойство .Height будет равно 200

См. Рисунки:

UserForm Свойства

enter image description here

enter image description here

Private Sub UserForm_Initialize()

Call Opções_povoar

End Sub

Private Sub Opções_povoar()

Dim arr As Variant, i As Long
arr = ActiveSheet.UsedRange
With UserForm1.ListBox1
    .List = arr
    Debug.Print .ListCount
    .ListIndex = -1
    .ListStyle = fmListStylePlain
    .Font.Size = 20
    .Top = 50
    .IntegralHeight = False
    .Height = 200 '.Font.Size * .ListCount
    '.IntegralHeight = True


    Debug.Print .Height
    '****ajustar automaticamente a altura da lista

End With


End Sub

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Вы должны изменить

With UserForm1.ListBox1

на

With Me.ListBox1

Me - ключевое слово, ссылающееся на экземпляр объекта пользовательской формы, внутри которого находится код, на

, в то время как Userform1 указывает на класс

, поэтому часть кода должна быть:

With Me.ListBox1
    .List = arr
    Debug.Print .ListCount
    .ListIndex = -1
    .ListStyle = fmListStylePlain
    .Font.Size = 20
    .Top = 50
    .IntegralHeight = False

    Debug.Print .Height ' <--- this prints 39,55

    .Height = 400

    Debug.Print .Height ' <--- this prints 400

End With
0 голосов
/ 29 марта 2020

Возможно, вам придется дать пользователю время, чтобы догнать код.

Private Sub UserForm_Initialize()

    Call Opções_povoar

End Sub

Private Sub Opções_povoar()

    Dim arr As Variant, i As Long
    arr = ActiveSheet.UsedRange
    With UserForm1.ListBox1
        .List = arr
        Debug.Print .ListCount
        .ListIndex = -1
        .ListStyle = fmListStylePlain
        .Font.Size = 20
        .Top = 50
        .IntegralHeight = False
        '--------------------------------
        Application.Wait (Now + TimeValue("0:00:01"))
        '----------------------------------
        .Height = 200                            '.Font.Size * .ListCount
        '.IntegralHeight = True


        Debug.Print .Height
        '****ajustar automaticamente a altura da lista

    End With


End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...