VBA не раскрывается на user_form - PullRequest
0 голосов
/ 27 октября 2019

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

Я искал в Google и не смог найти ответ, есть помощь, которую я не могу понять на форуме Microsoftстраниц. https://answers.microsoft.com/en-us/msoffice/forum/all/cant-set-fontbold-property-to-false/a006b96b-d1ec-41a4-8411-f5774941a5a0

https://www.ozgrid.com/forum/forum/help-forums/excel-general/25823-if-bold-then-make-not-bold-if-not-bold-then-make-bold

Private Sub CommandButton3_Click()
'
' showwrong Macro
'
Dim i As Integer
'' reset labels to default - testing direct referencing. 
Me.Controls("Label37").Font.Bold = Not True ' doesnt work
Me.Controls("Label37").Font.Bold = False ' doesnt work

'' reset labels to default
For i = 1 To 36
Me.Controls("Label" & 36 + i).Font.Bold = False ' doesnt work
Me.Controls("Label" & 36 + i).Caption = ""
Me.Controls("Label" & 36 + i).ForeColor = &H80000012
Me.Controls("Label" & 36 + i).BackColor = &H80000002
Next i

Dim lastrow As Integer
lastrow = Sheet1.Range("f16")   ' number of questions in test

''lastrow = Sheet1.Range("b" & Sheet1.Rows.Count).End(xlUp).Row - 6

'' get value from sheet 1 (c7:c42)
For i = 1 To lastrow
Me.Controls("Label" & 36 + i).Caption = Sheet1.Range("c" & 6 + i).Value

'''  EMPHASIZE
If Me.Controls("Label" & 36 + i).Caption = "Wrong" Then
        Me.Controls("Label" & 36 + i).ForeColor = &HFF&
        Me.Controls("Label" & 36 + i).Font.Bold = True
        Me.Controls("Label" & 36 + i).BackColor = &H80000002
    Debug.Print Me.Controls("Label" & 36 + i).Caption; "colour red"

''' DE-EMPHASIZE after output (font to black ok but still bold)     
    Else
        Me.Controls("Label" & 36 + i).ForeColor = &H80000012
        Me.Controls("Label" & 36 + i).Font.Bold = False
        Me.Controls("Label" & 36 + i).BackColor = &H80000002

"Debug.Print Me.Controls("Label" & 36 + i).Font.Bold' (always returns 
True)"

 End If


Next i



End Sub

Я ожидаю, что текст вернется в нормальное состояние.

ps дляцикл i = от 1 до 36 и «метка» и 36 + i не являются ошибками. этикетки от Label37 до Label72

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