2016-09-09 3 views
2

Я хочу, чтобы изменить цвет шрифта из MsgBoxVBA Изменить цвет текста в MsgBox

Чтобы понять, что я хочу, я выбрал этот Exemple:

Dim a As Integer 
Dim b As Integer 
Dim c As Integer 
Dim results As String 


a = InputBox("Enter your first value:") 
b = InputBox("Enter your second value:") 
c = InputBox("Enter your third value:") 

d = a - b + c 

If d = 0 Then 
    results = "Correct" 
    MsgBox "Your results is: " & results 
Else 
    results = "Incorrect" 
    MsgBox " Your Results is: " & results 
End If 

«The "Correct" текст я хочу быть с зеленым цвет, когда в MsgBox появляться

«The "Incorrect" текста я хочу быть с красным цветом, когда появляться, в MsgBox

Я надеюсь, что я попросил.

+3

Вы не можете настроить окно сообщений таким образом. Вам нужно будет создать «настраиваемое окно сообщений» с использованием пользовательской формы. Затем вы можете делать то, что хотите (включая разные цвета шрифта и цвета фона). – Ralph

+0

Я понимаю. Благодаря ! – BOB

ответ

2

Как предлагает Ральф, было бы лучше отобразить ваше сообщение в UserForm, где у вас будет легкий контроль над текстовыми характеристиками.

Тем не менее, можно изменить цвет текста MessageBox, используя API цвета системы. Поскольку MessageBox - это Окно, вы можете изменить его цветовые параметры (не только текст, но и другие).

Вы хотите, чтобы вы сразу же сбросили исходные значения, иначе все ваши окна будут отображаться в измененных цветах.

Ниже код будет автоматически определять 32-разрядные и 64-разрядные системы и должны работать одинаково хорошо:

Option Explicit 

#If Win64 Then 
    Private Declare PtrSafe Function GetSysColor Lib "user32" _ 
     (ByVal nIndex As Long) As Long 
    Private Declare PtrSafe Function SetSysColors Lib "user32" _ 
     (ByVal nChanges As Long, lpSysColor As Long, lpColorValues As Long) As Long 
#Else 
    Private Declare Function GetSysColor Lib "user32" _ 
     (ByVal nIndex As Long) As Long 
    Private Declare Function SetSysColors Lib "user32" _ 
     (ByVal nChanges As Long, lpSysColor As Long, lpColorValues As Long) As Long 
#End If 

Private Const COLOR_WINDOWTEXT As Long = 8 
Private Const CHANGE_INDEX As Long = 1 

Public Sub RunMe() 
    Dim defaultColour As Long 

    'Store the default system colour 
    defaultColour = GetSysColor(COLOR_WINDOWTEXT) 

    'Set system colour to red 
    SetSysColors CHANGE_INDEX, COLOR_WINDOWTEXT, vbRed 
    MsgBox "Incorrect", , "Your result is..." 

    'Set system colour to green 
    SetSysColors CHANGE_INDEX, COLOR_WINDOWTEXT, vbGreen 
    MsgBox "Correct", , "Your result is..." 

    'Restore default value 
    SetSysColors CHANGE_INDEX, COLOR_WINDOWTEXT, defaultColour 

End Sub 
+2

* (+ 1) * с моей стороны для показа как это * мог * работа. Тем не менее, я настоятельно рекомендую не использовать это решение, а вместо этого пользовательский «UserForm». Надеюсь, вы не возражаете, что я скорректировал ваш код/​​решение для работы с 32-битными ** и ** 64-битными. Если вы возражаете, не стесняйтесь возвращаться к оригинальному решению и наказывать меня путём голосования некоторых моих сообщений на этом сайте. – Ralph

+1

@ Ральф, спасибо, хорошее редактирование. И да, я бы определенно пошел на пользовательскую форму тоже. Я просто не могу устоять перед этими вопросами «это возможно»! – Ambie

Смежные вопросы