PDA

Vollständige Version anzeigen : Farbabfrage vor dem Schließen


Henne
16.03.2009, 09:04
Hallo,

kann mir jmd. sagen, ob es eine Möglichkeit gibt vom Schließen der Arbeitsmappe zu kontrollieren, ob es auf dem Arbeitsblatt (es gibt nur eins) noch Zellen gibt, die in einer bestimmten Farbe eingefärbt sind und daraufhin eine Fehlermeldung herauszugeben?

LG
Henne

Backowe
16.03.2009, 09:28
Hi Henne,

eine Möglichkeit wäre:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> Workbook_BeforeSave(<span class="TOKEN">ByVal</span> SaveAsUI <span class="TOKEN">As</span> Boolean, Cancel <span class="TOKEN">As</span> <span class="TOKEN">Boolean</span>)
<span class="REM">'Code in DieseArbeitsmappe</span>
<span class="TOKEN">Dim</span> Zelle <span class="TOKEN">As</span> Range
<span class="TOKEN">Dim</span> LZeile&amp;, LSpalte
<span class="TOKEN">With</span> Sheets(&quot;Tabelle1&quot;)
LZeile = .Cells.Find(&quot;*&quot;, .[A1], , , xlByRows, xlPrevious).Row
LSpalte = .Cells.Find(&quot;*&quot;, .[A1], , , xlByColumns, xlPrevious).Column
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> Zelle <span class="TOKEN">In</span> .Range(&quot;A1:&quot; &amp; .Cells(LZeile, LSpalte).Address)
<span class="TOKEN">If</span> Zelle.Interior.ColorIndex = 3 <span class="TOKEN">Then</span> MsgBox &quot;Es gibt noch rote Zellen!&quot;
<span class="TOKEN">Next</span>
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Henne
16.03.2009, 12:08
Hallo Jürgen,
danke für die schnelle Antwort.
Aber leider funktioniert es noch nicht. Ich habe noch rote Zellen, aber weder beim Speichern, noch beim Schließen gibt er mir die Fehlermeldung.

Habe ich noch eine Anpassung vergessen? Oder etwas anderes übersehen?

Gruß Henne

Backowe
16.03.2009, 12:27
Hi Henne,

hast Du den Code in DieseArbeitsmappe eingefügt?

Henne
16.03.2009, 13:00
Hab noch mal geguckt. Ist in DieseArbeitsmappe und den Tabellenblattnamen habe ich auch angepasst.

Habe ich evtl. auf die falsche Art versucht die Fehlermeldung haraufzubeschwören?

Backowe
16.03.2009, 13:10
Hi Henne,

welche Fehlermeldung von den tausenden Möglichkeiten wird denn angezeigt?

Henne
16.03.2009, 14:10
Das ist das Problem, gar keine.
Trotz roter Zellen (wo er ja eine Fehlermeldung "noch rote Zellen vorhanden" ausgeben müsste, wenn ich das Makro richtig verstanden habe) lässt er sich ohne Probleme speichern und auch schließen :(

Gruß Henne

Backowe
16.03.2009, 14:49
Hi Henne,

drücke mal im VBA-Editor "Strg - G" dadurch wird das Direktfenster geöffnet, setze vorher den Cursor auf eine "rote" Zelle und gib im Direktfenster "?activecell.Interior.ColorIndex" und bestätige mit Enter, dann wird Dir der Farbindex der Zelle angezeigt, damit kannst Du überprüfen, ob der Wert identisch mit dem Wert im Makro ist.

Oder alternativ lade mal eine Dummydatei hier hoch, ohne sensible Daten, damit ich mir mal ein Bild davon machen kann, momentan fische ich im Trüben. ;)

Henne
17.03.2009, 08:43
Jürgen du bist suuuper, Fehler gefunden!
Mein Kollege hat die Farbe verändert (in 36), konnte nicht funktionieren.

Jetzt habe ich nur noch das Problem, dass ich die Fehlermeldung nicht mehr los werde :(
Er scheint in der Schleife festzuhängen.

Anbei die Datei (hab die Farbe im Makro wieder in 3 geändert, damit ich es hochladen kann), ich hoffe du verstehst mich jetzt besser. ;)

Gruß Henne

Backowe
17.03.2009, 08:51
Hi Henne,

ich habe mal eine Abbruchbedingung, wenn eine rote Zelle gefunden wird, eingebaut.

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> Workbook_BeforeSave(<span class="TOKEN">ByVal</span> SaveAsUI <span class="TOKEN">As</span> Boolean, Cancel <span class="TOKEN">As</span> <span class="TOKEN">Boolean</span>)
<span class="REM">'Code in DieseArbeitsmappe</span>
<span class="TOKEN">Dim</span> Zelle <span class="TOKEN">As</span> Range
<span class="TOKEN">Dim</span> LZeile&amp;, LSpalte
<span class="TOKEN">With</span> Sheets(&quot;BAG Order&quot;)
LZeile = .Cells.Find(&quot;*&quot;, .[A1], , , xlByRows, xlPrevious).Row
LSpalte = .Cells.Find(&quot;*&quot;, .[A1], , , xlByColumns, xlPrevious).Column
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> Zelle <span class="TOKEN">In</span> .Range(&quot;A1:&quot; &amp; .Cells(LZeile, LSpalte).Address)
<span class="TOKEN">If</span> Zelle.Interior.ColorIndex = 3 <span class="TOKEN">Then</span>
MsgBox &quot;Es gibt noch rote Zellen!&quot;
<span class="TOKEN">Exit For</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span>
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Henne
17.03.2009, 09:46
Hi Jürgen,
vom Prinzip her klappt es jetzt, aber anscheinend kommt VBA/das Makro nicht damit klar, wenn auf den Zellen eine bedingte Formatierung liegt, die die Zellen rot färbt, wenn keine Einträge gemacht wurden und hellgelb wenn alles in Ordnung ist, denn die Zelle gibt immer den Farbwert 36 (hellgelb) zurück :(
Schade, muss ich mir was anderes überlegen.
Aber vielen, vielen Dank für die Ausführliche Hilfe :top: (und ich merke ich vollends aus der richtigen VBA Programmierung raus, muss mal wieder ran ;) )

Gruß Henne

Backowe
17.03.2009, 10:47
Hi Henne,

schön, daß die Info erst jetzt kommt, daß die Farbgebung der Zelle durch bedingte Formatierung zustande kommt. Das funktioniert dann so nicht! In dem Falle darfst Du nicht die Farbe abfragen, sondern musst die Bedingung abfragen, ob diese zutrifft.

Henne
17.03.2009, 12:24
Das habe ich auch erst später festgestellt, der Kollege hatte mich nicht vorgewarnt :(
Dann werde ich jetzt stöbern gehen, wie ich die Bedingung abfragen kann.
Aber dein "Grundgerüst" hat mir schon sehr geholfen, so muss ich es nur noch angleichen.
Gruß Henne

Backowe
17.03.2009, 12:30
Hi Henne,

bei Fragen, einfach fragen! :)