planetz Ответов: 3

Как свернуть регионы в пользовательской форме excel


Всем Привет,

У меня есть пользовательская форма excel, которая принимает пользовательский ввод.
Теперь при загрузке формы есть элементы управления, которые скрыты и становятся видимыми только в том случае, если пользователь хочет добавить еще несколько полей. Это делается нажатием кнопки.

Есть ли способ, чтобы при загрузке область, содержащая скрытые элементы управления, сворачивалась, а когда элементы управления становятся видимыми, область расширялась?

Потому что, если регион не рухнет, это будет выглядеть так, как будто кто-то по ошибке оставил пустое место. Область находится где-то в средней части userform.

Любая помощь будет оценена по достоинству.

Что я уже пробовал:

Я попытался настроить полосы прокрутки, но это не сработало. Пустое место никуда не уходит.

3 Ответов

Рейтинг:
25

Maciej Los

UserForm не предоставляет такой функциональности...

Вы можете достичь этого с помощью:
1) добавление элемента управления Mulitpage
Допустим, многостраничный элемент управления имеет 2 страницы. Вы хотите отобразить только первый, а второй-только в том случае, если пользователь нажмет на кнопку.
Установите его Многостраничность Style собственность на fmTabStyleNone чтобы скрыть страницы.
Вы можете выбрать текущую активную страницу, установив Multipage.Value собственность. 0 на первой странице, 1 на секунду, и так далее. Например:

Private Sub CmdAdditionalData_Click()
    Me.MultiPage1.Value = 1
End Sub

Private Sub CmdBack_Click()
    Me.MultiPage1.Value = 0
End Sub


2) Изменение размера формы пользователя
Допустим, у вас есть 2 набора элементов управления: обязательный и дополнительный.
Обязательные элементы управления должны располагаться рядом с левой стороной UserForm Дополнительные элементы управления должны располагаться справа от обязательных элементов управления или ниже их, так как вы можете изменить размер элемента управления, только увеличив его высоту или ширину. Расставьте их по местам Frameс.
Начальный размер UserForm должны быть равны размеру Frame который содержит обязательный контроль.


Попробуй!
Удачи вам!


planetz

Большое спасибо Мацей...твоя точка зрения номер два была хорошим намеком ... помогла....

Maciej Los

Всегда пожалуйста. Вы можете принять мой ответ как решение (зеленая кнопка). Твое Здоровье, Мацей

Рейтинг:
1

Pat O'Brien

Вот несколько более элегантный способ сделать это....

Для тех элементов управления, которые вы хотите скрыть или сделать видимыми, поместите "скрыть" в свойство "тег" элемента управления.

Для тех элементов управления, которые вы хотите переместить вверх или вниз, поместите "переместить" в свойство тега.

Это предполагает, что форма начинается коротко со скрытыми элементами управления, а затем нажимается командная кнопка "cbShowMore". При нажатии надпись на кнопке переключается в положение "скрыть" или обратно в положение " показать"

Private Sub cbShowMore_Click()

Dim ufCtrl As Control
Dim iMoveIt As Integer

If cbShowMore.Caption = "Show" Then
    iMoveIt = 30
    cbShowMore.Caption = "Hide"
Else
    iMoveIt = -30
    cbShowMore.Caption = "Show"
End If

'change the height of the user form
UFTest.Height = UFTest.Height + iMoveIt

For Each ufCtrl In UFTest.Controls
    Select Case UCase(ufCtrl.Tag)
        Case "HIDE"
            ufCtrl.Visible = Not ufCtrl.Visible
        Case "MOVE"
            ufCtrl.Top = ufCtrl.Top + iMoveIt
        Case Else
            ' do nothing
    End Select
        
Next

End Sub


Рейтинг:
0

Pat O'Brien

Или другой более простой метод (хотя его можно считать методом "грубой силы") заключается в регулировке высоты пользовательской формы и регулировке положения на пользовательской форме всех элементов или элементов управления, которые находятся ниже скрытого или сделанного видимым раздела....


Private Sub CommandButton1_Click()
    ' reverse visibility of all form elements to hide or un-hide
    Label2.Visible = Not Label2.Visible
    Label1.Visible = Not Label1.Visible
    
    'adjust the height of the user form and
    'adjust the position on the form for all other elements
    If Label2.Visible Then
        UFTest.Height = 180  ' large size
        Label3.Top = 120     ' lower on the form
        Label4.Top = 140     ' lower on the form
        'etc
    Else
        UFTest.Height = 140 'short size
        Label3.Top = 90     'higher on the form
        Label4.Top = 110
        'etc
    End If
End Sub



Я уверен, что вы могли бы сделать этот код более гибким или эффективным, добавив или вычитая заранее определенную позицию для всех элементов управления в форме, а не жестко кодируя позицию, но вы поняли идею.