VBA zeilen kopieren mit relativem Zellbezug
Hallo, ich habe in mein Excel Dokument einen Button eingebaut, den ich mit einem Makro verbinden möchte, der eine neue Zeile einfügt und eine darüberliegende vorhandene Zeile Kopiert bzw. nach unten zieht, um in dieser neue Werte eintragen zu können. Funktioniert soweit auch ....
ABER natürlich verschieben sich die Bezüge durch das einfügen neuer Zeilen und die Makros, welche sich auf Zeilen unter dem ersten Makro beziehen, funktionieren nicht mehr an gewünschter Stelle...
In Visual Basic habe ich versucht die "Range" Bezüge zu ändern, habe aber nur den ansatz für einzelne zellen gefunden z.b. "ActiveCell.Offset(1,0).Range("A1").Select"
Auf dem Bild soll jeweils das blaue kreuzchen eine neue Zeile einfügen, siehe Zeile Opex. Folgendes ist mein VB Quelltext bei dem sich immer alles verschiebt: Sub add_cost_netrent() ' ' dada Makro '
' Rows("9:9").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("D8:H8").Select Selection.Copy Range("D9").Select ActiveSheet.Paste ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 8 Range("U8:Y8").Select Application.CutCopyMode = False Selection.Copy Range("U9").Select ActiveSheet.Paste End Sub

4 Antworten
Ich hätte da eventuell eine gute und einfache Lösung für dich.
Das ist ein Code den du direkt im VBA der Tabelle ablegst. Jetzt ist es egal in welcher Zelle du einen Doppelklick machst, er kopiert immer die Zeile ein nach unten in der du einen Doppelklick ausübst.
Ich habe schon versucht das ganze auf Spalte A zu beschränken, dass bekomme ich aber nicht ganz hin weil der Code nicht alleine von mir ist. Vielleicht hat ein VBA Spezi da einen Tipp zu.
Kannst ja mal testen und schauen ob das was für dich ist :-))
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
r = ActiveCell.Row
ThisWorkbook.ActiveSheet.Rows(Target.Row).Select
Selection.copy
Selection.Insert Shift:=xlDown
ActiveSheet.Paste
Application.CutCopyMode = False
Cancel = True
End Sub
im allgemeinen funktioniert deine Lösung schmiddi, für meine Formatvorlage allerdings eine wenig schöne Lösung... Falls ich nichts anderes herausfinde werde ich deine Lösung verwenden :)
Danke
Bitte gerne, aber In wie fern eine wenig schöne Lösung??
Du wolltest doch das eine neue Zeile eingefügt wird ohne das sich die Bezüge verschieben. Genau das passiert doch damit?
Ich bin ein kleines Stück weiter gekommen, indem ich die Option "relative Aufzeichnung" für die Makros aktiviert habe. Allerdings habe ich nun das Problem, dass der Nutzer vor der Aktivierung des Makros genau eine bestimmte Zelle ausgewählt haben muss, sonst verschiebt sich alles ...
Hat jemand einen Lösungsansatz dafür?
Wenn du neue Antworten machst Anstatt auf einen Beitrag zu Antworten bekommt man das hier kaum mit und stolpert nur ausversehen darüber. Ich habe das jetzt auch nur aus Zufall gelesen.
Am besten immer direkt auf eine Antwort regieren, dann bekommt der jenige auch mit das was passiert ist, so bekommt man keine Meldung das es was neues gibt.
Hast du meine Möglichkeit mal in betracht gezogen? Da ist der Bezug nämlich egal.
Ich hatte dieses Problem auch schon öfter.
Ohne mich jetzt in Deinen Code vertieft zu haben: ich konnte es immer lösen, indem ich anstatt von oben nach unten von unten nach oben gearbeitet habe: die Adressen verschieben sich ja nur unterhalb der eingefügten Zeile.
Auch Schleifen kann man ja rückwärts laufen lassen, braucht halt ein bisschen Phantasie, was im Einzelfall alles anders zu machen ist.
Es kann allerdings Konstellationen geben, wo das nicht geht.
Dann mit offset(Zeile, Spalte) addressieren oder ähnliches.
bitte den makro code mit ctrl-k formatieren oder in http://pastebin.com/ einstellen
zeile nach sub: