Clever-Excel-Forum

Normale Version: [Excel mVBA] Prüffunktion mit 2 Zellen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi Profis,

ich bin dabei gerade ein Exceltapete zu stricken. Dabei wollte ich, dass sich gewisse Felder (in denen Text enthalten sind) rot markieren, wenn gewisse Zustände gegeben sind. 
Sozusagen als eine Art Plausiprüfung.
(Zellen sind hier nur Beispiele für eine seperate Mappe, in der ich das Makro probiere, bevor ich es in die eigentliche Excel einbaue)

Ich habe also drei Zellen:
strTarget1 = A1 als Eingabefeld, ist normalerweise leer ("")
strTarget2 =A2 als Eingabefeld, ist normalerweise leer ("")
strText = D1 als Beschrift welche hervorgehoben werden soll

Ziel:
Wenn strTarget1 nicht leer ist, muss strTarget2 dem Inhalt von strTarget1 entsprechen, ansonsten wird strText rot gefärbt.

Ich habe die Funktion mir zusammengewurstelt, bin aber mit der Darstellung des Makros nicht zufrieden, dass muss doch einfacher gehen oder?
Ich bin noch ziemlich neu im Umgang mit VBA und mach glaub ich vieles noch zu umständlich, wäre super wenn ich hier von euch paar Tipps bekommen könnte :)


Code:
Funktionierendes Makro:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim strTarget1 As Range
    Dim strTarget2 As Range
    Dim strText As Range
    
    
    Set strTarget1 = Range("A1")
    Set strTarget2 = Range("A2")
    Set strText = Range("D1")
'Wenn A1 und A2 leer dann D1 in Schwarz
If strTarget1.Value = "" And strTarget2.Value = "" Then
    strText.Select
    With Selection.Font
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 4.99893185216834E-02
    End With
End If

'Wenn A1 NICHT leer und A2 leer dann D1 in Rot
If Not strTarget1.Value = "" And strTarget2.Value = "" Then
    strText.Select
    With Selection.Font
        .Color = -16776961
       .TintAndShade = 0
   End With
End If


'Wenn A1 NICHT leer und A2 = A1 dann D1 in Schwarz
If Not strTarget1.Value = "" And strTarget2.Value = strTarget1 Then
   
    strText.Select
    With Selection.Font
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 4.99893185216834E-02
    End With
   End If
  
'Wenn A1 NICHT leer und A2 NICHT gleich A1 dann D1 in rot
If Not strTarget1.Value = "" And Not strTarget2.Value = strTarget1 Then
strText.Select
With Selection.Font
     .Color = -16776961
     .TintAndShade = 0
    End With
End If
End Sub


Erwartete "Verkürzung" der Funktion:
Code:
Private Sub Worksheet_vergleich(ByVal Target As Range)
Dim strTarget1 As Range
Dim strTarget2 As Range
Dim strText As Range

Set strTarget1 = Range("A1")
Set strTarget2 = Range("A2")
Set strText = Range("D1")

If Not strTarget1.Value = "" And strTarget2.Value <> strTarget1 Then

Text.Select
With Selection.Font
    .Color = -16776961
    .TintAndShade = 0
    End With
Else
Text.Select
With Selection.Font
    .ThemeColor = xlThemeColorLight1
    .TintAndShade = 4.99893185216834E-02
    End With
End If
End Sub


Würde mich auf antworten freuen!
Lg euer Skibi
Hi Skibi,

nur ein kleiner Hinweis: zur Darstellung eines Makros ist der Codetag (5. Schalter von rechts) besser als der Zitatbutton (3. Schalter von rechts) geeignet. Hier werden für längere Codes Scrollbalken integriert.
Grundsatzfrage: Wozu VBA, warum nicht einfach eine simple bedingte Formatierung?
Code:
=UND(A1<>"";A1<>A2)
Was versprichst du dir von dem Mehraufwand?
Erwischt  Angel   Ich versprech mir davon nicht, außer das ich irgendwie ans Ziel komme :D


Ich muss gestehen ich hab mich bisher mit bedingten formatierungen sehr wenig beschäftigt. Daher hab ich das nicht auf anhieb hinbekommen. Und da ich grad eh wie ein wilder am tipseln im VBA war, dachte mir...mach ichs halt da.

Dein Code macht natürlich mehr Sinn und ist einfacher umzusetzen.

Dankeschön :)
Zitat: ich hab mich bisher mit bedingten formatierungen sehr wenig beschäftigt
Ui, schwerer Fehler :24:

Solltest du umgehend nachholen, wenn man nämlich einmal das Grundprinzip verstanden hat, erleichtert es einem vieles.
Hallöchen,

bedenke aber auch die Nachteile bezüglich der Performance einer bF bei großen Datenbereichen Sad