Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1204to1208
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
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


		
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.

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
Anzeige
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
AW: VBA Zeilenhöhe kopieren
12.03.2011 16:10:12
Hajo_Zi
Hallo Jens,
was stimmt an meinen Code nicht?
Gruß Hajo
Anzeige
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
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
Anzeige
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

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

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige