Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[Excel mVBA] Prüffunktion mit 2 Zellen
#1
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
Antworten Top
#2
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.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
[-] Folgende(r) 1 Nutzer sagt Danke an WillWissen für diesen Beitrag:
  • Skibi
Antworten Top
#3
Grundsatzfrage: Wozu VBA, warum nicht einfach eine simple bedingte Formatierung?
Code:
=UND(A1<>"";A1<>A2)
Was versprichst du dir von dem Mehraufwand?
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • Skibi
Antworten Top
#4
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 :)
Antworten Top
#5
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.
Schöne Grüße
Berni
Antworten Top
#6
Hallöchen,

bedenke aber auch die Nachteile bezüglich der Performance einer bF bei großen Datenbereichen Sad
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste