yan2021
Goto Top

Excel - wenn Zelle gelb, dann X

Hallo liebe Admin-User,

ich habe eine kurze Frage zu einem Excel-Problem.

In meiner Exceldatei möchte ich, dass in einem bestimmten Bereich in alle Zellen, die gelb sind (RGB: 255, 255, 0), automatisch ein großes "U" eingefügt wird.

Ich vermute mal, dass man das über VBA-Code lösen könnte.

Grüße von
Yan face-wink

Content-Key: 7264298923

Url: https://administrator.de/contentid/7264298923

Printed on: April 27, 2024 at 15:04 o'clock

Mitglied: 6376382705
6376382705 May 22, 2023 at 12:10:08 (UTC)
Goto Top
Hallo Yan,

na? Die Enten wieder kaputt?

Ich mach das für Dich ...

Gruß
Member: Yan2021
Yan2021 May 22, 2023 at 12:37:46 (UTC)
Goto Top
Hallo @6376382705

Nein, ich habe schon am Freitag und heute danach im Internet gesucht.
Teilweise habe ich die von Dir verlinkten Lösungen auch gefunden. Sie sind aber oft für alte Excel-Versionen gedacht.
Und meist sind die Lösungen falsch herum für das von mir beschriebene Problem.
Ich will ja nicht eine Zelle farbig haben... wenn...
Sondern eine Zelle soll dann ein "U" bekommen, wenn sie einen gelben Hintergrund hat in RGB(255, 255, 0).

Wie kann ich das nun umsetzen?

Grüße von
Yan face-wink
Mitglied: 6376382705
6376382705 May 22, 2023 updated at 12:59:03 (UTC)
Goto Top
Hallo,

Nein, ich habe schon am Freitag und heute danach im Internet gesucht.
Ohje ..

Steht alles hier drin, inkl. "neuere Excel" Versionen


Und meist sind die Lösungen falsch herum für das von mir beschriebene Problem.
Intelligence is the ability to adapt to change (Stephen Hawking)
Heißt: du hast deine Vorlagen, bau es nach deinen Wünschen um. Sollte doch drin sein, etwas zu adaptieren?
Nur vorkauen bringt Dich ja nicht wirklich weiter. Try & Error und ganz ehrlich? So schwierig ist das nicht.


Gruß.
Mitglied: 7010350221
7010350221 May 22, 2023 updated at 13:42:53 (UTC)
Goto Top
Member: Yan2021
Yan2021 May 22, 2023 updated at 14:11:31 (UTC)
Goto Top
@6376382705:

Meine Güte, wie ich diese "Forenerziehungsversuche" hasse face-wink

Ich stelle hier keine Frage, weil ich keine Lust habe, sondern weil ich sie bisher nicht lösen konnte.
Und... ich frage hier auch nur, weil ich eben keinerlei Ahnung von VBA habe.
Und... ich habe auch keine Zeit, mich damit zu beschäftigen und muss es auch nicht. Ich bin kein IT-ler.
Für sowas gibt´s doch solche Foren, wie dieses hier, damit man fragen kann...

Da finde ich solche "Vorträge" wirklich überflüssig und unangebracht.

@7010350221:
Danke für den Hinweis. Schaue ich mir jetzt mal an.

Grüße von
Yan face-wink
Member: Yan2021
Yan2021 May 22, 2023 at 14:07:10 (UTC)
Goto Top
@7010350221:

Hmmm... also wie ich als VBA-Laie aus dem Code des anderen Threads meinen Code erstellen soll, kann ich nicht nachvollziehen. Ich verstehe diese Zusammenhänge nicht, die ich dort in dem schwarzen Code-Kasten sehe.

Grüße von
Yan face-wink
Mitglied: 7010350221
7010350221 May 22, 2023 updated at 14:37:44 (UTC)
Goto Top
Ich verstehe diese Zusammenhänge nicht, die ich dort in dem schwarzen Code-Kasten sehe.
Wat sons, ... mitdenken und logische Zusammenhänge verstehen sind ja auch nur privilegierten Personen vorbehalten 🙃.
Vielleicht nimmst du dir mal einen Stift und malst ihn dir weiß 😂
Member: kpunkt
kpunkt May 23, 2023 at 05:53:12 (UTC)
Goto Top
Bastel dir eine Funktion, wenn du mit VBA nicht klar kommst.
https://exceltricks.blog/hintergrundfarbe-rgb-aus-einer-zelle-in-excel-a ...
Einzig die Formatierung auf dem Blog ist kacke.
Der Code muss so lauten:
Function RGB_Hintergrundfarbe(Farbe As Range)

Dim Rot As Long, Grün As Long, Blau As Long, Wert As Long
Wert = Farbe.Interior.Color
On Error Resume Next
Rot = Wert Mod 256
Wert = (Wert–Rot) / 256
Grün = Wert Mod 256
Wert = (Wert–Grün) / 256
Blau = Wert Mod 256
RGB_Hintergrundfarbe = Rot & ", " & Grün & ", " & Blau  

End Function
Das wirft dir einen Wert aus. Damit kannst du eine WENN-Funktion füttern.
=(WENN(RGB_Hintergrundfarbe(A1)="255, 0, 0";"U";""))  

Protipp: lern endlich VBA wenn du so viel damit in Excel machen willst. Es gibt drölfzigtausend Bücher.
Member: Yan2021
Yan2021 May 23, 2023 updated at 07:54:04 (UTC)
Goto Top
Hallo @kpunkt und danke für Deinen guten Tipp.

Diese verlinkte Seite ist sehr interessant und aufschlussreich...
Leider funktioniert es so nicht, obwohl ich auch mehrere Varianten ausprobiert habe.

Vielleicht liegt es ja auch daran, dass der Bereich, in dem gelbe Zellen auftauchen können, über eine bedingte Formatierung gelb eingefärbt wird... aber eigentlich sollte das doch egal sein, wie die gelbe Farbe entsteht... oder? face-wink

Zur Info:
Wenn ich (wie in der von Dir verlinkten Seite beschrieben) den Farbwert (RGB) für eine der gelben Zellen über die Funktion auslese, erhalte ich als Ergebnis "RGB 255, 0, 0", statt "RGB 255, 255, 0".

Merkwürdiger Weise ist "RGB 255, 0, 0" jedoch rot und nicht gelb.

Und deshalb kann er dann mit der Formel

=(WENN(RGB_Hintergrundfarbe(A1)="255, 255, 0";"U";""))  

auch nichts finden und setzt nirgendwo ein "U" ein.

Und... Nein... es funktioniert auch nicht, wenn ich es jetzt mit "255, 0, 0" versuche face-wink
Mache ich das, dann wird eine vorher nicht gelbe Zelle plötzlich gelb und erhält ein "U".
Also offenbar interpretiert die Funktion eine NICHT gelbe Zelle mit "RGB 255, 0, 0", obwohl diese in Wirklichkeit keine farbliche Füllung hat!! Also irgendwo ist da ein Fehler... Und es soll ja so sein, dass in einem gewissen Zellbereich alle bereits gelb markierten Zellen dann mit einem "U" erscheinen.

Ich habe jedenfalls den Funktionscode genauso eingegeben, wie hier oder auf der verlinkten Seite abgebildet und in "Modul1" abgelegt. Aber ich habe es auch im Tabellenblatt versucht sowie in der Arbeitsmappe. Nichts änderte sich. Ebenso habe ich den Code angepaßt (also bei R, G und B jeweils meine Werte eingetragen). Aber auch das änderte nichts...

Hast Du oder sonst Jemand noch eine Idee, woran das liegen könnte?

Grüße von
Yan face-wink
Mitglied: 6376382705
6376382705 May 23, 2023 updated at 08:12:49 (UTC)
Goto Top
Ich weiß nicht, wo das Problem liegt, ganz im Ernst.

Mein oben genannten Beispiel funktioniert einfach und ohne Funktion. Ganz ohne VBA.

wenngelbdannusonstleer

Formel in A3:
=WENN(Farbe=6;"GELB";"NICHT GELB")  

Wenn die Zelle die Farbe 6 hat (Farbecode für Farbe: Gelb), dann schreibe in die Zelle: "Gelb", sonst "NICHT GELB". "" für leer. In deinem Fall: ersetze GELB mit U.

Ribbon -> Formeln -> Namensmanager:
=ZELLE.ZUORDNEN(63;Tabelle1!A3)

formelexcel

Auf dein Sheet dann halt noch anpassen.

Gruß
Member: Yan2021
Yan2021 May 23, 2023 updated at 09:28:06 (UTC)
Goto Top
@6376382705:

Danke für Deine Ausführung...
Ich raffe es zwar nicht - aber es funktioniert bei mir so nicht... auch wenn es bei Dir offensichtlich problemlos geht.

Hier mal 2 Screenshots dazu:

test1

...hier sieht man auch den Bezug zur Zelle "X10". Das Tabellenblatt heißt "Urlaubsplan".

test2

...und hier die Formel in Zelle "X10".

Ich hatte dann auch die Formel über den kompletten Bereich gezogen (von "X4:AG33"). Auch die anderen gelben Zellen erhielten kein "U".

Verstehe es absolut nicht... face-sad

Grüße von
Yan face-wink
Mitglied: 6376382705
6376382705 May 23, 2023 updated at 09:39:52 (UTC)
Goto Top
Schick mir bitte mal ein Auszug deines Sheets. (möglichst ohne Makro)

Ist dein Gelb denn auch wirklich Gelb? Du kannst Dir den Farbcode anzeigen lassen.

Edit: eben nochmal getestet. Problemlos hier. Wie wird deine Zelle Gelb gefärbt?

Gruß
Member: kpunkt
kpunkt May 23, 2023 at 09:48:09 (UTC)
Goto Top
Zitat von @6376382705:

Ich weiß nicht, wo das Problem liegt, ganz im Ernst.

Das Problem ist generell bei solchen Geschichten, dass man Excel neu berechnen lassen muss. Außerdem muss die Datei auch als xlsm gespeichert werden.
So gesehen ist die Lösung von @6376382705 noch besser.

Aber: einfacher zum Bearbeiten wirds mit VBA
Auslesen der Hintergrundfarbe geht mit
cells(x,y).interior.Color

Da setzt du eine Variable mit z.B.
background = cells(x,y).interior.Color

Und dann gleichst du halt ab.
Wenn background = irgendeine Farbe, dann setz den Wert U in die Zelle

Kurz im Kopf geklöppelt (un dich hab Range und die Zellbezeichnung aus Excel gewählt, wiel viele da Probleme haben):
Sub color()
Farbe = Range("A1").Interior.color  
Range("B1").Value = Farbe  
If Range("A2").Interior.color = 65535 Then  
    Range("A2").Value = "U"  
    Else: Range("A2") = "Nada!"  
    End If
End Sub

Bastel da mal selber rum. Mappe, Schaltfläche einfügen, diese dem Makro color zuweisen.
Dann Zellen A1 und A2 mit lustigen Farben befüllen und die Schaltfläche klicken.
Aber als xlsm speichern!
Member: Yan2021
Yan2021 May 23, 2023 updated at 10:05:58 (UTC)
Goto Top
@6376382705:

Wie ich oben ja schon geschrieben hatte, werden die Zellbereiche über bedingte Formatierung in gelb eingefärbt.
Das geht über eine "Summenprodukt"-Formel.

Hier mal die Formel für den Monat Juni, mit dem ich es hier auch versucht hatte:

=SUMMENPRODUKT(($W4>=Hilfsblatt!$A$6:$A$41)*($W4<=Hilfsblatt!$B$6:$B$41)*(X$3=Hilfsblatt!$C$6:$C$41))

..."Hilfsblatt" ist das Tabellenblatt, wo die Daten stehen. Die Daten werden dann quasi im Monat Juni in gelb gefüllte Zellen umgewandelt.

Ich habe eben nochmal mit "Color Cop" geschaut. Die Zelle "X10" ist definitiv gelb (RGB 255, 255, 0).

@kpunkt:
Die Datei ist schon als "xlsm" gespeichert.

Habe Deinen Code eben mal ausprobiert.
Dabei habe ich in A1 den Hintergrund grün gewählt und in A2 gelb (RGB 255, 255, 0).
Nach Ausführung des Makros erschien auch ein "U" im gelben Feld in A2.
In B1 steht jetzt "5287936".
Und welche Schlüsse ziehen wir jetzt aus dem Ergebnis? face-wink

Grüße von
Yan face-wink
Mitglied: 6376382705
6376382705 May 23, 2023 updated at 10:10:20 (UTC)
Goto Top
Bau das mal so:
Sub color()
If Range("A2").Interior.color = 65535 Then  
    Range("A2").Value = "U"  
    Else: Range("A2") = ""  
    End If
End Sub
dann dürfte sein Code aufgehen.

Waaaaaas eine Geburt :D

Grüße
Member: Yan2021
Yan2021 May 23, 2023 updated at 10:38:23 (UTC)
Goto Top
@6376382705:

Ja, Dein Code funktioniert auch. Aber der von @kpunkt hatte ja auch bereits funktioniert und ein "U" im gelben Feld eingesetzt.

Aber was mache ich jetzt mit dieser Erkenntnis?

Eine wichtige Info aber noch:

Wie ich weiter oben ja bereits vermutet hatte, liegt das Problem offenbar an der bedingten Formatierung.
Denn die gelben Felder entstehen ja durch die bedingte Formatierung und nicht dadurch, dass die Felder mit gelbem Hintergrund belegt werden.

Eben habe ich getestet...
Wenn ich z.B. in das Feld "X10" klicke und dann oben neben dem Farbeimer auf den Pfeil klicke, dann sehe ich "Keine Füllung" als ausgewählt. M.E. bedeutet das, dass das Feld "X10" überhaupt nicht die Hintergrundfarbe gelb (RGB 255, 255, 0) hat... korrekt? Dennoch erscheint diese Zelle in gelber Farbe.

Wahrscheinlich gibt es einen Unterschied, ob eine Zelle eingefärbt wird oder per bed. Formatierung gefärbt wird.
Daher funktioniert dann auch das mit dem VBA-Code in Verbindung mit dem Code in den Zellen nicht.

Eine (leider auch fehlgeschlagene) Lösungsidee von mir:

Ich hatte gedacht, dass ich ggf. diese "Summenprodukt"-Formel so ändern könnte, dass sie nicht die Zellen gelb macht, sondern dass sie stattdessen in die entsprechenden Zellen einfach ein "U" schreibt.
Leider kann man über "Formatierung" bei der bed. Formatierung nur Farben, Rahmen, Muster... angeben, aber keinen Buchstaben, der reingeschrieben wird face-sad

Wenn das ginge, wäre es eine Lösung gewesen, denn ich habe eine weitere bed. Formatierung in der Datei, die automatisch jede Zelle gelb einfärbt, wenn man ein "U" dort reinschreibt.

Habt Ihr noch ne Idee? face-smile

Grüße von
Yan face-wink
Member: kpunkt
kpunkt May 23, 2023 at 10:45:15 (UTC)
Goto Top
Zitat von @Yan2021:

Und welche Schlüsse ziehen wir jetzt aus dem Ergebnis? face-wink

Dass du die Frage als gelöst markieren solltest.

@6376382705
Jo, so ist der Code schlanker.
Ich setz da irgendwie aus Gewohnheit immer erst eine Variable und arbeite dann mit der. Zumindest jetzt im Kopf so halbwegs.
Ich bin eher freudig überrascht, dass mein Code aus dem Kopf heraus tatsächlich so ohne Murren funktioniert. Und das obwohl ich schon seit Ewigkeiten nicht mehr mit VBA gebastelt habe. :D
Mitglied: 6376382705
Solution 6376382705 May 23, 2023 updated at 10:55:31 (UTC)
Goto Top
Ja, Dein Code funktioniert auch. Aber der von @kpunkt hatte ja auch bereits funktioniert und ein "U" im gelben Feld eingesetzt.

Pack mal folgenden (getesteten) Code in deinen Button:

Sub Schaltfläche1_Klicken()
    Dim Zelle As Range
    
    For Each Zelle In ActiveSheet.UsedRange
        If Zelle.Interior.Color = RGB(255, 255, 0) Then 
            Zelle.Value = "U"  
        End If
    Next Zelle
End Sub

vba_adminde

Damit sollte überall ein U in die Zelle wandern, welches gelben Hintergrund hat. Bitte mal testen mit bedingten Formatierungen.

Gruß
Member: kpunkt
kpunkt May 23, 2023 updated at 11:16:25 (UTC)
Goto Top
Ich hab das mal kurz mit der bedingten Formatierung getestet.
Wenn man so eine Zelle ausliest, dann kommt als Farbode ein 16777215. Und das ist weiß.
Heißt: die bedingte Formatierung füllt die Zelle gar nicht mit der Farbe.
Ich gehe davon aus, dass das Makro vor der bedingten Formatierung ausgeführt wird.
Wenn man so eine Zelle erst mit einer Farbe füllt und die dann durch die bedingte Formatierung ändern lässt, dann bleibt die Zelle im Hintergrund gefüllt, die bedingte Formatierung "überschreibt" aber diese Farbe zumindest im Vordergrund.

Heißt also: verzichte auf die bedingte Formatierung und fülle die Zellen per VBA.
Member: Yan2021
Yan2021 May 23, 2023 updated at 11:37:25 (UTC)
Goto Top
@kpunkt:

Genau das hatte ich mit meinem letzten Post ja gemeint - dass nämlich die bed. Formatierung Zellen gar nicht wirklich mit Farbe füllt.

Daher funktioniert der erneute Code von @6376382705 leider auch nicht bei mir.

Die Zellen mit VBA füllen ist natürlich erst recht ein Problem.
Denn diese "Summenprodukt"-Formel sucht ja nach Daten in einem anderen Tabellenblatt und überträgt diese Daten dann in die Monatsblöcke und formatiert sie in gelb.

Wie man das nun per VBA umsetzen will... hmmm... dürfte schwierig sein.

Mir kommt aber gerade noch eine Idee, die ich mal testen will...

Grüße von
Yan face-wink
Member: Yan2021
Yan2021 May 23, 2023 updated at 12:00:02 (UTC)
Goto Top
Update:

Hat geklappt!!

Wenn ich die "Summenprodukt"-Formel in etwas abgeänderter Form, statt bei bed. Formatierung, nun in jede Zelle eingebe, dann funktioniert es sogar mit den "U" + gelb in allen Zellen, die auch gelb werden sollen face-smile face-wink

=WENN(SUMMENPRODUKT(($X4>=Hilfsblatt!$A$6:$A$41)*($X4<=Hilfsblatt!$B$6:$B$41)*(Y$3=Hilfsblatt!$C$6:$C$41));"U";"")  

Und das ganz ohne Makro-Code oder VBA...

Eine perfekte Gesamtlösung wäre es, wenn man die Daten aus dem anderen Tabellenblatt per VBA-Code auslesen und in die Monatsblöcke übertragen könnte (also das, was jetzt die "Summenprodukt"-Formel macht). Dort müssten dann die entsprechenden Zellen nicht gelb gefärbt werden, sondern jeweils mit einem "U" versehen werden.

Grüße von
Yan face-wink
Member: kpunkt
Solution kpunkt May 23, 2023 at 12:21:29 (UTC)
Goto Top
Ich hab kurz nachgefragt und es ist ganz einfach:
Anstelle von cells(x,y).interior.Color arbeitet man mit
cells(x,y).DisplayFormat.interior.Color
wenn bedingte Formatierungen im Spiel sind.
Mitglied: 6376382705
6376382705 May 23, 2023 at 12:26:05 (UTC)
Goto Top
Anstelle von cells(x,y).interior.Color arbeitet man mit
gut zu wissen. Danke Dir. face-smile

Nun dürften wir aber wirklich ausreichend Beispiele und Vorlagen geliefert haben, dass das Thema nun geschlossen werden kann. //finally
Member: Yan2021
Yan2021 May 23, 2023 at 12:47:10 (UTC)
Goto Top
OK und danke für Eure Hilfe.

Aber auch bei der neuen Methode (Code für bed. Formatierungen) würde es so sein, dass ich in jede einzelne Zelle jedes Monatsblock einen Code eingeben müsste... korrekt?

Falls das so ist, kann ich ja auch meine Lösung nehmen, die ja auch grds. funktioniert (siehe meinen letzten Code von oben).

Damit bekomme ich ja (sogar OHNE bed. Formatierung) meine "U" mit gelbem Hintergrund überall dort, wo sie auch hingehören.

Es gibt bei all diesen Lösungen, bei denen ich in die eigentlichen Zellen eine Formel eintragen muss, nur ein dickes Problem:

Es gibt in der Datei nicht nur Einträge mit "U", sondern auch andere Buchstaben, die dort eingetragen werden können. Diese anderen Buchstaben werden jedoch manuell (also quasi händisch) in die entsprechenden Zellen eingegeben. Mit einem solchen Eintrag überschreibt man ja dann die Formel der Zelle.

Falls man sich aber jetzt mal bei einem Eintrag vertan hat und diesen wieder löscht, würde diese Zelle kein "U" mehr erhalten können, da ja die Formel in der Zelle gelöscht wurde.

DAS war der Grund, warum ich nach einer Lösung über VBA-Code gesucht hatte.
Denn dann würden in den Zellen keine Formeln stehen und man könnte falsche od. versehentliche Einträge einfach wieder löschen und alles wäre gut.

Aber offenbar gibt es für mein Problem keine reine VBA-Lösung... also ohne dass man zusätzlich noch Formeln in die Zellen eintragen muss. Oder habe ich das falsch verstanden?

Danke Euch und Grüße von
Yan face-wink
Mitglied: 6376382705
6376382705 May 23, 2023 updated at 12:52:32 (UTC)
Goto Top
DAS war der Grund, warum ich nach eine Lösung über VBA-Code gesucht hatte.
und davon wurden Dir mindestens 2 Lösung vorgelegt. Noch den letzten Beitrag von k. lesen und ergänzen und schon luppt das.

also ohne dass man zusätzlich noch Formeln in die Zellen eintragen muss. Oder habe ich das falsch verstanden?
musst Du nicht. Hämmer einen Button hin oder bei Formload und press da den o.g. Code rein, fertig ist das Ding.

Gruß
Member: kpunkt
kpunkt May 23, 2023 at 12:58:12 (UTC)
Goto Top
Ich versteh dein Problem nicht und bin jetzt auch raus.
Du hast diverse Codes für VBA bekommen, die alle funktionieren. Nur willst du etwas machen, das, wie du selber sagst, ja nicht funktionert.
Tjoa....das ist jetzt eher dein Problem.
Du kannst natürlich auch jemanden gegen Geld dein Projekt geben und es dann erledigen lassen.
Aber auch das wird dir nicht helfen, da scheinbar der Prozess, wie diese Datei befüllt werden soll, schon fehlerhaft ist.
Überleg dir erst mal einen sinnvollen Prozess.
Wenn durch was auch immer befüllte Zellen überschrieben werden können und sogar müssen, dann ist das alles sinnbefreit.
Merke: alles, was man sinnvoll und eindeutig auf Papier bringen kann, kann man auch digitalisieren. Einfaches ITTT. Ein PC kann halt nur diskrete Werte wie 0 und 1.
Member: Yan2021
Yan2021 May 23, 2023 updated at 13:15:50 (UTC)
Goto Top
Hallo und sorry... ich hatte es einfach falsch verstanden face-sad

Habe jetzt den Code

Sub Schaltfläche1_Klicken()
    Dim Zelle As Range
    
    For Each Zelle In ActiveSheet.UsedRange
        If Zelle.DisplayFormat.Interior.color = RGB(255, 255, 0) Then
            Zelle.Value = "U"  
        End If
    Next Zelle
End Sub

im Tabellenblatt eingetragen, wo die Monatsblöcke sind.
Und... es funktioniert face-smile

Und das alles ohne Formeln in den einzelnen Zellen!!

Alle vorher von der bed. Formatierung gelb gefärbten Felder erhalten jetzt auch ein "U".

Aber eine einzige... kleine... letzte... Frage hätte ich dennoch:

Dieses Makro muss ich ja nun immer über "Makro ausführen" od. eine Schaltfläche ausführen.
Kann man ein solches Makro auch automatisch ausführen lassen? Z.B. immer dann, wenn die Exceldatei geöffnet wird?

Danke Euch und schönen Feierabend - Ihr hab ihn Euch echt verdient face-wink

Grüße von
Yan face-wink
Member: Yan2021
Yan2021 May 23, 2023 updated at 13:41:16 (UTC)
Goto Top
Update:

Hab´s gefunden...
Einfach im Makro oben noch ein "Private Sub Workbook_Open()" eingefügt, statt "Sub Schaltfläche1_Klicken()". Das dann in "Diese Arbeitsmappe" gelegt, statt in den vorherigen Tabellenblatt... und schon geht es.

Sobald ich die Excel-Datei jetzt öffne, wird das Makro ausgeführt und zusätzliche gelbe Zellen werden dann auch mit einem "U" gefüllt.

Jetzt ist es perfekt (hoffe ich doch) face-smile

Danke nochmal an Euch für Eure Mühe!!

Grüße von
Yan face-wink
Member: kpunkt
kpunkt May 23, 2023 at 13:39:02 (UTC)
Goto Top
Oke....ein letztes Mal noch.

In "Diese Arbeitsmappe" klatscht du den Aufruf des Makros. In deinem Fall
Sub Workbook_Open()
Call Schaltfläche1_klicken
End Sub

Startet dann beim Öffnen.

Man kann auch das Ändern bestimmter Zellen überwachen und dann ein Makro loslassen. Muss man aber aufpassen, dass das kein Loop wird. Daher nur bestimmte Zellen überwachen lassen.
https://www.excel-inside.de/vba-loesungen/ereignisse/264-beim-veraendern ...
Member: Yan2021
Yan2021 May 23, 2023 at 13:43:07 (UTC)
Goto Top
Oooh, da haben wir wohl gleichzeitig geschrieben.

Ich hatte es etwas anders gelöst:

Private Sub Workbook_Open()

Dim Zelle As Range
    
    For Each Zelle In ActiveSheet.UsedRange
        If Zelle.DisplayFormat.Interior.color = RGB(255, 255, 0) Then
            Zelle.Value = "U"  
        End If
    Next Zelle
End Sub

...geht auch.

Aber danke für den anderen Tipp. Den schaue ich mir dann morgen mal an.

Grüße von
Yan face-wink
Member: Yan2021
Yan2021 May 24, 2023 updated at 12:56:30 (UTC)
Goto Top
Hallo nochmal,

auch wenn dieser Thread schon gelöst ist, hätte ich nochmal eine Frage:

Ich habe den VBA-Code jetzt in die Orig. Datei übernommen und es funktioniert alles super gut.

Einziges Problem ist, dass nun - obwohl ich die Datenprüfung verwendet habe - durch den VBA-Code auch die Wochenenden und Feiertage gelb eingefärbt und mit einem "U" gekennzeichnet werden.

Wenn man manuell in die Datei etwas an einem WE oder FT eintragen will, erscheint korrekter Weise die Fehlermeldung, die ich bei der Datenprüfung eingetragen habe.

Gibt es eine Lösung, wie ich das verhindern kann?

Grüße von
Yan face-wink
Member: Yan2021
Yan2021 May 25, 2023 updated at 08:51:44 (UTC)
Goto Top
Sorry....... aber heute erscheint eine Fehlermeldung bezüglich des VBA-Codes.

Gestern hatte ich die Exceldatei mehrfach gestartet und es gab keine Probleme.
Heute Morgen starte ich sie erneut und es erscheint folgende Fehlermeldung:

fehler 25.5

Beim Debuggen wird die folgende Zeile in gelb markiert:

fehler_2

Habt Ihr eine Idee, wie ich den Fehler beheben kann?
Vielleicht müßte man ja nur zusätzlich angeben, dass nichts getan werden soll, wenn keine neuen gelben Zellen vorhanden sind...

Habe es eben mit dem Zusatz "Else..." versucht, aber auch das änderte nichts. Der Fehler bleibt.

Private Sub Workbook_Open()

Dim Zelle As Range
    
    For Each Zelle In ActiveSheet.UsedRange
        If Zelle.DisplayFormat.Interior.Color = RGB(255, 255, 0) Then
            Zelle.Value = "U"  
        Else
           Zelle.Value = ""  
        End If
    Next Zelle
End Sub

Grüße von
Yan face-wink
Member: Yan2021
Yan2021 May 25, 2023 updated at 12:21:32 (UTC)
Goto Top
Update:

Ich habe soeben herausgefunden, dass der ursprüngliche Code funktioniert, wenn das Tabellenblatt mit den Monatsblöcken NICHT per Blattschutz geschützt ist.

Daher habe ich einfach am Anfang des VBA-Codes "ActiveSheet.unprotect" eingesetzt und am Ende des Codes dann "ActiveSheet.protect".

Damit funktioniert es nun face-smile

Grüße von
Yan face-wink
Mitglied: 6376382705
6376382705 May 25, 2023 updated at 12:23:25 (UTC)
Goto Top
Du kannst keine Makros auf einem geschützten Blatt ausführen. Wäre ja auch blöd wenn.

ABER: du kannst den Blattschutz im Makro temporär aufheben und anschließend (nach dem die U's verteilt wurden) wieder schützen.

Private Sub Workbook_Open()
    Dim geschuetzt As Boolean
    
    ' Prüfe, ob das Blatt geschützt ist  
    geschuetzt = False
    If ActiveSheet.ProtectContents Then
        geschuetzt = True
        ' Blattschutz aufheben  
        ActiveSheet.Unprotect
    End If
    
    ' starte dein Makro (das mit den U's)  
YansMakro
   
    ' Schutz wieder aktivieren, wenn das Blatt zuvor geschützt war  
    If geschuetzt Then
        ' Passe hier die Optionen für den Blattschutz nach Bedarf an  
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End If
End Sub

    'ab hier Code für dein Makro  
Sub YansMakro()

Dim Zelle As Range
    
    For Each Zelle In ActiveSheet.UsedRange
        If Zelle.DisplayFormat.Interior.color = RGB(255, 255, 0) Then
            Zelle.Value = "U"  
        End If
    Next Zelle
End Sub

so ungefähr, könnte das klappen.

Gruß
Member: Yan2021
Yan2021 May 25, 2023 at 12:26:16 (UTC)
Goto Top
Danke Dir @6376382705.

Da hatten wir wohl die gleiche Idee.
Ich hatte meinen Post oben nochmal abgeändert, da ich die Lösung schon gefunden hatte.

Mein Code ist sogar erheblich kürzer:

Sub Workbook_Open()

    Dim Zelle As Range
    ActiveSheet.Unprotect  'Blattschutz aufheben  
    
    For Each Zelle In ActiveSheet.UsedRange
        If Zelle.DisplayFormat.Interior.Color = RGB(255, 255, 0) Then
            Zelle.Value = "U"  
        End If
    Next Zelle
    
    ActiveSheet.Protect  'Blattschutz setzen  
End Sub

Damit funktioniert es jetzt gut.

Danke jedoch für Deine nochmalige Hilfe!!

Grüße von
Yan face-wink
Member: Yan2021
Yan2021 May 25, 2023 updated at 12:41:25 (UTC)
Goto Top
...einzige Restfrage war noch, wie ich das Blattschutz-Kennwort hinterlegen kann in meinem Code.
Ansonsten wird das abgefragt, wenn man die Datei öffnet.

Habe das jetzt so gelöst, dass ich das Passwort mit in den Code gesetzt habe --> Password:="xxxxxxxx"

Grüße von
Yan face-wink
Mitglied: 6376382705
6376382705 May 25, 2023 updated at 12:41:52 (UTC)
Goto Top
Nope ist nicht möglich und wäre auch ein massives Sicherheitsleck.

Mach doch ein neues Tabellenblatt (nur für Dich sichtbar) mit Options Buttons und führe eben den Befehl mit deinen U's via Button aus, bei Bedarf. Ist ja eh quatsch, dass das Makro ständig rennt, obwohl die Daten schon korrekt sind.

Grüße
Member: Yan2021
Yan2021 May 25, 2023 at 12:43:24 (UTC)
Goto Top
Danke für den Tipp.

Ich hatte schon die Lösung gefunden (siehe letzter Post).
Es ist auch kein Sicherheitsleck, da es ja nur um eine Urlaubs-Übersicht geht face-smile

Aber ich vermute mal, dass es sicher auch eine Möglichkeit gibt, dass Passwort irgendwie nicht einsehbar zu hinterlegen. Da muss ich nochmal nach suchen...

Grüße von
Yan face-wink
Mitglied: 6376382705
6376382705 May 25, 2023 updated at 13:04:44 (UTC)
Goto Top
So.

Jetzt muss ich Dich doch noch mal von der Seite anstupsen.

Wie wir hier in über 35 Kommentaren feststellen müssen, dass Du dir das hättest alles selbst erarbeiten können. Genau das hatte ich bezweckt mit meinen Links oben. Abgesehen von der bed. Formatierung (die Frage wäre hier gut gewesen), hast Du dich selbst großteilig da durch gekämpft und selbst probiert und bist schlussendlich selbst auf eine vernünftige Lösungen gekommen. Das waren die 35 Kommentare hier aber nicht Wert, auch die verplemperte Zeit nicht.

Meine Güte, wie ich diese "Forenerziehungsversuche" hasse face-wink
Wenn ich mir dein Ergebnis nun anschaue, lief das gar nicht so falsch. Nächstes Mal aber anders ran gehen: erst Internet, dann Forumsuche, zwischendurch selbst probieren und wenns echt nicht mehr geht, hier eine Frage stellen.

Das Internet ist voll von VBA Zeugs. Einfach bisschen was lesen, versuchen zu verstehen und selbst daraus was basteln (adaptieren). Ich behaupte, Du wärst auch auf die VBA Lösung von alleine gekommen (ist jetzt auch nicht sehr schwer: wenn das, dann das [wie Du korrekt in den Titel eingegeben hast]).

Gruß + weg hier
Member: Yan2021
Yan2021 May 25, 2023 updated at 13:09:25 (UTC)
Goto Top
Ich habe in einer anderen Excel-Datei mal die Makros selbst mit einem Passwort belegt.
Man kann also nicht die Makros mit "Alt+F11" öffnen, ohne dass man ein Passwort eingibt.

Leider weiß ich nicht mehr, wie ich das damals gemacht habe face-sad

Aber das wäre natürlich die perfekte Lösung...

Grüße von
Yan face-wink

P.S.:
Habe es gefunden. Nun ist alles bestens und auch sicher genug.

Danke für die Hilfe!!