Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Zeilenhöhe kopieren

VBA Zeilenhöhe kopieren
jens
Hallo Excel-Profis,
ich hatte heute ein Problem beim kopieren von Daten:
Die Zeilenhöhe wurde nicht mitkopiert und schon paßte nichts mehr.
Habe dann rausgefunden, dass man die gesamte Zeile kopieren kann und er nimmt die Zeilenhöhe mit. Das ist in meinem Fall aber mit viel Löscharbeit verbunden (Grafiken...)
Wie kann man den Bereich kopieren und mit Zeilenhöhen?
Habe als Basis das hier gefunden:
Sub MoellerCh()
Dim wsQuelle As Worksheet, wsZiel As Worksheet
Dim lngZeile As Long
Set wsQuelle = ActiveSheet
Set wsZiel = Sheets("Zischenspeicher")
wsQuelle.Rows("1:1000").Copy Destination:=wsZiel.Range("A1")
For lngZeile = 1 To 1000
wsZiel.Rows(lngZeile).RowHeight = wsQuelle.Rows(lngZeile).RowHeight
Next lngZeile
End 

Sub
Am schönsten wäre ja in dieser Syntax:
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
D.h. man kopiert den Bereich, stellt sich auf das Ziel und fügt alles ein und das mit der  _
Zeilenhöhe.
Weiß jemand wie man das machen kann?
Vielen Dank für Eure Hilfe und ein schönes Wochenende
Viele Grüße Jens


		
Anzeige
AW: VBA Zeilenhöhe kopieren
12.03.2011 09:09:39
Hajo_ZI
Hallo Jens,
ändere die Zeile
wsQuelle.Rows("1:1000").Copy Destination:=wsZiel.Range("A1")
in
wsQuelle.Rows("1:1000").Copy
wsZiel.Range("A1").PasteSpecial Paste:=xlFormats
vor End Sub
Application.CutCopyMode = False
damit werden nur die Zellformate geändert, nicht die Zeilenhöhe oder Spaltenbreite.
Es bleibt Dir nur die zweite Schleife für die Zeilenhöhe.

