393 Aufrufe
Gefragt in Tabellenkalkulation von piedro Einsteiger_in (63 Punkte)
Guten Morgen zusammen,

ich benötige eure Hilfe, habe eine Tabelle mit Daten, in Spalte A sind die Jahre untereinander

eingetragen (01.01.1990, 01.01.1991 ... bis 01.01.2021).

Nun möchte ich das in Zelle M5, R5, V5, AA5 die Schrift vergrößert wird auf Größe 20 wenn

in Zelle A5 das aktuelle Jahr eingetragen ist. Das ganze soll sich nächstes Jahr wiederholen

in Zeile 6   ( Zelle A6 akt. Jahr,  Schrift vergrößern in M6, R6, V6, AA6 )

und in Zeile 5 sollen die Werte wieder ihre Ursprung Schriftgrößen erhalten, usw.

die anderen Jahre.

Letzte Zeile ist mit Jahr  01.01.2021 eingetragen, wenn nächstes Jahr (01.01.2022) eingetragen

wird, soll das im Makro mitberücksichtigt werden für die ganze Zeile, usw. die folgende Jahre.

Für eure Hilfe wäre ich sehr, sehr dankbar

Gruß Peter

11 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Peter,

kopiere das folgende Makro in ein Standard-Modul deiner Tabelle:

Sub schrift()
Dim lngZeile As Long
Dim lngJahr As Long
Dim lngLetzte As Long

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'letzte beschriebene Zeile in Spalte A ermitteln
lngLetzte = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

'aktuelles Jahr ermitteln
lngJahr = Year(Now)

'nun alle Zeilen durchlaufen
For lngZeile = 1 To lngLetzte
   'prüfen ob Jahr in Spalte A mit aktuellem Jahr übereinstimmt
   If Year(Cells(lngZeile, 1)) = lngJahr Then
     'falls ja, dann Schrift vergrößern
     'aber zuerst prüfen, ob Schrift schon in 20 ist
      If Range("M" & lngZeile).Font.Size <> 20 Then
        Range("M" & lngZeile).Font.Size = 20
        Range("R" & lngZeile).Font.Size = 20
        Range("V" & lngZeile).Font.Size = 20
        Range("AA" & lngZeile).Font.Size = 20
       End If
     Else
      'ggf. Größe von 20 in 10 - ggf. anpassen ändern
      If Range("M" & lngZeile).Font.Size = 20 Then
         Range("M" & lngZeile).Font.Size = 10
         Range("R" & lngZeile).Font.Size = 10
         Range("V" & lngZeile).Font.Size = 10
         Range("AA" & lngZeile).Font.Size = 10
       End If
    End If
 Next lngZeile
 
'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True
 
End Sub

Das Makro wird immer im aktuell aktiven Tabellenblatt ausgeführt.

Gruß

M.O.

0 Punkte
Beantwortet von piedro Einsteiger_in (63 Punkte)

Hallo M.O.

Danke erstmal für deine Antwort aber in dem Makro ist ein

"Laufzeitfehler 13: Typen unverträglich"  aufgetreten,

"If Year(Cells(lngZeile, 1)) = lngJahr Then"
vielleicht könntest du mal nachschauen woran
das liegt.
Vielleicht ist das wichtig, habe vergessen dir
zu schreiben dass das erste Datum in Zelle A5
steht, nicht in Zelle A1


Vielen Dank
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Peter,

dann ändere die Zeile

For lngZeile = 1 To lngLetzte

in

For lngZeile = 5 To lngLetzte


Dann sollte das Makro funktionieren.

Gruß

M.O.

0 Punkte
Beantwortet von piedro Einsteiger_in (63 Punkte)

Hallo M.O.

Der Fehler tretet immer noch auf in der gleichen Zeile vom Makro,

wenn ich in Zelle A5 das Datum 01.01.2021 eingebe und ENTER  drücke

dann sollten sich die Werte in den Zellen M5, R5, V5, AA5  vergrößern, tun 

sich aber NICHT. Wenn ich aber das Makro starte von Hand, kommt die

Fehlermeldung und der Hinweis "Laufzeitfehler 13: Typen unverträglich" 

und die Zeile im Makro ist GELB markiert. Wenn ich dann auf "DEBUGGEN"

drücke dann vergrößern sich die Werte  (was ja auch das Ziel sein soll).

Beispiel:

Ziel ist es das sich die Werte in den ZELLEN M5, R5, V5, AA5  

AUTOMATISCH  vergrößern wenn  ich z.B. in Zelle A5 das Datum 01.01.2021

eingebe und ENTER drücke danach bleiben die Werte das ganze Jahr mit

größerer Schrift. Wenn dann das Jahr 2022 beginnt und in Zelle A6 ist das

Datum 01.01.2022 eingetragen dann sollten sich die Werte in den betreffenden

Spalten automatisch vergrößern und die vorherigen Werte von Zeile 5 sollten 

sich dann automatisch verkleinern laut Makro

 

Hoffe das wir es diesmal hinkriegen, ich drücke die Daumen smiley

Gruß Peter

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Peter,

