Не може да се промени свойството Visible в Label на VBA UserForm

Имам формуляр на 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 работи цял без съобщение за грешка.

Опитах да заменя „Аз“ с „Потребителска форма1“, но резултатът е същият. Защо присвояването на свойството 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 Да, има Visible=False в края на Sub MainProcess отнема 3 секунди, за да приключи (проверено отстраняване на грешки), поради което е времето на забавяне в теста.   -  person Trimax    schedule 23.06.2015


Отговори (1)


Знам, че тази тема е доста стара, но тъй като попаднах на нея със същия проблем, реших да публикувам корекцията.

След като зададете видимия аргумент, добавете ред

Me.Repaint

Това ще изобрази отново формуляра и ще актуализира видимостта на елемента. Мисля, че командата Repaint е специфична за потребителски формуляри, така че не съм сигурен дали това ще работи в други ситуации, в които елементите не се рендират точно.

person Simon    schedule 14.08.2020