Anzeige
AW: VBA Zeilenhöhe kopieren
12.03.2011 11:34:09
jens
Hallo Hajo,
vielen Dank - aber wie geht denn das mit der Zeilenhöhe?
Das mit den 1000 Zeilen war ja auch nur etwas was ich zu dem Thema gefunden habe - ich brächte das ja variabel - d.h. immer mit dem Bereich den ich markieren will.
Viele Grüße Jens
AW: VBA Zeilenhöhe kopieren
12.03.2011 12:01:58
Hajo_Zi
Hallo Jens,
in Deinem ersten Beitrag ging es um einen festen Zellbereich, jetzt liest sich das so als ob es um den markierten Berich geht und der soll immer nach A1 kopiert werden?
Option Explicit
Sub MoellerCh()
Dim wsQuelle As Worksheet, wsZiel As Worksheet
Dim lngZeile As Long
Set wsQuelle = ActiveSheet
Set wsZiel = Sheets("Zischenspeicher")
Selection.Copy
wsZiel.Range("A1").PasteSpecial Paste:=xlFormats
Application.CutCopyMode = False
For lngZeile = 1 To Selection.Rows.Count
wsZiel.Rows(lngZeile).RowHeight = wsQuelle.Rows(lngZeile).RowHeight
Next lngZeile
End Sub
Gruß Hajo
Anzeige
AW: VBA Zeilenhöhe kopieren
12.03.2011 12:09:39
jens
Hallo Hajo,
sorry, ich hatte das vielleicht schlecht beschrieben.
Der angeführte Code war etwas was ich dazu gefunden hatte. Quasi als Beispiel/Anregung.
Ich brauche das so:
Ich markiere einen Bereiche und gehe auf strg+c
Dann wechsle ich in einen anderen Bereich und drücke auf strg+v und es soll die Zeilenhöhe kopiert werden.
Ich hatte eben auch noch einen anderen Code gefunden und gepostet.
Viele Grüße und vielen Dank schon einmal Jens
Anzeige
AW: VBA Zeilenhöhe kopieren
12.03.2011 16:10:12
Hajo_Zi
Hallo Jens,
was stimmt an meinen Code nicht?
Gruß Hajo
AW: VBA Zeilenhöhe kopieren
12.03.2011 16:42:18
lutz
Hallo Hajo,
bei mir macht der Code nichts, auch wenn man die Tabelle von "Zwischenspeicher" ändert.
Ich habe jetzt das hier:
Sub SuperKopieren3()
Dim rngSource As Range, rngTarget As Range
Dim iCounter As Integer
Set rngSource = ActiveSheet.Range(Selection.Address)
Set rngTarget = Worksheets("Tabelle1").Range("A200:C205")
rngSource.Copy rngTarget
For iCounter = 1 To rngSource.Rows.Count
rngTarget.Rows(iCounter).RowHeight = _
rngSource.Rows(iCounter).RowHeight
Next iCounter
For iCounter = 1 To rngSource.Columns.Count
rngTarget.Columns(iCounter).ColumnWidth = _
rngSource.Columns(iCounter).ColumnWidth
Next iCounter
End Sub
Der macht das auch gut aber ich muß das Target im Makro festlegen - das ist blöd.
Am Anfang selektiert/markiert er den Bereich der gerade aktiv ist. Eigentlich sollt ja vor Ausführung des Makros bereits strg+c gedrückt worden sein (d.h. Zwischenablage ist gefüllt) und dann geht man nur noch in den Zielbereich und sagt "einfügen" = das Makro welches ich hier suche.
Vielleicht mach ich aber auch beim Ablauf deines Makros etwas falsch? Was wären die Schritte?
Gruß Lutz
Anzeige
AW: VBA Zeilenhöhe kopieren
12.03.2011 16:55:50
Hajo_Zi
Hallo Lutz,
ich habe es jetzt nochmal getestet. Es war noch ein Fehler drin.
Option Explicit
Sub MoellerCh()
Dim wsQuelle As Worksheet, wsZiel As Worksheet
Dim lngZeile As Long
Set wsQuelle = ActiveSheet
Set wsZiel = Sheets("Zischenspeicher")
Selection.Copy
wsZiel.Range("A1").PasteSpecial Paste:=xlFormats
Application.CutCopyMode = False
For lngZeile = 1 To Selection.Rows.Count
wsZiel.Rows(lngZeile).RowHeight = wsQuelle.Rows(Selection.Rows(lngZeile).Row).RowHeight
Next lngZeile
End Sub

Gruß Hajo
Anzeige
AW: VBA Zeilenhöhe kopieren
12.03.2011 18:00:20
lutz
Hallo Hajo,
vielen Dank, jetzt geht es.
Ich habe ja das Blatt Zwischenspeicher gar nicht daher mache ich es so:
Sub MoellerCh()
Dim wsQuelle As Worksheet, wsZiel As Worksheet
Dim lngZeile As Long
Set wsQuelle = ActiveSheet
Set wsZiel = ActiveSheet
Selection.Copy
wsZiel.Range("A1").PasteSpecial Paste:=xlFormats
Application.CutCopyMode = False
For lngZeile = 1 To Selection.Rows.Count
wsZiel.Rows(lngZeile).RowHeight = wsQuelle.Rows(Selection.Rows(lngZeile).Row).RowHeight
Next lngZeile
End Sub
Aus meiner Sicht sollte man jetzt nur noch das
wsZiel.Range("A1").PasteSpecial Paste:=xlFormats
variabel machen, d.h. erst den Quellbereich markieren und dann den Anfangsbereich für das einfügen - das muß ja nicht A1 sein.
Bekommt man das hin? Man kannn es natürlich als Variable nehmen und manuell eintippen aber am schönsten wäre es natürlich, wenn man den Zielbereich einfach mit der Maus ansteueren könnte!
Viele Grüße Lutz
Anzeige
AW: VBA Zeilenhöhe kopieren
12.03.2011 18:05:25
Hajo_Zi
Hallo Lutz,
ich würde vermuten mit der Maus geht nicht, da es nur eine Selection gibt.
Das war mir jetzt auch zu aufwendig mit der variablen Zielzelle, dazu Stand auch nichts im Beitrag.
Man könte mit Programm immer den benutzten Bereich auslesen und es darunter hin kopieren. Aber das war nicht gefordert.
Gruß Hajo
Anzeige
AW: VBA Zeilenhöhe kopieren
12.03.2011 22:01:44
lutz
Hallo Hajo,
vielen Dank für Deine Hilfe, hat mir sehr geholfen.
Josef hatte das noch mal mit Abfragen der Bereiche gemacht.
Vielen lieben Dank und noch einen schönen Abend
Viele Grüße Lutz
AW: VBA Zeilenhöhe kopieren
12.03.2011 18:21:11
Josef

Hallo Lutz,
probier mal.
Sub MoellerCh()
  Dim rngSrc As Range, rngTgt As Range
  Dim lngZeile As Long
  
  On Error Resume Next
  
  Set rngSrc = Application.InputBox("Bitte den Quellbereich auswählen!", "Kopieren", Selection.Address, Type:=8)
  
  If Not rngSrc Is Nothing Then
    Set rngTgt = Application.InputBox("Bitte den Zielzelle auswählen!", "Kopieren", Type:=8)
  End If
  
  On Error GoTo 0
  
  If Not rngSrc Is Nothing And Not rngTgt Is Nothing Then
    rngSrc.Copy
    rngTgt.Cells(1, 1).PasteSpecial Paste:=xlFormats
    Application.CutCopyMode = False
    
    For lngZeile = 1 To rngSrc.Rows.Count
      rngTgt.Cells(1, 1).Resize(rngSrc.Rows.Count, 1).Rows(lngZeile).RowHeight = _
        rngSrc.Parent.Rows(rngSrc.Rows(lngZeile).Row).RowHeight
    Next
    
  End If
  
  Set rngSrc = Nothing
  Set rngTgt = Nothing
End Sub


Gruß Sepp

Anzeige
AW: VBA Zeilenhöhe kopieren
13.03.2011 11:28:30
lutz
Hallo Sepp,
vielen lieben Dank, ist wunderbar so, das erste Abfragen nehme ich mal raus weil man den Bereich schon markiert hat wenn man das Makro startet.
Ist aber genau so wie ich es brauchte.
Vielen Lieben Dank und noch einen schönen Sonntag.
Viele Grüße Lutz
Warum dann offen? o.T.
13.03.2011 12:12:11
Josef
Gruß Sepp

Anzeige
AW: VBA Zeilenhöhe kopieren
12.03.2011 11:55:03
jens
Hallo Hajo,
ich habe hier bei Herber noch etwas gefunden:
Sub SuperKopieren()
Dim rngSource As Range, rngTarget As Range
Dim iCounter As Integer
Set rngSource = Worksheets("Tabelle1").Range("A1:C5")
Set rngTarget = Worksheets("Tabelle2").Range("A1:C5")
rngSource.Copy rngTarget
For iCounter = 1 To rngSource.Rows.Count
rngTarget.Rows(iCounter).RowHeight = _
rngSource.Rows(iCounter).RowHeight
Next iCounter
For iCounter = 1 To rngSource.Columns.Count
rngTarget.Columns(iCounter).ColumnWidth = _
rngSource.Columns(iCounter).ColumnWidth
Next iCounter
End Sub
Jetzt müßte man doch "nur" noch den markierten/kopierten Bereich in rngsource bekommen und das dann da einfügen wo der cursor gerade steht - oder?
Gruß Jens
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zeilenhöhe in Excel mit VBA kopieren und übertragen


Schritt-für-Schritt-Anleitung

