Formatierungen einer Zelle ohne .Copy, .PastSpecial, Zwischenablage usw. übernehmen?

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    Formatierungen einer Zelle ohne .Copy, .PastSpecial, Zwischenablage usw. übernehmen?

    Hi Leute,

    ich will die Formatierung einer Zelle ohne Benutzung der Zwischenablage und den Methoden .Copy, .PasteSpecial usw. usf. auf eine andere Zelle übernehmen.

    Seht ihr eine Möglichkeit, bspw. die Formatierung der entsprechenden Zelle über bspw. ".Interior" auszulesen, den Wert der jeweiligen Formatierung in einer Variable speichern und dann den Wert der Formatierung aus der Variable auszulesen und auf die neue Zelle amzuwenden?

    Hat das schon mal jemand gemacht?
    Ja das ginge schon.
    Am besten machst dir ein Array mit einem Userdefinierten Typ der alle Properties enthält die du brauchst (Value, Color, Font usw).
    Dann durchläufst die Range die du "kopieren" willst und füllst das Array, dann durchläufst das Array und befüllst die neue Range.
    Das ist meine Signatur und sie wird wunderbar sein!

    Visual Basic-Quellcode

    1. Private Function WriteFormatToSheet(ByVal wsNew As Worksheet, ByVal i As Integer, ByVal tmpRng As range)
    2. Dim j As Integer
    3. Dim bold As Boolean
    4. With tmpRng
    5. With .font
    6. bold = .bold
    7. End With
    8. End With
    9. End Function


    Ich hab hier mir jetzt mal eine Funktion gemacht. An diese Funktion werden das Worksheet, i als Zeilencounter übergeben, in welche Zeile die Formate geschrieben werden sollen, und die Range in der die Zelle gefunden wird, in der die Format stecken.

    Das Problem dann in diesem With Block ist, dass ich einen Laufzeitfehler 91 bekomme, wenn die Ausführung bei .font angelangt ist.

    Kannst du mir vielleicht einen beispielhaften Code geben, wie du das mit dem Array meinst?
    Vielen, vielen Dank für deine Hilfe. Ich habe das Problem nun vollständig alleine in den Griff bekommen.

    Visual Basic-Quellcode

    1. Private Function WriteFormatToSheet(ByVal ws As Worksheet, ByVal i As Integer, ByVal j As Integer, ByVal tmpRng As range)
    2. With tmpRng.Font
    3. ws.Cells(i + 1, j).Font.Size = .Size
    4. ws.Cells(i + 1, j).Font.bold = .bold
    5. ws.Cells(i + 1, j).Font.Italic = .Italic
    6. ws.Cells(i + 1, j).Font.Color = .Color
    7. ws.Cells(i + 1, j).Font.Strikethrough = .Strikethrough
    8. ws.Cells(i + 1, j).Font.Subscript = .Subscript
    9. ws.Cells(i + 1, j).Font.Superscript = .Superscript
    10. ws.Cells(i + 1, j).Font.Underline = .Underline
    11. End With
    12. With tmpRng.Interior
    13. ws.Cells(i + 1, j).Interior.Color = .Color
    14. End With
    15. With tmpRng.Borders
    16. ws.Cells(i + 1, j).Borders.LineStyle = .LineStyle
    17. ws.Cells(i + 1, j).Borders.Weight = .Weight
    18. ws.Cells(i + 1, j).Borders.ThemeColor = .ThemeColor
    19. End With
    20. End Function
    um etwas übersichtlicher zu werden, dir Schreibarbeit zu ersparen und auch den Code etwas schneller zu machen, verwende With ...

    Also

    With ws

    with .cells(i+1,j)
    with .Font
    .Size
    ...
    End with
    with .borders...
    end with
    end with

    Ich vermute die Formatierung wird beim Absenden nicht stimmen. Bitte entsprechend einrücken...
    Wenn du mehrere Zellen ansprichst, verwende .Range ("A1:D4") oder .Range(.Cells(1,1),.Cells(4,4)) . Beispielsweise um Rahmen zusetzen oder für alles einen Fontstyle zu setzen. Das geht schneller als jede Zelle einzeln zu manipulieren.
    In meinem Programm (läuft alles über Userforms) schreibe ich beispielsweise unheimlich viel auf eine Excelseite um diese anschließend auszudrucken. Damit habe ich einen enormen Geschwindigkeitszuwachs erzielen können.
    hey @sronny . Willkommen im Forum.

    In deinem Antworteditor hier im Forum gibts über dem Textfenster ein paar Buttons. Einer heißt zB VB 6.0 und ein anderer VB.nET.
    Diese erzeugen und Codetag und damit sieht geposteter Code deutlich übersichtlicher aus und ist besser lesbar(den codetag einfach um Code herum geben).

    Nur ein Hinweis damit man deine Antworten besser lesen kann.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!