Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten 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)
Antworten 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?
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten 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
Antworten 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
Antworten Top
#6
Hallo André,

super, super ....genau das habe ich gesucht!!!!
Funktioniert perfekt, vielen Dank!!!!
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten 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:
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
[-] Folgende(r) 1 Nutzer sagt Danke an Käpt'n Blaubär für diesen Beitrag:
  • schauan
Antworten Top


Gehe zu:


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