Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1300to1304
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehler in bedingter Formatierung

Fehler in bedingter Formatierung
24.02.2013 21:00:42
kalle
Hej!
Folgende Tabelle ist ein Dienstplan, der u.a. Zellen rot markiert, wenn jemand auf zwei Arbeitsplätzen zeitglich ist, oder Urlaub hat und zeitgleich arbeiten soll. Klappt auch alles ganz gut, bis ich aus einer anderen Arbeitsmappe Werte kopiert habe und diese mit "Werte einfügen" eingesetzt habe. Auf einmal ist im oberen Bereich (Z5-Z22) immer alles rot, sobald jemand eingetragen wird. Dieser Fehler entsteht nicht, falls ich innerhalb der selben Mappe kopiere.
Weiss jemand woran es liegt?
/Karlsson
https://www.herber.de/bbs/user/84041.xlsm

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
OT: Vorerst mal Folgendes, ...
24.02.2013 21:40:53
Luc:-?
…Kalle,
hatte dir hier (bzw dort) noch mal geantwortet.
Gruß Luc :-?
PS: Übrigens sollte der Teil der _Change-Prozedur ab For Each Z In… normalerweise nicht wirksam wdn müssen.

In deiner Datei ist generell der Wurm drin, ...
25.02.2013 02:07:21
Luc:-?
…Kalle;
wenn ich bspw in Spalte CN etwas in den Bereich 24:43 eintrage und dann wieder lösche, bleiben die „erröteten“ Zellen rot und zwar über BedingtFormat. Das ist eigentlich unerklärlich, wenn das iO ist. In der Datei, die ich dir zurückgeschickt hatte, war das jedenfalls nicht so, nachdem ich alle leeren Zellen in den relevanten Bereichen nochmals gelöscht hatte.
Allerdings ergibt die Bedingungsformel in einer Zelle auch stets WAHR. Es wäre also zu fragen, warum sie das im Blatt erst nach Änderung des Zellinhalts tut und nicht gleich. Das könnte dann auch ein Konversionsproblem sein. Deine „leeren“ Zellen sind nämlich nicht wirklich leer → ISTLEER() ergibt hier FALSCH statt WAHR. Das fiel mir schon damals auf (s.ob.). Allerdings ist dieser merkwürdige unsichtbare Inhalt diesmal nicht so leicht zu entfernen. Sind Teile der Datei etwa ursprünglich von einem anderen Programm nach Xl exportiert worden?
Sieh dir mal unter Bedingte Formatierung - Regeln verwalten - Dieses Arbeitsblatt an, was da so alles steht! Ab Xl12 ist die BedingtFormatierung tückisch, gerade beim Einkopieren. Xl10 enthält außerdem jede Menge Einfügeoptionen für kopierte Zellen, da kann man sich schnell vertun. Eigentlich ist das Ganze nur etwas für Leute, die jeden Tag 8h damit arbeiten.
Empfehlung: Alle leeren Zellen löschen und das auch mit ISTLEER überprüfen oder das ISTLEER(…) in den Bedingungsfmln durch (…="") ersetzen (und überflüssige BedingtFormate entfernen!).
God Morgon, Luc :-?

Anzeige
Übrigens, in die ominösen ...
25.02.2013 16:28:33
Luc:-?
…nicht-leeren Zellen scheint ein sogenannter Leerstring (Zeichenkette mit Länge 0), "" bzw Chr(0), eingetragen zu sein, Kalle;
etwas, was ggf als Entsprechung für Empty/EMPTY (aus DBn) übernommen wird (ggf auch für Null/NULL). Ich bspw benutze das in VBA gelegentlich als (Einfüge-)Marke in Texten.
Gruß Luc :-?

