Excel 2013 vba: Bereich kopieren
#1
Hallo zusammen,

für Euch sicher ein banales Problem aber ich komme nicht auf die Lösung.

In einem Tabellenblatt möchte ich einen Bereich mit allen Formaten (Zeilenhöhe und Breite) kopieren und im gleichen Tabellenblatt an einer anderen Stelle einfügen.
Also Bereich auswählen, kopieren, andere Zelle per Maus auswählen, kopierte Auswahl einfügen.

Vielleicht habt jemand eine Idee das mittels Makro zu erledigen.
Top
#2
Hallöchen,
kopieren könntest Du leider nur die Spaltenbreite. Die Zeilenhöhe musst Du einzeln einstellen
Code:
Sub test()
Sheets("Tabelle1").Range("A1:C3").Copy
Sheets("Tabelle2").Range("A1").PasteSpecial
'Spaltenbreite kopieren
Sheets("Tabelle2").Range("A1").PasteSpecial Paste:=8
'Schleife ueber alle Zeilen
For icnt = 1 To 3
  'Zeilenhoehe uebernehmen
  Sheets("Tabelle2").Rows(icnt).RowHeight = Sheets("Tabelle1").Rows(icnt).RowHeight
'Ende Schleife ueber alle Zeilen
Next
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Hallo Andre,

vielen Dank für Deinen Beitrag, hilft schon mal weiter.

Aber wie geht das ohne feste Zelladressen?
Ich möchte einen zu kopierenden Bereich markieren und dann auf dem gleichen Blatt an einer anderen Stelle wieder einfügen.
Das Makro muss ev. angehalten werden um die Zielzelle auswählen zu können...um dann den Kopiervorgang abzuschließen + Spaltenbreite und Höhe.
Vielleicht gibt es für mein Vorhaben ja noch eine einfachere Lösung?
Top
#4
Moin,
du kannst einen Bereich markieren und dann in ein Array schreiben. Dann per InputBox die Ziel-Zelle (obere linke Ecke) abfragen und dort dann einfügen. Erforderlichenfalls den Zielbereich noch darauf prüfen, ob er leer ist oder nicht.
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
[-] Folgende(r) 1 Nutzer sagt Danke an GMG-CC für diesen Beitrag:
  • sharky51
Top
#5
Hallo Erich,

das könnte dann so aussehen:
Code:
Sub test()
'Variablendeklarationen
Dim rngTarget As Range, rngSource As Range
'Bei Fehler weiter mit nächstem Kommando
On Error Resume Next
'Kopierbereich auswaehlen
Set rngSource = Application.InputBox("Wählen Sie den Bereich zum Kopieren aus:", _
                     "Bereich kopieren", , , , , , 8)
If rngSource Is Nothing Then Exit Sub        ' Auswahl abgebrochen
'Zielzelle auswaehlen - obere linke zelle des Einfuegebereichs
'Hinweis: Keine Fehlerpruefung auf Auswhal mehrere Zellen
Set rngTarget = Application.InputBox("Wählen Sie die Zelle zum Einfügen aus:", _
                     "Bereich kopieren", , , , , , 8)
'Fehlerbehandlung Ende
On Error GoTo 0
If rngTarget Is Nothing Then Exit Sub        ' Auswahl abgebrochen
'Bereich kopieren
rngSource.Copy
'Daten einfuegen
rngTarget.PasteSpecial
'Spaltenbreite kopieren
rngTarget.PasteSpecial Paste:=8
'Schleife ueber alle Zeilen
For icnt = rngTarget.Row To rngTarget.Row + Selection.Rows.Count - 1
  'Zeilenhoehe uebernehmen
  Rows(icnt).RowHeight = rngSource.Rows(icnt).RowHeight
'Ende Schleife ueber alle Zeilen
Next
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • sharky51
Top
#6
Hallo André,

super, super ....genau das habe ich gesucht!!!!
Funktioniert perfekt, vielen Dank!!!!
Top
#7
Hallo André,

ein kleiner Hinweis der Vollständigkeit halber, beim Erich läuft es zwar, aber mit Option Explicit meckert VBA.
Folglich wird dort kein Option Explicit eingesetzt.


VBA vermißt:
Zitat:Dim icnt As Long

... dann läuft's auch mit dem Nachbarn  :15:
[-] Folgende(r) 1 Nutzer sagt Danke an Käpt'n Blaubär für diesen Beitrag:
  • schauan
Top


Gehe zu:


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