2016-05-25 5 views
3

Я пытаюсь написать макрос Excel, чтобы автоматически изменить цвет в текстовом поле на основе входного значения из ячейки на листе. Код, который я в настоящее время является:Excel Macro Change TextBox Color

Private Sub TextBox1_Change() 

'Declare Variables 
Dim cell As Range 
Dim color As String 

'Initialize Variables 
Set cell = Range("A1") 
color = cell.Value 

'Set TextBox Color 
If color = "" Then TextBox1.BackColor = RGB(255, 255, 255) 'white 
If color = "1" Then TextBox1.BackColor = RGB(255, 0, 0) 'red 
If color = "2" Then TextBox1.BackColor = RGB(0, 255, 0) 'green 
If color = "3" Then TextBox1.BackColor = RGB(0, 0, 255) 'blue 

End Sub 

Это должно считывать значение из ячейки A1, а затем изменить цвет текстового поля на основе этого значения. Мой код успешно меняет цвет текстового поля, но он не обновляется до тех пор, пока я не нажму в текстовое поле и не наберу что-нибудь. Есть ли способ сделать обновление цвета, как только значение будет введено в ячейку A1?

Если было бы проще сделать это с каким-то другим объектом, я не привязан к текстовому полю, но не могу просто использовать ячейку.

+0

'не привязаны к textbox' то условное форматирование для ячейки? – findwindow

+0

Это было бы бесконечно легче. К сожалению, ячейка является одной из немногих вещей, которые я не могу использовать. Это должен быть какой-то объект excel (т. Е. Textbox, lable ect.). – drylkuch

+0

Хмм, может быть, событие 'worksheet_change'? – findwindow

ответ

2

Как @findwindow предложил, вы можете использовать Worksheet_Change событие вместо события Текст ящика:

Private Sub Worksheet_Change(ByVal Target As Range) 
    'Declare Variables 
    Dim cell As Range 
    Dim color As String 

    If Target.Address = Range("A1").Address Then 
     'Initialize Variables 
     Set cell = Range("A1") 
     color = cell.Value 

     'Set TextBox Color 
     If color = "" Then TextBox1.BackColor = RGB(255, 255, 255) 'white 
     If color = "1" Then TextBox1.BackColor = RGB(255, 0, 0) 'red 
     If color = "2" Then TextBox1.BackColor = RGB(0, 255, 0) 'green 
     If color = "3" Then TextBox1.BackColor = RGB(0, 0, 255) 'blue 
    End If 
End Sub 
+0

Возможно, вы писали это, когда я сделал свой комментарий ^^ – findwindow

+0

@findwindow Что я и был, это довольно естественная идея для любого опытного программиста VBA, но вы сначала озвучили его. –

+0

Ну, комментирование быстрее, чем отвечать = P – findwindow