Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1652to1656
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

Rahmen um Kalender mit VBA

Rahmen um Kalender mit VBA
05.11.2018 00:26:45
F.
Hallo Sepp, Matthias,
habe wieder mal eine kleine Aufgabe für Euch und zwar würde ich gerne in meinem Jahreskalender die Rahmen neu gestalten und zwar so, dass das automatisch passiert. Sprich: über "VBA". Ich habe natürlich wie es sich gehört, zuerst mal stundenlang nach einer Möglichkeit "gegoogelt" und bin da aber nicht fündig geworden und deshalb möchte ich Euch bitten, mir doch in dieser Angelegenheit zu helfen. Als Hilfe bzw. Vorlage habe ich einen Screenshot angehängt. Range ist von A3:AV95. Muster bzw. Vorlage entstammt von "Excel-Inside".
Die Art der Rahmenlinien ist im Beispiel egal, die kann ich dann nachher nach meinen Vorstellungen abändern.
Userbild
Vielen Dank im voraus.
Viele Grüße
Frieder

43
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Versteh ich nicht ...
05.11.2018 01:55:50
Matthias
Hallo
Versteh ich jetzt nicht ganz ...
Es ist doch ein Rahmen drum.
Bitte genauer erläutern.
Gruß Matthias
AW: Versteh ich nicht ...
05.11.2018 10:22:59
F.
Hallo Matthias, Hallo Gerd,
das betrifft im großen und ganzen nicht den äußeren Rahmen, sondern die Rahmen im inneren des Kalenders. Die würde ich gerne verändern in dem ich das mit VBA automatisieren möchte. Ich habe das vor kurzem mit dem Makrorecorder gemacht, was sehr mühselig ist und vor allem sehr langsam vonstatten geht. Der Grund war, dass bei einer Änderung der Formatierung, auf einmal ein Teil der inneren Rahmen fehlte und ich das dann händisch wieder nacharbeiten musste. Das würde ich gerne mit einem VBA Skript schneller erledigen lassen, sollte es wieder mal zu so einer Situation kommen. Beim Ausdruck als PDF ist mir aufgefallen, dass dort ein großer Teil der Rahmen und Linien gar nicht angezeigt werden. In der Druckvorschau ist aber alles o.K. Da ich ja immer noch im Urlaub bin, kann ich leider den Kalender nicht ausdrucken, denn da würde ich es ja sofort sehen, ob es ein Problem vom PDF Reader ist oder ein sonstiges. (Reader habe ich mehrere ausprobiert, alle zeigen die gleichen Fehler an).
Dein Kollege Gerd L. hat schon mal vorab ein Makro zur Verfügung gestellt, das auch Super funktioniert, das aber für meine Zwecke in der Form aber nicht geeignet ist. Grund: Es werden alle Spalten und Zeilen eingerahmt. Im Kalender sind aber z. B. A3:D5 / E3:H5 eine Zelle die umrahmt werden sollten, das macht das ganze doch etwas schwieriger. Für Euch Spezialisten vermutlich ein "Klacks" kostet ein Lächeln, für mich sind das aber "spanische Dörfer", wie man so sagt.
Ganz besonders schön wäre es, wenn man sich vorher schon per Auswahl, sich die Rahmen Linien auswählen könnte, die man für den Kalender verwenden will, wenn das gehen würde, wäre das natürlch Super!
Vielen Dank im voraus.
Viele Grüße
Frieder
Anzeige
dachte ich mir schon ...
05.11.2018 10:55:54
Matthias
Hallo Frieder
.. deshalb auch die Bitte um Erläuterung
Der Code: Range("A3:AV95").Borders.Weight = xlThin
macht im Prinzip das gleiche was Gerd vorgeschlagen hat, nur wesentlich schneller.
Du hast allerdings den Link zur Datei und den Link zum ersten Beitrag nicht gesetzt!
Das ist ungünstig für alle anderen potenziellen Helfer!
Ich weiß aber jetzt was Du meinst und versuch mich mal an einer Lösung.
Wenn noch jemand Anderes helfen will, hier der Link des Kalenders::
https://www.excel-inside.de/software/excel-tools/466-excel-jahreskalender
Der Link zum 1.Beitrag
https://www.herber.de/cgi-bin/callthread.pl?index=1653742#1653963
Gruß Matthias
Anzeige
Rahmen außen ...
05.11.2018 12:22:30
Matthias
Hallo
Markiere Deinen Druckbereich und entferne alle Rahmenlinien.
Dann diesen Code ausführen:

Option Explicit
Sub Rahmen()
Dim MyRow&, MyCol&
For MyRow = 3 To 93 Step 3
For MyCol = 1 To 48 Step 4
With Cells(MyRow, MyCol).Resize(3, 4)
.Borders(xlEdgeTop).Weight = xlThick
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeRight).Weight = xlThick
.Borders(xlEdgeBottom).Weight = xlThick
End With
Next
Next
End Sub
Gruß Matthias
mit Blattreferenz ...
05.11.2018 15:54:57
Matthias
Hallo
Damit nix passiert, hier mal mit Referenz zum "Jahreskalender".
Sub RahmenThick()
Dim MyRow&, MyCol&
With Worksheets("Jahreskalender")
.Range("A2:AV2").Borders.Weight = xlThick
For MyRow = 3 To 93 Step 3
For MyCol = 1 To 48 Step 4
With .Cells(MyRow, MyCol).Resize(3, 4)
.Borders(xlEdgeTop).Weight = xlThick
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeRight).Weight = xlThick
.Borders(xlEdgeBottom).Weight = xlThick
End With
Next
Next
End With
End Sub