AW: Übrigens, in die ominösen ...
25.02.2013 21:05:39
kalle
Ich steige nicht durch... Wie Du schreibst, sind die Zellen nicht leer. Das betrifft die markierten Feiertage (auch über bedingte Formatierung) und die kopierte erste Woche (hier habe ich aus einem anderen Blatt kopiert, aber nur Werte eingefügt; Innerhalb der Tabelle zu kopieren klappt ohne Probleme). Ist der Fehler erst einmal drin, bekomme ich ihn nicht mehr raus. Etwas ähnliches ist mir passiertt als ich Deine Formel für die bedingte Formatierung in mein Blatt kopieren wollte, hier blieb immer alles rot. Daher habe ich alles in Dein Blatt eingebaut, aber bei irgendeinem Schritt (Welcher?) scheint sich dieser Bug eingeschlichen zu haben. Werde mich diese Woche nochmal in Ruhe dransetzen.
Grüsse aus Gbg, Karlsson

Anzeige
AW: Übrigens, in die ominösen ...
25.02.2013 21:20:05
kalle
Einen interessanten Fehler habe ich gefunden. Wenn man in C24:CX43 Zellen Löscht, werden diese als "nicht leer" markiert. Warum weiss der H.....
/Karlsson

AW: Übrigens, in die ominösen ...
25.02.2013 21:23:36
kalle
Und der Fehler liegt im Makro zur Grossschreibung:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Bereich As Range
Dim Z As Range
Set Bereich = Range("C4:CX43")
' Überprüfen ob mehr als eine Zelle markiert $A$1:$B$3 ist.
' Wenn mehrere Zellen markiert wurden, dass ist der Wert > 0
If InStr(Target.Address, ":") = 0 Then
' Abbruch, wenn Aktion nicht im Zielbereich
If Intersect(Target, Bereich) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target.Value = UCase(Target)
Application.EnableEvents = True
Else
' wenn mehrere Zellen markiert wurden
Application.EnableEvents = False
For Each Z In Selection
' Überprüfen ob die Zelle im vorgegebenen Bereich liegt
If Intersect(Z, Bereich) Is Nothing Then
Else: Z.Value = UCase(Z)
End If
Next Z
Application.EnableEvents = True
End If
End Sub
- Sorry, habe Dein Makro irgendwie nicht ans funktionieren gekriegt.
/Karlsson

Anzeige
Das hatte ich zwar auch schon mal ...
25.02.2013 21:55:11
Luc:-?
…vermutet, Kalle,
aber dann doch nicht weiter verfolgt. Meines hätte das wohl nicht gemacht (zumal du es ja auch nicht - warum auch immer - zum Laufen bekommen hast)… ;-)
Gruß Luc :-?

Dann mal hier 2 neue Makros, um das ...
25.02.2013 22:58:01
Luc:-?
…zu vermeiden bzw zu reparieren (→soviel wie nötig auswählen!), Kalle;
und lass die 1.Zeile ganz oben stehen (unter Extras/Optionen →Variablendeklaration erforderlich anhaken)!
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Const adRelBer$ = "C4:CX43"         'WirkBereich: alle Buchstaben groß
Dim raBereich As Range, raZ As Range
Set raBereich = Me.Range(adRelBer)
If Not Intersect(Target, raBereich) Is Nothing Then
With Application
.EnableEvents = False
For Each raZ In Target
If Not (IsEmpty(raZ) Or IsNumeric(raZ)) Then
Target = UCase(Target)
ElseIf raZ = "" Then
raZ.ClearContents
End If
Next raZ
.EnableEvents = True
End With
End If
Set raBereich = Nothing
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Const adRelBer$ = "C4:CX43"         'WirkBereich: LeerStrgZInhalt löschen
Dim raBereich As Range, raZ As Range
Set raBereich = Me.Range(adRelBer)
If Not Intersect(Target, raBereich) Is Nothing Then
With Application
.EnableEvents = False
For Each raZ In Target
If Not IsEmpty(raZ) And raZ = "" Then raZ.ClearContents
Next raZ
.EnableEvents = True
End With
End If
Set raBereich = Nothing
End Sub

Gruß Luc :-?

Anzeige
AW: Dann mal hier 2 neue Makros, um das ...
28.02.2013 20:55:48
kalle
Besten Dank. Muss im Moment auch mal wieder arbeiten und nicht nur am Dienstplan feilen. Werde mich am Wochenende mal mit einigen Tests hinssetzen.
Grüsse, Karlsson

Na dann viel Erfolg! Gruß owT
28.02.2013 21:22:46
Luc:-?
:-?

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige