Как заставить кнопку сделать видимыми объекты в другой пользовательской форме? - PullRequest
0 голосов

Я хочу создать пользовательскую форму, содержащую несколько меток и текстовых полей, для которых установлено значение visible = false, и что только когда пользователь выбирает другую пользовательскую форму, он отображает нужные мне метки и текстовые поля

ПЕРВАЯ ПОЛЬЗОВАТЕЛЬСКАЯ (Основная)

Private Sub CommandButton1_Click()

If ComboBox1 = "Test1" Then
Test.Show
 --------------------
ElseIf ComboBox1 = "Test2" Then
Test.Show
 --------------------
Else
MsgBox "Select an option"

End If


End Sub

ВТОРОЕ ИСПОЛЬЗОВАНИЕ (Тест)

Содержит label1 и label2, если ComboBox1 из Main = "Test1", я хочу, чтобы label1 был видимым

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

Я, вероятно, сделал бы это со свойством во второй форме.

Форма 1 может выглядеть следующим образом

Private Sub CommandButton1_Click()
    test.textInForm1ComboBox1 = Me.ComboBox1.Text
End Sub

, а форма 2 может выглядеть следующим образом

Public Property Let textInForm1ComboBox1 (boxValue as String)
    Select Case boxValue
        Case "Test 1"
            Me.Label1.Visible = True
        Case "Test 2"
            Me.Label2.Visible = True
        Case Else
           MsgBox "Select an option"
      End select
End Property
0 голосов
/ 01 мая 2019

1-я версия: Когда вы работаете с экземпляром по умолчанию пользовательских форм, ваш код в Main может выглядеть так:

Private Sub CommandButton1_Click()
    If ComboBox1.Value = "Test1" Then
        Test.Label1.Visible = True
        Test.Label2.Visible = False
    End If
    If ComboBox1.Value = "Test2" Then
        Test.Label1.Visible = False
        Test.Label2.Visible = True
    End If
    Test.Show
End Sub


Private Sub UserForm_Initialize()
    Load Test
    ComboBox1.AddItem "Test1"
    ComboBox1.AddItem "Test2"
End Sub

Для использования экземпляра по умолчаниюВозможно, вы захотите взглянуть на следующие ссылки, а также на searach для себя, поскольку у этого есть определенные недостатки

VBA Пользовательские формы, используемые без явного создания экземпляра

Rubberduck: Userform1.show

2-я версия: В улучшенной версии также потребуется код во второй пользовательской форме

Код в Main

Option Explicit
Dim fTest As Test
Private Sub CommandButton1_Click()
    If ComboBox1.Value = "Test1" Then
        fTest.Label1.Visible = True
        fTest.Label2.Visible = False
        fTest.Show
    End If
    If ComboBox1.Value = "Test2" Then
        fTest.Label1.Visible = False
        fTest.Label2.Visible = True
        fTest.Show
    End If
End Sub


Private Sub UserForm_Initialize()
    Set fTest = New Test
    ComboBox1.AddItem "Test1"
    ComboBox1.AddItem "Test2"
End Sub

ИКод в тесте, где вам также нужна кнопка Закрыть, тогда

Option Explicit
Private Sub btnClose_Click()
    Hide
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer _
                                       , CloseMode As Integer)

    ' Prevent the form being unloaded
    If CloseMode = vbFormControlMenu Then Cancel = True
    Hide

End Sub

3-я версия: со свойством может выглядеть так

Код в Main

Option Explicit
Dim fTest As Test
Private Sub CommandButton1_Click()
        fTest.whichLbl = ComboBox1.Value
        fTest.Show
End Sub

Private Sub UserForm_Initialize()
    Set fTest = New Test
    ComboBox1.AddItem "Test1"
    ComboBox1.AddItem "Test2"
End Sub

и код в тесте

Option Explicit
Dim lbl As String
Private Sub btnClose_Click()
    Hide
End Sub

Private Sub UserForm_Activate()
    Select Case lbl
        Case "Test1"
            Label1.Visible = True
            Label2.Visible = False
        Case "Test2"
            Label1.Visible = False
            Label2.Visible = True
        Case Else
            Label1.Visible = False
            Label2.Visible = False
    End Select
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer _
                                       , CloseMode As Integer)

    ' Prevent the form being unloaded
    If CloseMode = vbFormControlMenu Then Cancel = True
    Hide

End Sub

Property Let whichLbl(selLbl As String)
    lbl = selLbl
End Property
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...