Formatierung automatisch wiederherstellen nach einer Zellenverschiebung
#1
Hallo Excelfreunde,

In einem Tabellenblatt (Excel 16) haben haben alle Zellen eine Randformatierung (Rahmen).

Oft werden in der Tabelle ganze Bereiche nach oben oder nach unten verschoben.
Dabei entsteht jeweils auf dem Blatt, wo die verschobenen Zellen vorher standen, ein leerer weißer Bereich ohne Randformatierung.

Gibt es eine Lösung, wie dieser leere Bereich wieder automatisch nach dem Verschieben mit der ursprünglichen Formatierung versehen wird?

Wer kann mir helfen?

Hager


Angehängte Dateien
.xlsx   002_Planung_Format-Zellen.xlsx (Größe: 16,89 KB / Downloads: 20)
Top
#2
Hallo
statt zu verschieben, 
warum blendest du die leeren Zeilen nicht einfach aus,
oder du löscht die überflüssigen Zeilen? > ein erneutes einfügen neuer Zeilen würde auch das Zellformat übernehmen.

Gruß Holger
Top
#3
Hallo Holger,

leere Zeilen kann ich nicht löschen; alle Blätter sollen nach dem Ausdruck dieselbe Zeilenanzahl haben.
Jetzt formatiere ich nach dem Verschieben noch händisch die weißen und leeren Bereiche.
Dies sollte in Zukunft automatisch geschehen.

Gruß Hager
Top
#4
Hallo Hager,

sind die leeren Zellen, die frei sind/werden, immer mit den gleichen Rahmenformatierungen versehen? Dann wäre eine VBA-Lösung nicht so kompliziert, falls das für dich in Frage kommt.
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Top
#5
Hallo Lucky Joe,

alle leeren Zellen sollen immer mit derselben Rahmenformation versehen werden (immer dünner Rahmen ringsherum).
So waren sie schon vor dem Verschieben formatiert.
Im Beispiel der Exceltabelle Blatt 1a sind es immer die benachbarten Zellen B-C-D-E-F einer Zeile.

Herzliche Grüße aus Franken
Hager
Top
#6
Hallo Hager,

dann probiere es mal mit folgendem VBA-Code, den du im VBA-Editor bei "Tabelle1 (Route)" einfügen musst:

Code:
Private Sub Worksheet_Calculate()
   
    Dim MyBereich As Range
    Dim Zelle As Range
 
    Application.ScreenUpdating = False
   
    Set MyBereich = Range("B23", "F56")
   
    For Each Zelle In MyBereich
        If IsEmpty(Zelle) Then
            With Zelle.Borders(xlEdgeLeft)
                .LineStyle = xlContinuous
                .ColorIndex = xlAutomatic
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With Zelle.Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .ColorIndex = xlAutomatic
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With Zelle.Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .ColorIndex = xlAutomatic
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With Zelle.Borders(xlEdgeRight)
                .LineStyle = xlContinuous
                .ColorIndex = xlAutomatic
                .TintAndShade = 0
                .Weight = xlThin
            End With
           
        End If
    Next
   
    Application.ScreenUpdating = True

End Sub


Viel Erfolg
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Top
#7
Hallo Lucky Joe,




vielen Dank für Deine nette Hilfe bei der Lösung meines Problems bei der Erstellung der Radtourenliste.

Mit Deinem Code habe ich das Problem beim Verschieben und Neuformatieren für einen Bereich in den Griff bekommen.

MyBereich = Range("B23", "F56") war jedoch nur als Beispiel in der verkürzten Excel-Radtourenliste eingefügt.



Problematisch ist, daß die ganze Radtourenliste aus 8 Doppelseiten (1a, 1b, bis 8a und 8b) besteht und sich auf einem Arbeitsblatt befinden.



Diese 16 zu korrigierenden Bereiche sind:



Range("B74", "F134"), Range("H74", "L134"), Range("N74", "R134"), Range("T74", "X134"),

Range("B143", "F203"), Range("H143", "L203"), Range("N143", "R203"), Range("T143", "X203"),

Range("B212", "F272"), Range("H212", "L272"), Range("N212", "R272"), Range("T212", "X272"),

Range("B281", "F341"), Range("H281", "L341"),Range("N281", "R341"), Range("T281", "X341").



Die Lösung, wie man den im Code enthaltenen Einzel-Range auf diese 16 Bereiche vergrößert habe ich nicht finden können.



Viele Grüße


Hager
Top
#8
Hi,

ich halte das mit mehreren Tabellen auf einem Blatt für keine glückliche Lösung; dennoch: wenn du mehrere Bereich zusammenführen möchtest, dann gibt es dafür den Befehl "Union":
Code:
Set bigRange = Application.Union(Range("Range1"), Range("Range2"))
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Top
#9
>  
Hallo Lucky Joe,

nochmals herzlichen Dank für Deine wirklich freundliche Hilfe; die Codes haben mir geholfen nun weiter zu kommen.

Viele Grüße
Hager
Top


Gehe zu:


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