dass das Makro automatisch bei einer Eingabe starten soll, hast du in deiner ursprünglichen nicht geschrieben.

Wenn ich dich richtig verstehe, soll das Makro starten, sobald in Spalte A eine Eingabe erfolgt. Dann sollen auch alle vorhandenen Datensätze überprüft werden und in den Zeilen, in denen das Jahr in Spalte A mit dem aktuellen Jahr übereinstimmt in den genannten Zellen die Schriftgröße auf 20 vergrößert werden, in allen anderen Zeilen soll die Schriftgröße normal (also 11?) sein.

Zu deinem Problem kann ich ohne deine Datei nichts sagen. Bei mir läuft das Makro ohne Probleme.

Lade doch mal deine Beispieldatei hier hoch (Anleitung).

Gruß

M.O.

0 Punkte
Beantwortet von piedro Einsteiger_in (63 Punkte)

Guten Morgen M.O.

gleich am Anfang möchte ich dich um Entschuldigung bitten das ich mich

nicht korrekt und vollständig ausgedrückt habe hinzu kommt das ich

vergessen habe das in den betreffenden Spalten die Werte durch eine Formel

ermittelt werden.

Alles andere hast du richtig erkannt.

Ich schicke dir mal diese Datei jetzt zu und denke das wir das jetzt hinkriegen

Vielen Dank

Gruß Peter

+1 Punkt
Beantwortet von m-o Profi (22.7k Punkte)
ausgewählt von piedro
 
Beste Antwort

Hallo Peter,

der Fehler trat auf, weil du unter deiner Tabelle noch Kommentare hast, die natürlich kein Datum sind.

Daher habe ich das Makro so geändert, dass nur der Bereich zwischen der Zeile 5 bis einschließlich der Zeile des neu eingegebenen Datums geprüft wird. Gibst du in der Spalte A etwas anderes als ein Datum ein, z.B. eine weitere Fußnote / Erläuterung wird das Makro nicht ausgeführt.

Lösche das alte Makro aus der Datei und füge das folgende Makro in das VBA-Projekt des betreffenden Tabellenblatts ein:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngZeile As Long
Dim lngJahr As Long

'Makro nur dann ausführen, wenn in Spalte A etwas eingegeben wurde, ansonsten Makro beenden
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub

'Prüfen, ob Eingabe in Spalte A ein Datum ist; falls nicht, dann Makro verlassen
If IsDate(Target.Value) = False Then Exit Sub

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'aktuelles Jahr ermitteln
lngJahr = Year(Now)

'nun alle Zeilen durchlaufen bis zu aktuell eingebenen Zeile
For lngZeile = 5 To Target.Row
   'prüfen ob Jahr in Spalte A mit aktuellem Jahr übereinstimmt
   If Year(Cells(lngZeile, 1)) = lngJahr Then
     'falls ja, dann Schrift vergrößern
     'aber zuerst prüfen, ob Schrift schon in 20 ist
      If Range("M" & lngZeile).Font.Size <> 20 Then
        Range("M" & lngZeile).Font.Size = 20
        Range("R" & lngZeile).Font.Size = 20
        Range("V" & lngZeile).Font.Size = 20
        Range("AA" & lngZeile).Font.Size = 20
       End If
     Else
      'ggf. Größe von 20 in 12 bzw. 11
      If Range("M" & lngZeile).Font.Size = 20 Then
         Range("M" & lngZeile).Font.Size = 12
         Range("R" & lngZeile).Font.Size = 11
         Range("V" & lngZeile).Font.Size = 11
         Range("AA" & lngZeile).Font.Size = 11
       End If
    End If
 Next lngZeile
 
'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

End Sub

Hier ist die bearbeitete Tabelle: Download

Gruß

M.O.

0 Punkte
Beantwortet von piedro Einsteiger_in (63 Punkte)
Hallo M.O.

Vielen herzlichen Dank für deine Mühe und Arbeit,

das klappt jetzt alles wunderbar sowie ich mir das

gewünscht habe.

Ich wünsche dir einen guten Rutsch und für das

neue Jahr viel Erfolg, Glück und vor allem viel

Gesundheit

Gruß Peter
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Peter,

vielen Dank. Auch wünsche dir alles Gute für das neue Jahr.

Gruß

M.O.
+1 Punkt
Beantwortet von nighty Experte (6.6k Punkte)
Hallo Community

Für erfahrende Vba begeisterte, noch eine Variante ohne Schleife!

Gruß Nighty

Erste Zeile = Überschrift

Spalte A ab Zeile 2 = Datum

B2 das gewünschte Jahr

Spalte C und E vergrößerter Font

Sub FilterBereich()
 Union(Range("C:C"), Range("E:E")).Font.Size = 10
 Columns("A:A").NumberFormat = "yyyy"
 Range("A:A").AutoFilter Field:=1, Criteria1:=Range("B2")
 Union(Range("C2:C" & Rows.Count), Range("E2:E" & Rows.Count)).SpecialCells(xlCellTypeVisible).Font.Size = 20
 Range("A:A").AutoFilter
 Columns("A:A").NumberFormat = "m/d/yyyy"
End Sub
...