624 Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo zusammen,

da ich blutiger Anfänger im Thema Excel-VBA bin und trotz langem recherchieren (u.a. auch in diesem Forum) konnte ich noch keine Lösung für meine Situation finden.

An sich geht es um das Kopieren und Einfügen einer Zeile durch den Klick auf eine ActiveX-Schaltfläche. Den Code dafür bekomme ich ohne Problem hin und hierfür ist es auch eigentlich egal ob die Zeile oberhalb oder unterhalb der original Zeile eingefügt wird.

Das Prolblem liegt in der Gestaltung meines Excelblatts (die leider nicht groß umgestellt werden kann). In Zelle B18 befindet sich der Button der die Zeile 17 kopiert und darüber einfügt.
In den Zellen B42, B45 und B48 befinden sich allerdings ebenfalls Buttons die die Zeile darüber kopieren und einfügen. (es ist praktisch eine Funktion um mehrere Option hinzuzufügen Bsp.: in zeile 42 stehen Daten zu Automarke und Modell; durch Klick auf den Button gibt es die Möglichkeit ein weiteres Modell oder eine weitere Automarke hinzuzufügen)

Wenn Gebrauch gemacht wird von dem Button der in Zelle B18 sich befindet, kopiert der Button in Zelle B42 nicht mehr die Zeile 41 sondern die Zeile 40 weil ja oben eine Zeile dazwischen geschoben wurde.

Gibt es also eine Möglichkeit den Code so zu gestalten das jeder Button die oberhalb liegende Zeile kopiert (egal ob weiter oben eine Zeile dazwischen gefügt wurde).

Ich hoffe ich konnte mich verständlich ausdrücken und bedanke mich auch schonmal recht herzlich für die HIlfe und die Tipps

Viele Grüße
Leroy

3 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo,

du kannst mit
CommandButton1.TopLeftCell.Row

die Zeile ermitteln, in der die obere Linke Ecke des jeweiligen Command-Buttons liegt.

Dein Code könnte so aussehen:

Private Sub CommandButton1_Click()

Dim lngZeile As Long

lngZeile = CommandButton1.TopLeftCell.Row

With ActiveSheet
.Rows(lngZeile - 1).EntireRow.Insert
.Rows(lngZeile).Copy Rows(lngZeile - 1)
End With

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Ich habs selber lösen können.

Wenn man den bestimmten Zeilen einen Namen gibt und im Code dann anstelle von Rows("41:41") ; Range ("Zeilenname") eingibt.
0 Punkte
Beantwortet von
Trotzdem Danke M.O. :)
...