Um die Zeilenhöhe in Excel mithilfe von VBA zu kopieren, kannst du folgende Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deinDateiname)", wähle "Einfügen" und dann "Modul".

  3. Kopiere den folgenden Code in das Modul:

    Sub ZeilenhoeheKopieren()
       Dim rngSource As Range, rngTarget As Range
       Dim lngZeile As Long
    
       ' Quellbereich auswählen
       Set rngSource = Selection
       ' Zielbereich festlegen (zum Beispiel: A1)
       Set rngTarget = Application.InputBox("Wähle die Zielzelle:", Type:=8)
    
       ' Kopiere den Quellbereich
       rngSource.Copy
       rngTarget.PasteSpecial Paste:=xlFormats
       Application.CutCopyMode = False
    
       ' Zeilenhöhe übertragen
       For lngZeile = 1 To rngSource.Rows.Count
           rngTarget.Cells(lngZeile, 1).RowHeight = rngSource.Rows(lngZeile).RowHeight
       Next lngZeile
    End Sub
  4. Führe das Makro aus: Markiere den gewünschten Bereich in Excel, gehe zurück zum VBA-Editor und drücke F5, um das Makro auszuführen. Wähle anschließend die Zielzelle aus.


Häufige Fehler und Lösungen

  • Fehler: Das Makro kopiert keine Zeilenhöhe.

    • Lösung: Stelle sicher, dass du die Zeilenhöhe im VBA-Code korrekt überträgst, wie im obigen Beispiel gezeigt.
  • Fehler: Zielbereich wird nicht ausgewählt.

    • Lösung: Achte darauf, dass du beim Aufruf des Makros den Zielbereich über die Eingabeaufforderung auswählst.

Alternative Methoden

Eine einfache Möglichkeit, die Zeilenhöhe zu kopieren, besteht darin, die Funktion "Format übertragen" in Excel zu verwenden. Wähle die Zeile mit der gewünschten Höhe aus, klicke auf das Pinsel-Symbol in der Symbolleiste und übertrage die Formatierung auf die Zielzeile. Dies funktioniert jedoch nicht in Kombination mit VBA.


Praktische Beispiele

Hier sind einige nützliche VBA-Skripte für verschiedene Szenarien:

  1. Kopieren der Zeilenhöhe und -breite:

    Sub ZeilenUndSpaltenKopieren()
       Dim rngSource As Range, rngTarget As Range
       Set rngSource = Selection
       Set rngTarget = Application.InputBox("Wähle die Zielzelle:", Type:=8)
    
       ' Kopiere die Zeilenhöhe
       For i = 1 To rngSource.Rows.Count
           rngTarget.Rows(i).RowHeight = rngSource.Rows(i).RowHeight
       Next i
    
       ' Kopiere die Spaltenbreite
       For i = 1 To rngSource.Columns.Count
           rngTarget.Columns(i).ColumnWidth = rngSource.Columns(i).ColumnWidth
       Next i
    End Sub
  2. Kopieren der Zellengröße in ein anderes Blatt:

    Sub ZellenGroeßeKopieren()
       Dim rngSource As Range
       Set rngSource = Selection
    
       ' Wechselt zu einem anderen Blatt
       Sheets("ZielBlatt").Select
       rngSource.Copy Destination:=Range("A1")
       Application.CutCopyMode = False
    End Sub

Tipps für Profis

  • Nutze pasteSpecial VBA: Der Einsatz von PasteSpecial ermöglicht dir, nur die Formatierungen zu übertragen und die Zeilenhöhe beizubehalten.
  • Variabilität einfügen: Passe den Zielbereich dynamisch an, indem du die InputBox-Funktion verwendest, um den Benutzer die Zielzelle auswählen zu lassen.
  • Makros abspeichern: Speichere deine Makros in einer persönlichen Makroarbeitsmappe, um sie in allen Excel-Dateien nutzen zu können.

FAQ: Häufige Fragen

1. Wie kann ich die Zeilenhöhe in Excel übertragen, ohne VBA zu nutzen? Du kannst die Funktion "Format übertragen" verwenden, um die Zeilenhöhe manuell zu kopieren.

2. Funktioniert dieser Code in Excel 365? Ja, der VBA-Code ist mit Excel 365, Excel 2019 und älteren Versionen kompatibel. Achte darauf, dass Makros aktiviert sind.

3. Kann ich auch die Spaltenhöhe kopieren? Ja, du kannst die Spaltenhöhe mit einer ähnlichen Vorgehensweise kopieren, indem du die ColumnWidth-Eigenschaft anwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige