Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Zeilenteile einfügen und duplizieren


Betrifft: Zeilenteile einfügen und duplizieren von: Friedel
Geschrieben am: 01.10.2019 13:53:58

Hallo,

ich habe einen Makro, der eine Zeile (bei der Cursorposition) einfügt und den Inhalt der oberen Zeile dupliziert. Jetzt möchte ich genau das Gleiche für den Teil einer Zeile machen; also z. B. den Bereich A12-R12 um eine weitere Reihe nach unten kopieren; also mit dem Ergebnis, daß dann in A12-R12 und A13-R13 die gleichen Inhalte stehen:

Sub Zeileeinf()
'
' Zeilen_einfügen Makro
' Makro am 16.09.2010 von Privat aufgezeichnet
'
'
    If Selection.Areas.Count > 1 Then
        MsgBox ("Bitte nicht mehrere Bereiche auswählen!")
        Exit Sub
    End If
    
    Application.ScreenUpdating = False
    Selection.EntireRow.Insert
    ' ACHTUNG: Das With darf nicht 1 drüber, da sich durch das Insert die Selection ändert
    With Selection.EntireRow
        .Offset(-1, 0).Resize(1).Copy
        .PasteSpecial Paste:=xlPasteFormulas
        ' Wenn in der Zeile unter den eingefügten Zeilen eine Formel in
        ' Spalte B steht, dann muss die korrigiert werden
        If .Resize(1, 1).Offset(.Rows.Count, 1).HasFormula Then
            .Resize(1, 1).Offset(.Rows.Count, 1).FormulaR1C1 = _
                .Resize(1, 1).Offset(-1, 1).FormulaR1C1
        End If
    End With
    Application.ScreenUpdating = True
End Sub
Was muß ich da ändern?
Danke!

Friedel

  

Betrifft: AW: Zeilenteile einfügen und duplizieren von: Piet
Geschrieben am: 01.10.2019 18:39:36

Hallo

notiere dir die Zeile der aktiven Zelle in eine Variable, und definiere Selection über Cells(Zeile, 1).Resize(1, 18)
Den Rest ob die Formeln stimmen musst du dir bitte selbst anschauen, evtl. die Formel Zelle korrigieren.

mfg Piet

Sub Zeileeinf()
Dim Zeile As Long
' Zeilen_einfügen Makro
' Makro am 16.09.2010 von Privat aufgezeichnet
'
    If Selection.Areas.Count > 1 Then
        MsgBox ("Bitte nicht mehrere Bereiche auswählen!")
        Exit Sub
    End If
    
    Application.ScreenUpdating = False
    Zeile = Selection.Row
    Cells(Zeile, 1).Resize(1, 18).Insert
    ' ACHTUNG: Das With darf nicht 1 drüber, da sich durch das Insert die Selection ändert
    With Cells(Zeile, 1)
        .Offset(-1, 0).Resize(1).Copy
        .PasteSpecial Paste:=xlPasteFormulas
        ' Wenn in der Zeile unter den eingefügten Zeilen eine Formel in
        ' Spalte B steht, dann muss die korrigiert werden
        If .Resize(1, 1).Offset(.Rows.Count, 1).HasFormula Then
            .Resize(1, 1).Offset(.Rows.Count, 1).FormulaR1C1 = _
                .Resize(1, 1).Offset(-1, 1).FormulaR1C1
        End If
    End With
    Application.ScreenUpdating = True
End Sub



  

Betrifft: AW: Zeilenteile einfügen und duplizieren von: Friedel
Geschrieben am: 01.10.2019 23:49:10

Hallo Piet,

vielen Dank für Deine Antwort!

Der Makro funktioniert prinzipiell so, wie er soll - ich markiere den Zeilenbereich, den ich übernehmen will und starte den Makro, aber:
1. es wird immer nur der Wert der ersten Zelle in die kopierte Zeile übernommen, nachfolgende Zellen jedoch nicht
2. er funktioniert bei Tabellen nicht (Fehlermeldung) im Gegensatz zu dem mit ganzen Zeilen.

Viele Grüße,
Friedel


  

Betrifft: AW: Zeilenteile einfügen und duplizieren von: Piet
Geschrieben am: 03.10.2019 14:14:28

Hallo Friedel

probier mal bitte diesen Code, ob es damit geht?? Bin mir aber nicht 100 % sicher.

mfg Pit

Sub Zeileeinf()
Dim Zeile As Long
' Zeilen_einfügen Makro
' Makro am 16.09.2010 von Privat aufgezeichnet
'
    If Selection.Areas.Count > 1 Then
        MsgBox ("Bitte nicht mehrere Bereiche auswählen!")
        Exit Sub
    End If
    
    Application.ScreenUpdating = False
    Zeile = Selection.Row
    Cells(Zeile + 1, 1).Resize(1, 18).Insert
    Cells(Zeile, 1).Resize(1, 18).Copy _
      Cells(Zeile + 1, 1).Resize(1, 18)

    ' ACHTUNG: Das With darf nicht 1 drüber, da sich durch das Insert die Selection ändert
    With Cells(Zeile, 1)
        ' Wenn in der Zeile unter den eingefügten Zeilen eine Formel in
        ' Spalte B steht, dann muss die korrigiert werden
        If .Offset(0, 1).HasFormula Then
           .Offset(1, 1).FormulaLocal = .Offset(0, 1).Formula
        End If
    End With
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub



  

Betrifft: AW: Zeilenteile einfügen und duplizieren von: Friedel
Geschrieben am: 05.10.2019 01:17:29

Hallo,
vielen Dank für Deine Antwort!

er gibt eine Fehlermeldung aus wegen folgender Zeile:
.Offset(1, 1).FormulaLocal = .Offset(0, 1).Formula
Wenn ich aus dem Debuggen raus bin, hat er aber genau das gemacht, was ich wollte...

Bei Tabellen funktioniert es gar nicht, es kommt ein Laufzeitfehler 1004
Das wird nicht funktionieren, weil dadurch Zellen in einer Tabelle in ihrem Arbeitsblatt verschoben würden.

Viele Grüße
Friedel


  

Betrifft: AW: Zeilenteile einfügen und duplizieren von: Daniel
Geschrieben am: 05.10.2019 08:12:22

Hi

Naja ist doch logisch dass das nicht funktioniert.
.Forumla ist die Formel in Englisch und .FormulaLocal ist die Formel in deutsch.

Du musst, wenn du die Formel von einer Zelle in die andere über tragen willst, immer den selben Formula-Typ verwenden.
(Es gibt: .Formula, .FormulaLocal, .FormulaR1C1 und .FormulaR1C1Local)

Gruß Daniel


  

Betrifft: AW: Zeilenteile einfügen und duplizieren von: Friedel
Geschrieben am: 08.10.2019 12:48:28

Hallo Daniel,

nach Streichen des Local funktioniert der Makro zwar ohne Fehlermeldung, es wird aber immer nur die ganze Zeile kopiert, nicht ein Teilbereich...

Viele Grüße
Friedel


  

Betrifft: AW: Zeilenteile einfügen und duplizieren von: Piet
Geschrieben am: 03.10.2019 14:14:32

Hallo Friedel

probier mal bitte diesen Code, ob es damit geht?? Bin mir aber nicht 100 % sicher.

mfg Pit

Sub Zeileeinf()
Dim Zeile As Long
' Zeilen_einfügen Makro
' Makro am 16.09.2010 von Privat aufgezeichnet
'
    If Selection.Areas.Count > 1 Then
        MsgBox ("Bitte nicht mehrere Bereiche auswählen!")
        Exit Sub
    End If
    
    Application.ScreenUpdating = False
    Zeile = Selection.Row
    Cells(Zeile + 1, 1).Resize(1, 18).Insert
    Cells(Zeile, 1).Resize(1, 18).Copy _
      Cells(Zeile + 1, 1).Resize(1, 18)

    ' ACHTUNG: Das With darf nicht 1 drüber, da sich durch das Insert die Selection ändert
    With Cells(Zeile, 1)
        ' Wenn in der Zeile unter den eingefügten Zeilen eine Formel in
        ' Spalte B steht, dann muss die korrigiert werden
        If .Offset(0, 1).HasFormula Then
           .Offset(1, 1).FormulaLocal = .Offset(0, 1).Formula
        End If
    End With
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub



Beiträge aus dem Excel-Forum zum Thema "Zeilenteile einfügen und duplizieren"