Bedingte Formatierungen reparieren (VBA)
#11
(12.05.2024, 16:20)Egon12 schrieb: Hallo,
ich vermute mal, dass im Modul des Tabellenblattes eine Ereignisprozedur dem Abbruch der Aufzeichnung verursacht (z.B.: Worksheet_Calculate).
 
Gruß Uwe

Jaa... Achsoo...  21

Ich habe mir das Ganze jetzt etwas einfacher gemacht. Mein Tabellenbereich Startet bei G12 und endet ei V389. Hinterlegt sind um die 25 bedingte Formatierungen für diesen Bereich. Nun habe ich die Tabelle um eine Dummy-Zeile erweitert auf V390, alle Zellen mit ="" gefüllt (durch die bed Formatierungen würden sie sonst farblich hervorgehoben werden) und dann einfach aufgezeichnet, wie ich von G390 nach oben zu V12 hochgezogen habe und nur mit Formaten gefüllt hab. 
Dazu noch vorher den Befehl von dir eingefügt, die vorhandenen Formatierungen zu löschen und fertig! Es funktioniert wunderbar, aber merkwürdigerweise wird bei folgender Formel:

Code:
Sub Bedingte_Formatierungen_Tabellenblatt1()

With Sheets("Tabellenblatt1").Range("G12:V389")
        .FormatConditions.Delete  ' löscht alle noch bestehenden bed. Formatierungen
End With
    Sheets("Tabellenblatt1").Select
    Range("G390").Select
    Selection.AutoFill Destination:=Range("G12:V390"), Type:=xlFillFormats
End Sub

... die Spalte G zwar auch gelöscht, aber nicht neu formatiert. Es funktioniert nur, wenn ich bei F beginne, also mit folgendem Code:

Code:
Sub Bedingte_Formatierungen_Tabellenblatt1()

With Sheets("Tabellenblatt1").Range("G12:V389")
        .FormatConditions.Delete  ' löscht alle noch bestehenden bed. Formatierungen
End With
    Sheets("Tabellenblatt1").Select
    Range("F390").Select
    Selection.AutoFill Destination:=Range("F12:V390"), Type:=xlFillFormats
End Sub

Woran liegt das?

Aber sonst ist das glaube ich eine relativ simple Art und Weise, im Nachhinein ein Makro zu erzeugen, das vorhandene Formatierungen "repariert".

(12.05.2024, 17:06)Crazy Tom schrieb: moin,

bei mir wird nüscht mit aufgezeichnet wenn ich

Makrorekorder starte -->
Regeln verwalten und dort eine neue Bedingung zufüge

gehe ich direkt zu: Neue Regel hinzufügen
dann wird der ganze Schmodder aufgezeichnet

mfg Tom

Halt Stop! Bei mir wird auch nüscht aufgezeichnet, was meinst du aber mit "direkt zu..."?

ACH! Über den Button im Dropdownmenü unter Formatvorlagen? Hör auf! Ich klicke immer auf verwalten und dann auf neue Regel...
Gut zu wissen! Danke dir!
Antworten Top
#12
Für dein Kalender:


Code:
Sub M_snb()
  With Sheets("Tabellenblatt1").Range("G12:V389")
    .offset(1).FormatConditions.Delete
    .rows(1).autofill .offset, 3
  End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#13
(12.05.2024, 17:46)snb schrieb: Für dein Kalender:


Code:
Sub M_snb()
  With Sheets("Tabellenblatt1").Range("G12:V389")
    .offset(1).FormatConditions.Delete
    .rows(1).autofill .offset, 3
  End With
End Sub

Vor dir kann man nichts geheim halten ;)

Wenn ich das so ausführe, dann wird nur Spalte G ausgefüllt. Wenn G12 die bF enthält, dann wird G12 bis G389 befüllt. wenn ich "row" auf 16 einstelle, ist alles weg. Ganz nachvollziehen kann ich den Code jetzt nicht. Der Bereich wird gewählt und mit einem Offset von 1 wird alles gelöscht (also alles bis auf die erste Zeile des Bereichs) und anschließend wird der Bereich anhand der (?!) Zeile 1 hinterlegten bF wieder neu befüllt? Warum dann noch .offset, 3?
Antworten Top
#14
In Mappen mit vielen und komplexeren bedingten Formatierungen kopiere ich diese gerne nach der Erstellung auf ein leeres Tabellenblatt, um dann nach einiger Zeit mittels Formatpinsel immer wieder mal die gesicherten auf das Original zu übertragen.

Weiterhin gibt es in der Aboversion seit ca. Ende 2022 Verbesserungen, die den Wildwuchs etwas eindämmen. Um diesen meinerseits einzudämmen lege ich bedingte Formatierungen meist für ganze Spalten an, um dann den tatsächlichen Bereich in der Formel einzgrenzen.

Auch habe ich diese schon mal als Makros aufgezeichnet, um diese dann immer deim öffnen/schliessen der Mappe neu zu setzen. hierbei gibt es jedoch das Problem, dass beim Aufzeichenen von Zahlenformaten, der aufgezeichente Code den Aufruf von Excel4-Makros enthält, die dann aber bei der Ausführung auf einen Fehler laufen. Da muss dann der aufgezeichnete Code nachbearbeitet werden.

Auch gibt es beim setzren der bF per Makro ein Problem, wenn Kollegen mit unterschiedlichen Anzeigesprachen arbeiten. Das muss dann auch im Makrocode berücksichtigt werden. In meinem Fall hatte es genügt, nur die Anzeigesprache "Englisch" zusätzlich zu berücksichtigen.
[-] Folgende(r) 1 Nutzer sagt Danke an ws-53 für diesen Beitrag:
  • derHoepp
Antworten Top
#15
(12.05.2024, 19:09)ws-53 schrieb: Auch gibt es beim setzren der bF per Makro ein Problem, wenn Kollegen mit unterschiedlichen Anzeigesprachen arbeiten. Das muss dann auch im Makrocode berücksichtigt werden. In meinem Fall hatte es genügt, nur die Anzeigesprache "Englisch" zusätzlich zu berücksichtigen.

Hab da mal gelesen, dass es immer funktioniert, wenn man die Makros gleich auf Englisch umschreibt, dass es dann für alle Sprachen funktioniert (zumindest in Bezug auf col und row)
Antworten Top
#16
Sub M_snb()
  With Sheets("Tabellenblatt1").Range("G12:V389")
    .offset(1).FormatConditions.Delete  : jede BF in  G13:V390 löschen
    .rows(1).autofill .offset, 3                 : die in G12:V12 erhaltene BF's verwenden auf  G12:V389
  End With
End Sub

Alternative könnte sein:

Code:
Sub M_snb()
  With Sheets("Tabellenblatt1").Range("G12:V389")
    .offset(1).FormatConditions.Delete
    .cells(1).autofill .offset, 3
  End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#17
Moinsen,

aus meiner Sicht ist es am einfachsten, Datenhaltung und -darstellung gerade in Kalendern zu trennen. Die schöne bunte Ansicht ist dann mit einem Blattschutz vor versehentlichem Ändern geschützt. Versehentlich geänderte Darstellungsblätter lassen sich dann zuverlässig wie von ws53 dargestellt wieder herstellen. Die Nutzer kopieren dann auch nichts mehr hin und her, sondern tragen einfach die Daten in eine Daten-Liste. Das bunte Anzeigeblatt holt sich die benötigten Informationen dann dort her.

Viele Grüße 
derHöpp
Antworten Top


Gehe zu:


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