2016-05-25 12 views
3

Ich versuche, ein Excel-Makro zu schreiben, um die Farbe von bei Textfeld automatisch basierend auf einem Eingabewert aus einer Zelle im Blatt zu ändern. Der Code, den ich zur Zeit habe, ist:Excel-Makro Änderung TextBox Farbe

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 

Dies soll einen Wert von Zelle A1 lesen, dann die Farbe der auf diesem Wert basiert Textbox ändern. Mein Code ändert erfolgreich die Farbe des Textfelds, aber es wird nicht aktualisiert, bis ich in das Textfeld klicke und etwas eintippe. Gibt es eine Möglichkeit, die Farbe zu aktualisieren, sobald ein Wert in Zelle A1 eingegeben wird?

Wenn es einfacher wäre, dies mit einem anderen Objekt zu tun, bin ich nicht an ein Textfeld gebunden, kann aber nicht einfach eine Zelle verwenden.

+0

'nicht gebunden an eine textbox' dann die bedingte Formatierung für eine Zelle? – findwindow

+0

Das wäre unendlich einfacher. Leider ist eine Zelle eines der wenigen Dinge, die ich nicht benutzen kann. Es muss eine Art Excel-Objekt sein (zB Textbox, Label ect.). – drylkuch

+0

Hmm vielleicht '' worksheet_change' event? – findwindow

Antwort

2

Als @findwindow vorgeschlagen, könnten Sie die Worksheet_Change Ereignis anstelle des Textfeld-Ereignis verwenden:

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

Sie haben dies wahrscheinlich geschrieben, als ich meinen Kommentar machte ^^ – findwindow

+0

@findwindow Das war ich, es ist eine ziemlich natürliche Idee für jeden erfahrenen VBA-Programmierer - aber Sie haben es zuerst gesprochen. –

+0

Nun, kommentieren ist schneller als antwort = P – findwindow