Excel 2003 VBA B4 var. Text dann A4 blau nexte

Hallo zusammen,
ich habe ein Problem.
Wenn in Tabelle1, in Zelle B4 ein Text steht soll die Zelle A4 blau eingefärbt und mit weißer Schrift erscheinen.
Bei denm Text handelt es sich um einen beliebigen Text.
Diese Prozedur Zeile für Zeile geprüft werden.

Leider habe ich keine Ahnung wie so etwas erstellt wird.

Vielleicht kann mir ja ein netter Mensch aus diesem Forum weiterhelfen.

Vielen Dank im voraus.

Grüße Mathias

Hallo Mathias.

ich habe ein Problem.
Wenn in Tabelle1, in Zelle B4 ein Text steht soll die Zelle A4
blau eingefärbt und mit weißer Schrift erscheinen.
Bei denm Text handelt es sich um einen beliebigen Text.
Diese Prozedur Zeile für Zeile geprüft werden.

Das könntest Du aber eigentlich auch schon ohne VBA mit der Bedingten Formatierung machen.

Zelle A4 markieren > Menü Format > bedingte Formatierung.

„Zellwert ist“ abwählen > „Formel ist“ auswählen.

Formel eingeben: =B4"" und dann das gewünschte Format festlegen.

VG
Carsten

Hallo Carsten,

danke für deine rasche Antwort.
Dein Lösungsvorschlag ist mir bekannt. Aber die Angelegenheit ist etwas komplizierter.
Es werden immer wieder Zeilen zwischendrin herausgelöscht.
Im Bereich meiner Datei (A4-A100) ruscht dann die bedingte Formatierung immer weiter nach oben. Dies möchte ich durch ein Makro vermeiden.
Die bedingte Formatierung muß immer für den vollen Bereich vorhanden sein, egal wieviele Zeilen zwischendrin herausgelöscht werden.

Viele Grüße
Mathias

Hallo Mathias

Die bedingte Formatierung muß immer für den vollen Bereich
vorhanden sein, egal wieviele Zeilen zwischendrin
herausgelöscht werden.

Ah ja.

Versuch’ bitte den folgenden Code im Change-Ereignis des entsprechenden Tabellenblattes:

Private Sub Worksheet\_Change(ByVal Target As Range)
 Application.EnableEvents = False
 Select Case Target.Column
 Case 2 'Spalte B
 Select Case Target.Row
 Case 4 To 100 'Zeile 4 bis 100
 If IsEmpty(Target) = False Then
 Range("$A$" & CStr(Target.Row)).Interior.Color = vbBlue
 Range("$A$" & CStr(Target.Row)).Font.Color = vbWhite
 End If
 If IsEmpty(Target) = True Then
 Range("$A$" & CStr(Target.Row)).Interior.ColorIndex = xlNone
 Range("$A$" & CStr(Target.Row)).Font.ColorIndex = xlAutomatic
 End If
 End Select
 End Select
 Application.EnableEvents = True
End Sub

Ist es das, was Du gesucht hast?

VG
Carsten

Hallo Mathias.

Ich glaube, der hier könnte noch einen Tick besser sein.

Private Sub Worksheet\_Change(ByVal Target As Range)
 Application.EnableEvents = False
 Select Case Target.Column
 Case 2 'Spalte B
 Select Case Target.Row
 Case 4 To 100 'Zeile 4 bis 100
 For i = Target.Row To Target.Row + Target.Rows.Count - 1
 If IsEmpty(Cells(i, Target.Column)) = False Then
 Range("$A$" & CStr(i)).Interior.Color = vbBlue
 Range("$A$" & CStr(i)).Font.Color = vbWhite
 End If
 If IsEmpty(Cells(i, Target.Column)) = True Then
 Range("$A$" & CStr(i)).Interior.ColorIndex = xlNone
 Range("$A$" & CStr(i)).Font.ColorIndex = xlAutomatic
 End If
 Next
 End Select
 End Select
 Application.EnableEvents = True
End Sub

VG
Carsten

Hallo Carsten,

habe eben deinen letzten Code ausprobiert. (Bin leider nicht vorher dazu gekommen).

Dein Makro funktioniert super, so habe ich mir dies vorgestellt.

Wenn man jetzt die Arbeitsmappe schließt, nach dem man Zeilen gelöscht hat, und dann wieder öffnet ist die bedingte Formatierung für den angegebenen Bereich wieder vorhanden.
Die bedingte Formatierung regeneriert sich wieder von alleine :smile:)).

Dir sage ich vielen, vielen Dank für deine Mühe und Hilfe.
Ich bin begeistert. Du hast mir sehr geholfen und ich habe wieder etwas dazu gelernt.

Viele Grüße
Mathias

Hallo Mathias

Dir sage ich vielen, vielen Dank für deine Mühe und Hilfe.
Ich bin begeistert. Du hast mir sehr geholfen und ich habe
wieder etwas dazu gelernt.

Vielen Dank.

Die Sache hat aber auch einen Haken: Wenn das Makro ausgeführt wurde, kannst Du nicht mehr auf rückgängig klicken. Das heißt, wenn Du 'mal eine falsche Zeile gelöscht hast, dann ist die auch gelöscht. Habe leider keine Ahnung, ob man das irgendwie umgehen kann.

VG
Carsten

OT Zeilenlöschung durch Makro rückgängig machen

Die Sache hat aber auch einen Haken: Wenn das Makro ausgeführt
wurde, kannst Du nicht mehr auf rückgängig klicken. Das heißt,
wenn Du 'mal eine falsche Zeile gelöscht hast, dann ist die
auch gelöscht. Habe leider keine Ahnung, ob man das irgendwie
umgehen kann.

Hallo Carsten,

das kannst(eher mußt) du schon durch Vba. Sobald auch nur der kleinste Code läuft löscht Excel das was unter Bearbeiten–Rückgängig/Wiederholen steht.

D.h. diese Funktionalität mußt du selbst mit Vba erreichen.

Beispiel, ein Makro löscht immer die Zeile der aktuven Zelle.
Dann mußt du das Rückgängig machen per Vba „vorplanen“.
D.h. im Worksheet-SelectionChange muß entsprechender Code stehen der alle Infos der grad aktiv gewurden Zelle und deren Zeile speichert, also Zeilennummer, Werte, Formeln, Formatierungen usw.

Dann brauchst du noch ein Makro, was bei Aufruf diese gespeicherten daten wieder einfügt, also die gelöschte Zeile wieder erstellt, befüllt usw.

Starten kannst du dann das Makro direkt oder wie gewohnt über Vearbeiten Rückgängig.
Dazu muß im eigentlichen Löschmakro sowas stehen:

Beispiel zur OnUndo-Methode

In diesem Beispiel werden die Prozeduren zum Wiederholen und zum
Rückgängigmachen festgelegt.

Application.OnRepeat „Repeat VB Procedure“, _
„Book1.xls!My_Repeat_Sub“
Application.OnUndo „Undo VB Procedure“, _
„Book1.xls!My_Undo_Sub“

Liest sich ggfs. kompliziert, probiers einfach mal an einem kleinn Beispiel, z.B. ein Makro was nur A1 löscht und das dann wie beschrieben wieder herstellen.

Gruß
Reinhard

Hallo Carsten und Reinhard,

vielen Dank für den Hinweis von Carsten und den Lösungsvorschlag von Reinhard.

Die Daten, welche aus Tabelle1 gelöscht werden sind in meinem Fall immer noch in Tabelle2 vorhanden. Sie sind also nicht wirklich weg.

Deshalb kann ich auf das Rückgängig machen in meinem Fall verzichten.

Trotzdem vielen Dank, das ihr mich hierauf aufmerksam gemacht habt und Reinhard uns einen Lösungsvorschlag aufgezeigt hat.

Nochmals vielen Dank für eure Hilfe.

Grüße
Mathias