Sub RahmenThin()
Dim MyRow&, MyCol&
With Worksheets("Jahreskalender")
.Range("A2:AV2").Borders.Weight = xlThin
For MyRow = 3 To 93 Step 3
For MyCol = 1 To 48 Step 4
With Cells(MyRow, MyCol).Resize(3, 4)
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
End With
Next
Next
End With
End Sub
Gruß Matthias
Anzeige
AW: mit Blattreferenz ...
05.11.2018 16:53:59
F.
Hallo Matthias,
zuerst Danke für Deine Skripte.
Habe sie mal auf die Schnelle Art mal ausprobiert. Beide Skripte funktionieren. Sind nur gerade auf dem Sprung zum Essen gehen, werde mich nachher noch mal melden. Aufgefallen ist mir aber trotz der Eile, dass der Vorgang bei Beiden Linien sehr träge vonstatten geht. Jeweils ca. 5 Min. Geht natürlich immer noch schneller als mit dem Makro Recorder.
Also, bis später.
Viele Grüße
Frieder
dann machen wirs eben schneller ...
05.11.2018 17:38:31
Matthias
Hallo ...
Nunja,
die 5 min sind es ja nur bei Dir, bei mir nicht.
Das liegt daran das ich Deine aktuelle Datei nicht kenne.
Du kannst aber etwas schneller werden, indem Du die Ereignismakros(Events) zu Beginn ausschaltest
und am Ende wieder einschaltest.
Das betrifft:
  • automatische/manuelle Berechnung (Calculation)

  • Ereignismakros (Events)

  • Bildschirmaktualisierung (ScreenUpdating)

  • Probiers also mal so:
    Sub RahmenThick()
    Dim MyRow&, MyCol&
    Dim MyCalculation
    With Application
    MyCalculation = .Calculation
    .Calculation = False
    .ScreenUpdating = False
    .EnableEvents = False
    End With
    With Worksheets("Jahreskalender")
    .Range("A2:AV2").Borders.Weight = xlThick
    For MyRow = 3 To 93 Step 3
    For MyCol = 1 To 48 Step 4
    With .Cells(MyRow, MyCol).Resize(3, 4)
    .Borders(xlEdgeTop).Weight = xlThick
    .Borders(xlEdgeLeft).Weight = xlThick
    .Borders(xlEdgeRight).Weight = xlThick
    .Borders(xlEdgeBottom).Weight = xlThick
    End With
    Next
    Next
    End With
    With Application
    .Calculation = MyCalculation
    .ScreenUpdating = True
    .EnableEvents = True
    End With
    End Sub
    

    Sub RahmenThin()
    Dim MyRow&, MyCol&
    Dim MyCalculation
    With Application
    MyCalculation = .Calculation
    .Calculation = False
    .ScreenUpdating = False
    .EnableEvents = False
    End With
    With Worksheets("Jahreskalender")
    .Range("A2:AV2").Borders.Weight = xlThin
    For MyRow = 3 To 93 Step 3
    For MyCol = 1 To 48 Step 4
    With Cells(MyRow, MyCol).Resize(3, 4)
    .Borders(xlEdgeTop).Weight = xlThin
    .Borders(xlEdgeLeft).Weight = xlThin
    .Borders(xlEdgeRight).Weight = xlThin
    .Borders(xlEdgeBottom).Weight = xlThin
    End With
    Next
    Next
    End With
    With Application
    .Calculation = MyCalculation
    .ScreenUpdating = True
    .EnableEvents = True
    End With
    End Sub
    
    und ... gehts nun schneller?
    Gruß Matthias
    Anzeige
    AW: dann machen wirs eben schneller ...
    05.11.2018 20:35:57
    F.
    Hallo Matthias,
    zuerst Danke für Deine Mühe die Du Dir machst. Aber leider geht jetzt gar nichts mehr. Beim Aufruf des
    Makro, kommt gleich "keine Rückmeldung" oben in der Leiste und er "nudelt" rum, bis ich Excel schließe.
    Meine Datei ist die gleiche, wie Du sie auch zur Verfügung hast. Sind halt bei mir ein paar Ereignisse
    mehr eingetragen, wie in der Musterdatei von Excel-Inside. Aber das dürfte ja wohl keine Rolle spielen,
    oder? Vielleicht fällt Dir noch was besonderes ein, damit es doch noch schneller geht!!!
    Viele Grüße
    Frieder
    AW: dann machen wirs eben schneller ...
    05.11.2018 23:11:04
    Daniel
    HI
    probier mal, ob das schneller ist
    Sub Makro1()
    Dim r As String
    Dim s As Long
    Dim z As Long
    For z = 3 To 95 Step 3
    r = ""
    For s = 1 To 48 Step 4
    r = r & "," & Cells(z, s).Resize(3, 4).Address(0, 0)
    Next
    Range(Mid(r, 2)).BorderAround xlContinuous, xlThick
    Next
    End Sub
    
    Gruß Daniel
    Anzeige
    letzter Versuch ...
    06.11.2018 05:27:29
    Matthias
    Hallo Frieder
    Meine Datei ist die gleiche, wie Du sie auch zur Verfügung hast
    Um das zu prüfen, müsste(n) ich/wir Deine Datei sehen.
    Mein Code braucht bei mir weniger als 1 Sekunde:
    Hab jetzt den Vorschlag von Daniel mit eingepflegt.
    Minimal schneller als vorher, aber eben schneller(also besser)
    statt:
          .Borders(xlEdgeTop).Weight = xlThin
    .Borders(xlEdgeLeft).Weight = xlThin
    .Borders(xlEdgeRight).Weight = xlThin
    .Borders(xlEdgeBottom).Weight = xlThin
    

    nur noch:
          .BorderAround xlContinuous, xlThick 'Tipp von Daniel
    
    Der ganze Code also:
    Sub RahmenThick()
    Dim MyRow&, MyCol&
    Dim MyCalculation
    With Application
    MyCalculation = .Calculation
    .Calculation = False
    .ScreenUpdating = False
    .EnableEvents = False
    End With
    With Worksheets("Jahreskalender")
    .Range("A2:AV2").Borders.Weight = xlThick
    For MyRow = 3 To 93 Step 3
    For MyCol = 1 To 48 Step 4
    With .Cells(MyRow, MyCol).Resize(3, 4)
    .BorderAround xlContinuous, xlThick 'Tipp von Daniel
    '     .Borders(xlEdgeTop).Weight = xlThick
    '     .Borders(xlEdgeLeft).Weight = xlThick
    '     .Borders(xlEdgeRight).Weight = xlThick
    '     .Borders(xlEdgeBottom).Weight = xlThick
    End With
    Next
    Next
    End With
    With Application
    .Calculation = MyCalculation
    .ScreenUpdating = True
    .EnableEvents = True
    End With
    End Sub
    

    Wobei Du bei:
     .BorderAround xlContinuous, xlThick
    
    auch das xlContinuous weglassen könntest und hättest dann eine gestrichelte Umrahmung.
    Desweiteren könntest Du genau dort die Rahmenfarbe mitgeben.
    z.B:
    .BorderAround xlContinuous, ColorIndex:=5, Weight:=xlThick
    
    Ich würde es ja gerne an Deiner Orginaldatei testen.
    Dazu musst Du die Datei aber hier hochladen.
    wie bereits erwähnt: bei mir weniger als 1 Sekunde!
    Gruß Matthias
    Anzeige
    AW: letzter Versuch ...
    06.11.2018 10:31:59
    F.
    Hallo Matthias, Hallo Daniel,
    beide Ausführungen sind jetzt sehr schnell und ich kann jetzt das Makro aussuchen, für welchen Zweck ich es gerade benötige ohne große Umstellungen vorzunehmen. Was den PDF Ausdruck betrifft, weil dünne Linien nicht alle angezeigt werden, ist Euch da etwas darüber bekannt?
    Wenn ich z. B. auch die Bezeichnungen für Tag, Wochentag umrahmen will, wie muss ich das dann eingeben? (Also was in A3, B3:B4, und B5 steht, fortführend für den ganzen Kalender) Ich kann es mir schon vorstellen wie es gehen könnte, aber das umzusetzen ist natürlich für mich nicht so einfach. Deshalb bin ich auch hier wieder auf Euere Hilfe angewiesen.
    Vielen Dank schon mal im voraus.
    Viele Grüße
    Frieder
    Anzeige
    AW: letzter Versuch ...
    06.11.2018 10:50:37
    Daniel
    Hi
    wenn du komplexere Rahmenformatierungen vor hast, wird's natürlich aufwendiger das zu programmieren.
    oder du greifst meinen anderen Vorschlag auf und erstellst dir ein Vorlagenblatt, welches nur die Rahmenlinien enthält (manuell erstellt).
    wenn du dann die Rahmenlinien wieder aktualisieren willst, kopierst du erst dieses Vorlagenblatt (damit die Vorlage erhalten bleibt) und kopierst dann deinen Vorhandenen Kalender mit der Option Alles_ohne_Rahmen in die Kopier der Vorlage.
    hat den Vorteil, dass du die Rahmenlinien beliebig wählen kannst, ohne was programmieren zum müssen.
    das Copy-Paste ist dann ja ein ganz einfaches Marko, welches auch nie geändert werden muss.
    außerdem kannst du das im Bedarfsfall auch ohne makro schnell mit ein paar klicks ausführen.
    Gruß Daniel
    Anzeige
    Rahmen innen ...
    06.11.2018 11:22:06
    Matthias
    Hallo Frieder
    Nur mal so auf die Schnelle
    Dim MyAdr As Object
    Application.ScreenUpdating = False
    Application.Goto Reference:="Print_Area"
    Set MyAdr = Range(Selection.Address)
    MyAdr.Borders.LineStyle = xlThin
    Set MyAdr = Nothing
    Range("A1").Select 'nur weil ich den Druckbereich selektiert habe
    Application.ScreenUpdating = True
    

    So sieht dann aus:
    Userbild
    Gruß Matthias
    Rahmen innen ... ohne Select
    07.11.2018 05:56:48
    Matthias
    Hier nochmal ohne Select,
    ein Druckbereich muss natürlich gesetzt sein.
    Im Kalender ist es ja der Bereich: $A$1:$AV$95
    Dim MyAdr As Object
    Application.ScreenUpdating = False
    Set MyAdr = Range(Tabelle2.PageSetup.PrintArea)
    MyAdr.Borders.LineStyle = xlThin
    Set MyAdr = Nothing
    Application.ScreenUpdating = True
    
    Oder Du ersetzt diese Zeile:
  • Set MyAdr = Range(Tabelle2.PageSetup.PrintArea)

  • durch diese Zeile:
  • Set MyAdr = Range("$A$3:$AV$95")

  • dann bleibt die Zeile2(die Monate) unberührt.
    Die Rahmen löschen geht dann so:
  • MyAdr.Borders.LineStyle = xlNone

  • Gruß Matthias
    Anzeige
    AW: Rahmen innen ... ohne Select
    07.11.2018 20:45:46
    F.
    Hallo Matthias,
    möchte mich kurz melden, waren bei dem schönen Wetter den ganzen Tag unterwegs und deshalb hatte der Laptop auch mal eine längere Pause. Ja, zu Deinem Skript kann ich noch gar nichts vermelden, weil ich es noch gar nicht ausprobiert habe bzw. ausprobieren konnte, weil ich auch gar nicht wüsste, wie ich das Skript starten / ausführen kann / muss? Da musst Du mir schon etwas auf die Sprünge helfen!
    Vielen Dank und viele Grüße
    Frieder
    AW: Rahmen innen ... ohne Select
    08.11.2018 14:48:22
    Matthias
    Hallo
    Das war doch nur der Programmteil der zwischen Sub() und End Sub steht
    Komplett so:
    Sub Innen()
    Dim MyAdr As Object
    Application.ScreenUpdating = False
    'Set MyAdr = Range(Tabelle2.PageSetup.PrintArea)
    Set MyAdr = Range("$A$3:$AV$95")
    MyAdr.Borders.LineStyle = xlThin
    Set MyAdr = Nothing
    Application.ScreenUpdating = True
    End Sub
    
    Einfach das Makro einer Befehlschaltfläche zuweisen.
    Gruß Matthias
    AW: Rahmen innen ... ohne Select
    08.11.2018 17:20:19
    F.
    Hallo Matthias,
    wie immer zuerst Danke für Deine Hilfe.
    Wenn man weiß wie es zu benützen ist, ist bekanntlich alles viel einfacher. Jetzt mit Deiner Hilfestellung klappt das Ausfüllen der Zellen wunderbar und vor allem "ruckizucki". Nur ein Wermutstropfen ist bei der ganzen Sache vorhanden, dass in der Druckvorschau die ganzen Linien - bis auf ein paar einzelne - alle verschwunden sind. Dabei spielt es keine Rolle, ob PDF, oder Lokaler Drucker ausgewählt wurde. Das ist natürlich nicht so gut und der Sache nicht dienlich. Es nützt mir ja wenig, wenn die Linien in der Tabelle sichtbar sind, aber nachher beim Ausdruck auf Papier oder beim PDF Druck dann fehlen. Deshalb schlage ich vor, dass wir das Problem mit den Linien einmal ruhen lassen, bis ich zu Hause bin und den Kalender auch auf Papier ausdrucken kann.
    Wo Du mir aber noch mal behilflich sein kannst, wäre beim "Zellen verbinden, Textausrichtung etc." Ich würde gerne jeweils die Zellen Range("D3:D4, D6:D7, D9:D10, D12:D13, D15:D16 usw. miteinander verbinden, damit ich bei zwei Ereignissen die wo auf einen Tag fallen. mehr Platz für Schrift, Ausdehnung etc. hätte. Mit dem Makro Recorder habe ich es schon versucht, was auch funktioniert hat. Aber das dauert und dauert eine Ewigkeit. Mit VBA geht es bestimmt schneller? Du brauchst mir nur das Grundgerüst erstellen, den Rest mit den restlichen Ranges ergänze ich dann.
    Also, nochmals vielen Dank im voraus.
    viele Grüße
    Frieder
    nachgefragt ...
    08.11.2018 17:58:46
    Matthias
    Hallo
    Versteh ich nicht ganz.
    Bsp:
    Einstellungen

     EFG
    4EreignisDatumWiederkehr
    7Geburtstagsfeier 15:0002.01.2019 
    8Feuerwerk 22:0002.01.2019 


    Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
    Wieso willst Du aber nun D6:D7 verbinden, mit der Begründung:
    damit ich bei zwei Ereignissen die wo auf einen Tag fallen mehr Platz für Schrift, Ausdehnung etc. hätte.
    Wo doch die Einträge in D8 stehen!?
    Userbild
    Erklärs mir bitte.
    Gruß Matthias
    AW: nachgefragt ...
    08.11.2018 21:05:17
    F.
    Hallo Matthias,
    in meinem Kalender - genauso wie in unserem Referenzkalender - gibt es 3 Zeilen pro Tag. In der ersten Zeile war die KW eingetragen, die wird ja jetzt in der Wochenmitte am Mi angezeigt und dadurch ist ja jetzt diese Zeile frei geworden. Und eben diesen freien Platz möchte ich besser nutzen, in dem ich diese beiden Zellen miteinander verbinde. Ich kann dadurch die Schrift von den Ereignis Einträgen etwas größer gestalten und mittels Zeilenumbruch auch dementsprechend Platz für Doppel Einträge schaffen. Momentan werden ja auf Zeile D4, D7, D10 usw. die Feiertage eingetragen, wobei bei Schriftgröße 24 je nach Länge des Feiertagsnamen, das Ende der Fahnenstange bereits erreicht ist. Da es ja auch Feiertags Konstellationen gibt, wo zwei Feiertage (Ereignisse) auf einen Tag fallen (2006 = 4. Advent / Heiligabend, 01.05.2008 = 1.Mai / Christi Himmelfahrt, 06.12.2009 = Nikolaustag / 2. Advent, 14.02.? = Valentinstag / Aschermittwoch, 31.10.? Reformationstag / Halloween) kann man dann durch den Zeilenumbruch die Anzeige der Namen besser ablesen, weil das ganze besser verteilt wird. Aus diesem Grunde würde ich gerne wegen der Leserlichkeit diese Zellen miteinander verbinden. Man könnte ja jetzt auch sagen, man macht das bei den feststehenden Feiertagen händisch, wäre ja auch kein Problem, aber dann gibt es immer noch die Möglichkeit, dadurch die Lesbarkeit der sich wechselnden Ereignisse zu erhöhen bzw. zu verbessern. In D5, D8, D11 usw. stehen bei mir die Geburtstage und ähnliche Sachen. Soviel also dazu.
    Wie ich schon erwähnt habe, Du musst mir nur das "Gerippe" erstellen, wie es funktionieren kann. Die Range der einzelnen Zellen die verbunden werden sollen, von Jan. - Dez. trage ich dann selber ein. Wenn es natürlich mit "Cells, Steps" & Co. auch geht, soll es mir recht sein. (Wenn machbar, Textausrichtung: Links (Einzug) / Zentrieren, Zeilenumbruch / Zellen verbinden).
    Wie immer vielen Dank im voraus.
    Viele Grüße
    Frieder
    AW: nachgefragt ...
    09.11.2018 12:28:46
    Matthias
    Hallo
    Seh ich das richtig, das Du das so haben willst?
    Userbild
    Gruß Matthias
    AW: nachgefragt ...
    09.11.2018 15:07:29
    F.
    Hallo Matthias,
    ja, so wäre das in Ordnung und so stelle ich mir das für jeden Tag vor. Aber wie bereits erwähnt, ich brauche nur den "Schlüssel", aufschließen kann ich dann selber. Wenn es natürlich ohne die ganzen Ranges erst auszuarbeiten geht, soll es mir auch recht sein.
    Freue mich auf Deine Ausfertigung
    und grüße recht herzlichst.
    Frieder
    dann müssen die Formeln verschoben werden ...
    09.11.2018 16:49:14
    Matthias
    Hallo
    Dazu müssten aber alle Formeln aus der mittleren Zelle/Tag in die oberste Zelle.
    Erst dann könnte man den Zellverbund setzen. Ist Dir das bewusst?
    Es ist zwar auch möglich die Formeln in der mittleren Zelle zu belassen
    und z.B. in A3 die Formel =A4 zu benutzen und danach die Verbundzelle per Pinsel zu übertragen.
    Das ist aber eher riskant! Denn wenn Du einmal die Formel in A3 löschst ist die Formal in A4 auch futsch.

    Für was also entscheidest Du Dich?
    Gruß Matthias
    AW: dann müssen die Formeln verschoben werden ...
    09.11.2018 20:00:05
    F.
    Hallo Matthias,
    es kämen ja sowieso nur die Formeln in D3:D4 in Frage und da ja die KW in D3 bereits in die Wochenmitte (Mi) per VBA verlagert wurde, ist ja jetzt nur noch in D4, D7, D10 usw. die Formel für die Anzeige der Feiertage eingetragen. Somit dürfte es meines Erachtens keinerlei Probleme mit dem Zellen verbinden von D3:D4 usw. geben. Wenn es Probleme gibt, dann voraussichtlich, wenn man den "Pinsel" zum Formatübertragen nehmen würde. Deshalb wäre mir die Umsetzung mit VBA am liebsten und würde auch am schnellsten gehen.
    Gruß Frieder
    die Formeln müssen erst verschoben werden ...
    09.11.2018 20:12:52
    Matthias
    Hallo Frieder
    Zitat:
    es kämen ja sowieso nur die Formeln in D3:D4 in Frage und da ja die KW in D3 bereits in die Wochenmitte (Mi) per VBA verlagert wurde, ist ja jetzt nur noch in D4, D7, D10 usw. die Formel für die Anzeige der Feiertage eingetragen. Somit dürfte es meines Erachtens keinerlei Probleme mit dem Zellen verbinden von D3:D4 usw. geben.
    Das ist ein Denkfehler!
    Wenn wir jetzt D3 mit D4 verbinden ist die Formel in D4 futsch, weil D3 ja jetzt leer ist!
    Es muss also zwingend die Formel von D4 nach D3 verschoben werden,
    erst dann kann man D3:D4 verbinden. Folgend dann für die anderen Tage.
    Gruß Matthias
    AW: die Formeln müssen erst verschoben werden ...
    09.11.2018 20:33:10
    F.
    Hallo Matthias,
    ich habe vorhin noch mal händisch D3 mit D4 verbunden und es hat ohne Probleme zu bereiten funktioniert.
    Wenn ich jetzt die verbundene Zelle (D3:D4) anklicke, zeigt er mir unter D3 die Formel für den Feiertag.
    Wie vorher schon erwähnt, in D3:D4 ist die Feiertagsformel die einzige Formel, die es überhaupt noch in
    diesen beiden Zellen gibt. (Gilt natürlich für die anderen Tage auch).
    Gruß Frieder
    AW: die Formeln müssen erst verschoben werden ...
    09.11.2018 21:07:19
    Matthias
    Hallo
    Ok, dann probier mal:
    Nur für Januar:
    Verbinden()
    Dim x
    With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
    End With
    'Für Januar Spalte(4)
    For x = 3 To 93 Step 3
    Range(Cells(x, 4), Cells(x + 1, 4)).Merge
    Next
    MsgBox "fertig..."
    With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = xlCalculationAutomatic
    End With
    End Sub
    
    Dauert zwar einen Moment aber evtl. ist das ja Dein Ziel.
    Gruß Matthias
    AW: die Formeln müssen erst verschoben werden ...
    09.11.2018 21:46:46
    F.
    Hallo Matthias,
    habe es ausprobiert, alles O.K. bis auf den Zeilenumbruch, der fehlt noch in der Sammlung. Sonst alles
    Super. Zeit dafür, ca. 1 Min.
    Vorab schon mal Danke.
    Gruß Frieder
    WrapText = True
    09.11.2018 21:57:58
    Matthias
    Hallo
    Hier mit Zeilenumbruch:
     For x = 3 To 93 Step 3
    With Range(Cells(x, 4), Cells(x + 1, 4))
    .Merge
    .WrapText = True
    End With
    Next
    
    Gruß Matthias
    AW: WrapText = True
    09.11.2018 22:18:35
    F.
    Hallo Matthias,
    alles ausprobiert, alles O.K. Zeilenumbruch ist jetzt auch vorhanden, für die Doppelereignisse. Jetzt fehlt nur noch das "iDüpfele" und zwar die Code Komplettierung für die restlichen Monate.
    Vorab schon mal Danke.
    Gruß Frieder
    Schleife außen rum ...
    09.11.2018 22:25:10
    Matthias
    Hallo Frieder
    Dim x&, i&
    For i = 4 To 48 Step 4
    For x = 3 To 93 Step 3
    With Range(Cells(x, i), Cells(x + 1, i))
    .Merge
    .WrapText = True
    End With
    Next
    Next
    
    und Warten!
    Gruß Matthias
    AW: Schleife außen rum ...
    09.11.2018 23:40:30
    F.
    Hallo Matthias,
    auch die letzte Hürde ist genommen, alle vorgesehenen Zellen sind jetzt miteinander verbunden und die Tage mit den Doppelereignissen passen sich automatisch dem vorhandenen Platz an. Zeitdauer für die Abarbeitung lag bei ca.10 Min. (Je nach dem muss man halt mal etwas Hand anlegen und die Schriftgröße dementsprechend anpassen, falls es erforderlich sein sollte. Aber das dürfte das kleinste Problem sein.)
    Mit "Eurer Hilfe", Sepp, Daniel und natürlich von Dir Matthias, habe ich in den letzten Tagen viel von Euch lernen können und deshalb sage ich noch einmal recht herzlichst Danke Euch Allen. Sollte ich wieder mal Hilfe benötigen, melde ich mich einfach wieder.
    Viele Grüße
    Frieder
    Schriftgröße, Schriftfarbe ...
    10.11.2018 06:56:38
    Matthias
    Hallo Frieder
    Du kannst natürlich alle möglichen Eigenschaften dem Code mitgeben
    Hier mal mit blauer Schriftfarbe und Schriftgröße 10
    Sub Merge_()
    Dim x, i
    With Application
    .ScreenUpdating = False '....................... Bilschirmaktualisierung aus
    .EnableEvents = False '......................... Ereignismakros aus
    .Calculation = xlCalculationManual '............ automatische Berechnung aus
    End With
    For i = 4 To 48 Step 4 '........................ Spaltenschleife (Monate)
    For x = 3 To 93 Step 3 '....................... Zeilenschleife   (Tage)
    With Range(Cells(x, i), Cells(x + 1, i)) ' ... Referenzbereich
    .Merge '...................................... Zellen verbinden
    .WrapText = True '............................ Zeilenumbruch
    .HorizontalAlignment = xlLeft '............... Ausrichtung(linksbündig)
    .VerticalAlignment = xlCenter '............... Ausrichtung(mittig)
    .Font.Color = vbBlue '........................ Schriftfarbe
    .Font.Size = 10 '............................. Schriftgröße
    End With
    Next
    Next
    With Application
    .ScreenUpdating = True '........................ Bilschirmaktualisierung an
    .EnableEvents = True '.......................... Ereignismakros an
    .Calculation = xlCalculationAutomatic '......... automatische Berechnung an
    End With
    End Sub
    
    Das das bei Dir so lange dauert kann ich natürlich nicht beeinflussen.
    Bei mir dauert das alles max. 2 Sekunden.
    Gruß und schönes WE
    Matthias
    AW: Schriftgröße, Schriftfarbe ...
    10.11.2018 11:15:51
    F.
    Hallo Matthias,
    schön, dass Du dich noch mal mit einer ausführlichen Darstellung des SUB meldest. Die Aufstellung ist sehr übersichtlich und zeigt, was es noch so alles zum Einstellen gibt. Ja, was die Abarbeitungszeit des SUB betrifft, damit muss ich eben leben. Bevor ich das im richtigen Kalender ausprobiert hatte, habe ich es erst einmal in einem leeren Tabellenblatt getestet, wo es auch innerhalb ein paar Sekunden erledigt war. Vielleicht dauert es deswegen länger, weil mindestens eine Zelle mit einer Formel belegt ist und durch die "bedingte Formatierung" (Neue Ausrichtung der Zellen für die Einfärbung der Wochenenden) wird dadurch vermutlich viel Rechenzeit verbraucht. Aber wie schon gesagt, das nimmt man in Kauf und macht halt in der Zeit was Anderes. Außerdem kommt das ja nicht all zu oft vor, dass man die Zellen miteinander verbindet. Normalerweise rät man wieso davon ab (habe ich gelesen) Zellen zu verbinden. Aber in meinem Fall, wollte ich es ja unbedingt so haben.
    Noch mal vielen Dank für Deine Hilfe und Ausfertigungen. Zum Schluss hätte ich noch ein Zitat: "Der Applaus ist das Brot des Künstlers". Davon bekommt Ihr von mir recht viel. Leider könnt Ihr euch dafür nicht all zu viel kaufen und deswegen würde ich einfach mal vorschlagen, dass die Verantwortlichen des Forums sich mal Gedanken über ein "Spendenkonto" machen sollten. Jeder kann freiwillig, wenn er zufrieden mit der angebotenen Lösung war, eine kleine Spende auf ein spezielles Konto überweisen. Mit diesem Konto könnten ja "Soziale Einrichtungen, etc." unterstützt werden, oder auch unschuldig in Not geratene "Programmierer", die sich hier im und am Forum beteiligen.
    In diesem Sinne, nochmals viele Grüße
    und auch ein schönes Wochenende
    Frieder
    AW: Schriftgröße, Schriftfarbe ...
    13.11.2018 14:57:54
    F.
    Hallo Matthias,
    unser "Kalender" lässt Uns nicht los! Ich hatte gedacht, jetzt ist alles O.K. aber leider Pech gehabt. Ich hatte ja mehrmals darüber berichtet, dass beim PDF Ausdruck immer ein Großteil der Linien (Rahmen) verschwindet. Jetzt weiß ich auch warum: Die Ursache dafür ist die Einbringung der KW. Ich habe ja jedesmal wenn ich am Kalender eine Änderung gemacht hatte, eine Kopie gemacht. Von diesen Kalenderkopien habe ich jeweils einen PDF Ausdruck gemacht und siehe da, bis vor der KW war bei PDF alles O.K. Mit KW begannen die Schwierigkeiten mit dem Linien verschwinden. Habe schon alles mögliche versucht, die kompletten "Bedingten Formatierungen" gelöscht, verborgene Spalten gelöscht, die nicht mehr gebraucht wurden. Hat aber alles nichts genützt. Die Linien bleiben einfach teilweise bei PDF verschwunden. (siehe Anhang). Das sonderbare ist, dass im Referenzkalender "EXCEL-Inside) alles angezeigt wird. Hast Du eine Idee, woran das liegen könnte?
    Userbild
    Viele Grüße
    Frieder
    achso, mal nachgefragt ...
    06.11.2018 16:40:10
    Matthias
    Hallo Frieder
    Zitat:
    beide Ausführungen sind jetzt sehr schnell
    Mich interessiert jetzt noch woran es lag das bei Dir gar nix mehr ging.
    Gruß Matthias
    AW: achso, mal nachgefragt ...
    06.11.2018 20:04:50
    F.
    Hallo Matthias,
    woran das lag, dass beim ausprobieren Deines Makro die Info "keine Rückmeldung" gekommen ist, weiß ich auch nicht genau. Die Meldung kam ja beim ausprobieren Deiner ersten Makros schon, die ca. 5 Min. für die Ausführung gebraucht haben. Irgendwie scheint es an meinem Laptop oder auch an Excel 10 zu liegen. Vielleicht habe ich auch zu viele Ereignisse wie Feiertage, Geburtstage und sonstige Formatierungen im Kalender, die Dein Referenzkalender nicht hat. Nachdem Daniel ja den Vorschlag mit dem "BorderAround" Befehl ins Spiel gebracht hatte, habe ich das in Deinem Makro eingebaut und siehe da, auf einmal ging es erheblich schneller. Aber so um 1 Minute dauert es trotzdem noch, was ja für mich und meine Zwecke ausreichend ist. Wie Du auf Deine 1 Sekunde kommst, ist mir aber ein Rätsel? Hängt natürlich vermutlich von der Hard - und Software ab, die Du verwendest und die ich natürlich nicht kenne.
    Viele Grüße
    Frieder
    AW: mit Blattreferenz ...
    05.11.2018 17:55:04
    Daniel
    Hi
    man sollte in Excel vermeiden, jede Zelle einzeln zu bearbeiten, sondern möglichst viele Zellen in einem Schritt.
    In deinem Fall könntest du so vorgehen, dass du erst einen Tagesblock wie gewünscht formatierst und dann diese Formatierung per Copy-Paste auf die anderen Zellen überträgst:
    Sub RahmenThick2()
    Dim MyRow&, MyCol&
    With Worksheets("Jahreskalender")
    .Range("A2:AV2").Borders.Weight = xlThick
    With .Range("A3:D5")
    .BorderAround xlContinuous, xlThick
    .Copy
    .Resize(.Rows.Count * 31, .Columns.Count * 12).PasteSpecial xlPasteFormats
    End With
    End With
    End Sub
    

    das macht auch das Testen viel angenehmer, wenn man sich im Einzelstepmodus nicht mehr durch die Schleifen klicken musst.
    die restlichen Formatierungen sollest du natürlich auch noch im Block für den ersten Tag durchführen, bevor du dann die Formate in die restlichen Zellen überträgs
    und falls es nicht aufgefallen ist:
    wenn alle vier äußeren Rahmenlinien gleich sein sollen, gibt's dafür einen eigenen Befehl (BorderAround), so dass man nicht jede Seite einzeln setzen muss.
    Gruß Daniel
    AW: mit Blattreferenz ...
    05.11.2018 20:54:48
    F.
    Hallo Daniel,
    Danke für Deine Hilfe. Dein Makro ist zwar sehr schnell. Aber durch das Kopieren gehen meine ganzen Formatierungen des Kalenders verloren. Ist wohl eher dafür geeignet, wenn man im Begriff ist, einen neuen Kalender anzulegen. Ich benötige für meinen Kalender nur eine Möglichkeit, die Rahmung (Linien Art, Linien Stärke) mal schnell abzuändern.
    Viele Grüße
    Frieder
    AW: mit Blattreferenz ...
    05.11.2018 22:55:42
    Daniel
    Hi
    dann musst du hoffen, das Matthias seine Methode noch etwas beschleunigen kann.
    vielleicht wirds ja schneller, wenn du in seiner Schleife auch das "BorderAround" verwendest und nicht jede Seite der Zelle einzeln formatierst.
    ansonsten würde mir noch folgender Workaround einfallen, wenn du die Rahmenlinien wieder einheitlich formatieren willst:
    lege die rahmenlinien mit meiner Methode auf einem neuen leeren Blatt an.
    kopiere dann deinen Kalender im alten Blatt und füge ihn im neuen Blatt mit der Option "alles ohne Rahmen" ein (in VBA .PasteSpecial Paste:=xlPasteAllExceptBorders)
    damit werden alle Inhalte und Formate außer den Rahmenlinien übertragen. dh du kombinierst quasi die alten Inhalte mit den neuen Rahmenlinien.
    Danach kannst du dann den alten Kalender löschen und mit dem neuen weiter arbeiten.
    Gruß Daniel
    AW: mit Blattreferenz ...
    06.11.2018 00:11:15
    F.
    Hallo Matthias, Hallo Daniel,
    so wie es momentan aussieht ist das Makro1 von Daniel der Favorit. Da es schon spät ist, werde ich Morgen noch mal ein paar Test durch führen. Melde mich Morgen im Laufe des Tages wieder.
    Auf jeden Fall mal vorab schon mal vielen Dank.
    Viele Grüße
    Frieder
    noch ne Variante
    06.11.2018 01:48:12
    Daniel
    
    Sub test()
    Dim rngR As Range
    Dim rngC As Range
    Dim x As Long
    Set rngR = Rows(3)
    For x = 1 To 30
    Set rngR = Union(rngR, Rows(3 + 3 * x))
    Next
    Set rngC = Columns(1)
    For x = 1 To 11
    Set rngC = Union(rngC, Columns(1 + 4 * x))
    Next
    With Range("A3").Resize(31 * 3, 12 * 4)
    Intersect(.Cells, rngR).Borders(xlEdgeTop).Weight = xlThick
    Intersect(.Cells, rngC).Borders(xlEdgeLeft).Weight = xlThick
    .Borders(xlEdgeRight).Weight = xlThick
    .Borders(xlEdgeBottom).Weight = xlThick
    End With
    End Sub
    
    Gruß Daniel
    AW: Rahmen um Kalender mit VBA
    05.11.2018 05:35:40
    Hajo_Zi
    benutze Bedingte Formatierung.
    Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
    Schau mal hier
    Eine hochgeladene Arbeitsmappe erhöht die Wahrscheinlichkeit, dass Du eine Lösung für Dein Problem erhältst.
    Erstelle folglich bitte eine Demomappe, aus der deine Aufgabenstellung klar erkennbar ist und lade diese hoch.
    Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, solltest du diese Daten anonymisieren bzw. pseudonymisieren.
    Falls Du den Download des Forums nicht benutzen möchtest beachte bitte: von unsicheren Servern file-upload lade ich keine Datei herunter (lt. Einschätzung meines Virenprogramms)

    Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
    Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
    AW: Rahmen um Kalender mit VBA
    05.11.2018 05:39:28
    Gerd
    Moin
    Sub Makro3()
    With Range("a3:av95")
    .Borders(xlDiagonalDown).LineStyle = xlNone
    .Borders(xlDiagonalUp).LineStyle = xlNone
    With .Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .ColorIndex = xlAutomatic
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With .Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .ColorIndex = xlAutomatic
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With .Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .ColorIndex = xlAutomatic
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With .Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .ColorIndex = xlAutomatic
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With .Borders(xlInsideVertical)
    .LineStyle = xlContinuous
    .ColorIndex = xlAutomatic
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With .Borders(xlInsideHorizontal)
    .LineStyle = xlContinuous
    .ColorIndex = xlAutomatic
    .TintAndShade = 0
    .Weight = xlThin
    End With
    End With
    End Sub
    

    Gruß Gerd

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige