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

Forumthread: VBA: Einfügen kopierter Zellen mit Zellauswahl

VBA: Einfügen kopierter Zellen mit Zellauswahl
Sunny
Hallo zusammen,
vielleicht kann mir jemand von euch weiterhelfen, denn meine bisherige Suche war leider nicht erfolgreich.
Auf Basis eines aufgezeichneten Makros versuche ich aktuell meine Funktion zu verallgemeinern, _ zur Verdeutlichung hier mal das Makro mit Anmerkungen meinerseits, ob ich auch die Funktionen richtig verstehe:

Sub Test1()
' Test1 Makro
Rows("4:8").Select   'Auswahl der zu kopierenden Zellen
Selection.Copy         'Kopieren der ausgewählten Zellen
Range("A29").Select 'Auswahl der Zelle, wo die kopierten Zellen eingefügt werden
Selection.Insert Shift:=xlDown ' Einfügen der Zellen
End Sub

Die Auswahl der zu kopierenden Zellen möchte ich so lassen, allerdings möchte ich die Zelle, in die die kopierten Zellen eingefügt werden, durch den Benutzer auswählen lassen.
Dazu hab ich schon folgende Lösung gefunden:

Sub Test2()
dim zelleE as Range
Set zelleE = Application.InputBox(Prompt:="Wo einfügen?", Title:="Zellenauswahl", Type:=8)
End Sub

Aber wie bekomme ich meine kopierten Zellen in zelleE bzw. wie werden meine kopierten Zellen an der durch den Benutzer ausgewählten Stelle eingefügt?
Vielen Dank schonmal für eure Hilfe!
Sunny
Anzeige
AW: VBA: Einfügen kopierter Zellen mit Zellauswahl
11.05.2010 15:30:11
Rudi
Hallo,
Sub Test2()
Dim zelleE As Range
Set zelleE = Application.InputBox(Prompt:="Wo einfügen?", Title:="Zellenauswahl", Type:=8)
If Not zelleE Is Nothing Then zelleE.Insert
End Sub

Gruß
Rudi
AW: VBA: Einfügen kopierter Zellen mit Zellauswahl
12.05.2010 10:33:34
Sunny
Hallo zusammen,
erstmal vielen Dank Rudi, ein bisschen konntest du mir weiterhelfen, aber leider macht die Funktion noch nicht das, was ich von ihr erwarte, mein aktueller Code sieht so aus:
Sub Test1()
' Makro Test1
Dim zelleE, zeile1 As Range
Rows("4:7").Select  'Auswahl
Selection.Copy      'Kopieren
Set zeile1 = Selection
Set zelleE = Application.InputBox(Prompt:="Wo einfügen?", Title:="Zellenauswahl", Type:=8) ' _
Zelle auswaehlen
If Not zelleE Is Nothing Then zeile1.Insert Shift:=xlDown  'Einfuegen der Auswahl
End Sub
Anbei auch zwei Screenshots vor und nachdem das Makro ausgeführt wurde:
Userbild
Userbild
Eigentlich sollten die Zeilen A1 und die drei folgenden kopiert werden und an einer ausgewählten Stelle eingefügt werden, stattdessen werden in Zeile 4 vier Zeilen eingefügt mit der Formatierung der drüberliegenden Zeile 3.
Hat jemand von euch eine Idee? Vielen Dank schonmal, viele Grüße
Sunny
Anzeige
AW: VBA: Einfügen kopierter Zellen mit Zellauswahl
12.05.2010 15:17:58
Bertram
Hi Sunny,
ich würde das so machen (wenn ich das wollte:-))
Sub Test1()
Dim zelleE
zelleE = Application.InputBox(Prompt:="Wo einfügen?", Title:="Zellenauswahl", Type:=1)
Rows("4:7").Select
Selection.Copy
Rows(zelleE).Insert
End Sub
Du bist natürlich beschränkt auf Zeile 4 bis 7 zum Kopieren.
Da du ganze Zeilen kopierst und einfügst brauchst du nicht zwingend einen Range eingeben, sondern nur eine Zeilennummer.
Es fehlt allerdings eine Prüfung auf Plausibilität der Zahleneingabe (negative Zeilen gibbet nich) oder ob die Anzahl Zeilen noch eingefügt werden kann.
Gruß
Bertram
Anzeige
AW: VBA: Einfügen kopierter Zellen mit Zellauswahl
12.05.2010 16:05:50
Sunny
Hallo Bertram,
danke für deine Hilfe, leider funktioniert es bei mir nicht, da kommen immer Laufzeitfehler,
so wie dein Code dasteht, bekomme ich den Laufzeitfehler 1004 - "Anwendungs- oder objektdefinierter Fehler", was auch immer das heißen mag.
Hast du eine bessere Idee, wie man so was realisieren könnte?
Ich würde gerne automatisch einen weiteren Block mit der Linienangabe (siehe Screenshot: z.B. A1 mit den Produkten A,B und C) nach dem letzten exisitierenden Linienblock einfügen. Sinn des Ganzen ist es mehrere Produktionslinien mit den Produkten, die auf ihnen laufen darzustellen. Wenn eine neue Linie hinzukommt, soll das über das Makro passieren, danach soll der User noch aufgefordert werden, die passenden Eingaben zu machen.
Danke nochmal für die Hilfe!
Schöne Grüße
Sunny
Anzeige
AW: VBA: Einfügen kopierter Zellen mit Zellauswahl
17.05.2010 14:41:11
Sunny
Hallo Bertram,
danke für deine Anregung, eigentlich hatte ich schonmal geantwortet, aber irgendwie scheint meine Antwort irgendwie verloren gegangen zu sein.
Leider entsteht mit deiner Anweisung ein Laufzeitfehler "1004, Anwendungs- und objektdefinierter Fehler".
Hat jemand noch eine Idee, wie ich das hinbekommen kann, oder wie man meine Vorstellung besser lösen kann?
Nochmal zur Erklärung: Dargestellt werden verschiedene Produktionslinien mit bestimmten Parametern, die zur Linie gehören. Nun soll über ein Makro die Möglichkeit bestehen eine weitere Produktionslinie einzufügen, an einer vom User gewählten Position. Zum Beispiel wäre denkbar, dass nach Linie A1 eine neue Linie eingefügt wird, sprich zwischen Linie A1 und A2.
Danke nochmals für die Unterstützung!
Sonnige Grüße
Sunny
Anzeige
AW: VBA: Einfügen kopierter Zellen mit Zellauswahl
17.05.2010 17:07:38
Sunny
Hallo zusammen,
hab jetzt doch eine gute Lösung für mich gefunden. Da ich aus einem definierten, gleichbleibenden Bereich meine Informationen nehme:
Sub Test1 ()
DIM zelleE
Range("4:8").Copy
Range(zelleE.Address).Insert shift:=xlDown
End Sub
Und jetzt macht's was ich wollte! Danke nochmal für die Unterstützung.
Viele Grüße
Sunny
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Einfügen kopierter Zellen mit Zellauswahl in Excel VBA


Schritt-für-Schritt-Anleitung

Um kopierte Zellen in Excel mit VBA an einer vom Benutzer gewählten Stelle einzufügen, kannst du folgendes Makro verwenden. Es ermöglicht dir, einen Bereich auszuwählen, diesen zu kopieren und dann an der gewünschten Stelle einzufügen.

  1. Öffne die Excel-Arbeitsmappe und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu (Einfügen > Modul).
  3. Kopiere und füge den folgenden Code in das Modul ein:
Sub EinfügenKopierterZellen()
    Dim zelleE As Range
    Dim zeilenBereich As Range

    ' Auswahl der Zellen, die kopiert werden sollen
    Set zeilenBereich = Rows("4:8")
    zeilenBereich.Copy

    ' Eingabeaufforderung für die Zielzelle
    Set zelleE = Application.InputBox(Prompt:="Wo einfügen?", Title:="Zellenauswahl", Type:=8)

    ' Einfügen der kopierten Zellen
    If Not zelleE Is Nothing Then
        zelleE.Insert Shift:=xlDown
    End If
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus (ALT + F8, wähle "EinfügenKopierterZellen" und klicke auf "Ausführen").
  3. Wähle die Zielzelle aus, wo die kopierten Zellen eingefügt werden sollen.

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004 - Anwendungs- oder objektdefinierter Fehler: Dieser Fehler tritt häufig auf, wenn die Zielzelle ungültig ist. Stelle sicher, dass du eine gültige Zelle auswählst, bevor du das Einfügen versuchst.

  • Die kopierten Zellen werden nicht richtig eingefügt: Überprüfe, ob der Bereich, den du kopierst, korrekt definiert ist. Achte darauf, dass die Zielzelle nicht außerhalb des Arbeitsblatts liegt.


Alternative Methoden

Eine alternative Methode wäre, die Zeilennummer direkt vom Benutzer abzufragen, anstatt eine Zelle auszuwählen. Der folgende Code demonstriert diese Technik:

Sub ZeilenEinfügen()
    Dim zeileE As Long
    ' Eingabeaufforderung für die Zeilennummer
    zeileE = Application.InputBox(Prompt:="In welche Zeile einfügen?", Title:="Zeilenauswahl", Type:=1)

    ' Kopieren und Einfügen
    Rows("4:7").Copy
    Rows(zeileE).Insert Shift:=xlDown
End Sub

Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie du mehrere Zellen kopieren und an einer ausgewählten Position einfügen kannst. Dies ist besonders nützlich, wenn du regelmäßig Daten in Excel verwaltest.

Sub KopierenUndEinfügen()
    ' Kopiere den Bereich von Zeile 4 bis 8
    Range("4:8").Copy
    ' Füge die kopierten Zellen unterhalb der ausgewählten Zelle ein
    Range("A10").Insert Shift:=xlDown
End Sub

Tipps für Profis

  • Nutze die Application.ScreenUpdating-Eigenschaft, um das Flackern des Bildschirms während der Ausführung des Makros zu minimieren:
Application.ScreenUpdating = False
' Dein Code hier
Application.ScreenUpdating = True
  • Wenn du häufig die gleichen Zellen kopierst, könnte es sinnvoll sein, diese als benannte Bereiche zu definieren. So kannst du einfach auf diese Bereiche zugreifen und sie in deinem VBA-Code verwenden.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Einfügeposition gültig ist?
Du kannst eine einfache Überprüfung einbauen, um sicherzustellen, dass die ausgewählte Zelle innerhalb der gültigen Zeilen des Arbeitsblatts liegt.

2. Was kann ich tun, wenn das Einfügen der kopierten Zellen nicht funktioniert?
Überprüfe, ob die kopierten Zellen existieren und ob die Zielposition korrekt ausgewählt wurde. Achte darauf, dass du das Makro mit einer aktiven Auswahl ausführst.

3. Kann ich das Makro anpassen, um nur bestimmte Zellen zu kopieren?
Ja, du kannst den Bereich in der Rows("4:8")-Anweisung anpassen, um nur die gewünschten Zellen zu kopieren.

4. Wie füge ich kopierte Zellen in einer anderen Arbeitsmappe ein?
Du musst sicherstellen, dass die Arbeitsmappe, in die du einfügen möchtest, aktiv ist oder den entsprechenden Verweis auf die Arbeitsmappe im Code setzen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige