Невозможно изменить свойство Visible в метке пользовательской формы VBA

У меня есть форма Excel с именем UserForm1 с меткой со следующими свойствами: Label6 properties

Эта метка имеет свойство Visible=False. Я хочу сделать видимой метку, когда пользователь нажимает CommandButton1, для этого я написал следующий код:

Private Sub CommandButton1_Click()
    Me.Label6.Visible = True
    Dim oficina_garsa, file_source, file_solds As String
    Dim invoice_year, invoice_month As Integer
    oficina_garsa = TextBox3.Value
    file_source = TextBox1.Value
    file_solds = TextBox2.Value
    invoice_year = CInt(ComboBox1.Value)
    invoice_month = ComboBox2.ListIndex
    Debug.Print oficina_garsa, file_source, file_solds, invoice_year, invoice_month
    Call MainProcess(oficina_garsa, file_source, file_solds, invoice_year, invoice_month)
End Sub

Но это не работает. Поэтому я написал другой код события, связанный с CommandButton2, для целей тестирования, например:

Private Sub CommandButton2_Click()
    If Me.Label6.Visible = False Then
        Me.Label6.Visible = True
    Else
        Me.Label6.Visible = False
    End If
    Application.Wait Now + TimeValue("00:00:03")
End Sub

И последний код работает нормально, а первый нет! Но в первом коде следующий код после Me.Label6.Visible = True выполняется без сообщения об ошибке.

Я попытался заменить «Я» на «UserForm1», но результат тот же. Почему присвоение свойству Visible значения True работает в событии CommandButton2, а не в событии CommandButton1?


person Trimax    schedule 23.06.2015    source источник
comment
Вы действительно получаете сообщение об ошибке при запуске кода CommandButton1? Если нет, то в этой рутине происходит много всего. Вы абсолютно уверены, что свойство labels visible не сбрасывается в false где-то еще в коде, который вы вызываете, или что пользовательская форма сбрасывается? т.е. внутри вашей процедуры MainProcess.   -  person andshrew    schedule 23.06.2015
comment
Есть ли что-нибудь в коде после Visible = true, что может привести к тому, что метка снова станет невидимой?   -  person DiscipleMichael    schedule 23.06.2015
comment
@andshrew и DiscipleMichael Да, в конце Sub MainProcess отображается значение Visible = False, для завершения которого требуется 3 секунды (отладка проверена), поэтому это время задержки в тесте.   -  person Trimax    schedule 23.06.2015


Ответы (1)


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

После установки видимого аргумента добавьте строку

Me.Repaint

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

person Simon    schedule 14.08.2020