Проблема с программным изменением размера ListBox в VBA - PullRequest
1 голос
/ 10 апреля 2020

У меня странная проблема, и я не знаю, что там происходит. У меня есть ListBox в моей пользовательской форме, которая заполняется элементами из листа. Нет нескольких столбцов. Размер этого ListBox вместе с UserForm должен изменяться автоматически в зависимости от количества элементов в ListBox.

Проблема в том, что ListBox изменяет размеры неправильно, когда я активирую свою UserForm. Размер пользовательской формы изменяется. Однако, если я устанавливаю точку останова непосредственно перед изменением размера, а затем возобновляю активацию с помощью F5 или F8, все работает как задумано. Вот почему я очень смущен тем, что там происходит. Я делал это уже много раз, и до сих пор все работало нормально.

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

enter image description here

Private Sub UserForm_Activate()
    Dim i As Long   
    Me.ListBox1.Clear
    For i = 2 To shSet.Range(wConst & "2").CurrentRegion.Rows.Count 
        Me.ListBox1.AddItem shSet.Cells(i, wConst).Value
    Next i
    If Me.ListBox1.Height < Me.ListBox1.ListCount * 14 Then
        Me.ListBox1.Height = Me.ListBox1.ListCount * 14
        Me.Height = Me.ListBox1.Height + 40
    End If
End Sub

Вот как это должно выглядеть :

enter image description here

Вот как это выглядит, когда возникает проблема:

enter image description here

Кто-нибудь знает, что вызывает эту проблему? Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Попробуйте перефразировать код. Например,

Dim Hight As Single

Hight = (i - 2) * 14 + 40
If Me.Height <> Hight Then
    With Mw.ListBox1
        If .Height <> (Hight - 40) Then .Height = Hight - 40
    End With
    .Height = Hight
End If

Возможно, VBA не нравится, когда ListBox в этот момент больше, чем форма. Попробуйте сначала установить его размер. - Такого рода вещи.

1 голос
/ 10 апреля 2020

Сначала увеличьте вашу пользовательскую форму, а затем список

If Me.ListBox1.Height < Me.ListBox1.ListCount * 14 Then
    Me.Height = Me.ListBox1.Height * 14 + 40
    Me.ListBox1.Height = Me.Height - 40

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