Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1408to1412
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeile einer Befehlsschaltfläche zum Weiterverwende

Zeile einer Befehlsschaltfläche zum Weiterverwende
19.02.2015 15:02:21
Andreas
Hallo liebes Forum,
ich habe heute schon viel zu viel Zeit damit verbracht, eine Lösung für mein Problem zu finden, ich hoffe, ihr könnt mir weiterhelfen:
Ich habe eine ActiveX-Befehlsschaltfläche (sog. Commandbutton1) in meinem Excel-Workbook. Ich benutze den Knopf ständig, um Zahlen aus einer bestimmten Zeile(die Zeile, in der auch der Knopf angeordnet ist) von einem Workbook in ein anderes zu kopieren, das funktioniert wunderbar. Allerdings füge ich in dem Sheet, auf dem der Commandbutton1 ist, öfters mal eine Zeile ein und dann muss ich jedes mal im VBA-Code die Zeilennummer nachhjustieren, z.B. von 144 auf 145 ändern usw.
Frage: Wie kann ich die Zeilennummer des Commandbuttons1 auslesen und z.B. in eine Variable speichern, damit der Commandbutton1 immer seinen Zweck erfüllt und er immer genau die Zahlen aus der Zeile kopiert, in der er selbst sich gerade befindet.
Ich habe schon viel probiert mit "Shapes(Application.Caller).TopLeftCell.Row" etc. aber das funktioniert nicht. "Shapes(9).TopLeftCell.Row" (die "neun" habe ich nur durch Probieren herausgefunden) hingegen funktioniert wunderbar. Ich benutze den Commandbutton1 aber in verschiedensten Workbooks und die Zahl "9" funktioniert dementsprechend nicht überall.
Ich habe wirklich dutzende Foren gefunden, in denen Probleme mit "Application.Caller" diskutiert wurden, aber so richtig konnte keiner mal eine grundständige Erklärung/Lösung für das Problem bringen.
Also meine Bitte: Bitte erklärt mir Schritt für Schritt ausführlich, wo ich was reinschreiben muss. Ich habe schon von Klassenmodulen, Modulen etc. gelesen und auch Codeschnippsel gefunden, in denen die ersten und letzten Zeilen weggelassen wurden, sowas ist für Anfänger dann nur schwer umzusetzen. Meines Problems Lösung kann ja im Grunde nicht so schwer sein.
Für jede Hilfe dankbar!
Andreas

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile einer Befehlsschaltfläche zum Weiterverwende
19.02.2015 15:20:42
Luschi
Hallo Andreas,
versuch es mal so:

Private Sub CommandButton1_Click()
Dim n As Integer
n = ActiveSheet.Shapes("CommandButton1").TopLeftCell.Row
MsgBox ActiveSheet.Range("D" & n).Address
End Sub
Wobei n jetzt die Zeilennummer ist.
Gruß von Luschi
aus klein-Paris

AW: Zeile einer Befehlsschaltfläche zum Weiterverwende
19.02.2015 16:25:26
Andreas
Hallo Luschi,
danke für die schnelle Antwort, aber meine Frage ist damit leider nicht beantwortet.
Ich möchte ja nicht mehr "Commandbutton1" schreiben müssen, weil ein anderer Commandbutton in einem anderen Workbook z.B. "Commandbutton21" heißt und sogar auf einem Sheet mehrere Commandbuttons sein können.
Es soll also am Ende ein Code stehen, den man beim Click-Event eines beliebigen Buttons ausführen kann (und den man nur noch als Prozedur an entsprechender Stelle einfügen kann, ohne ihn editieren zu müssen) und der dann die Zeile, in der sich der Button befindet, als Variable enthält, mit der man weiterarbeiten kann.
Andreas
grüßt aus dem schönen Hamburg

Anzeige
AW: Zeile einer Befehlsschaltfläche zum Weiterverwende
19.02.2015 17:27:42
Luschi
Hallo Andreas,
vernünftig kann man das nur mit einem Extra-Klassenmodul lösen. Hier 1 Beispiel dazu:
https://www.herber.de/bbs/user/95882.xlsm
Gruß von Luschi
aus klein-Paris

AW: Zeile einer Befehlsschaltfläche zum Weiterverwende
19.02.2015 18:02:24
Andreas
Hallo Luschi,
danke nochmal. Aber soweit war ich auch schon, ich wusste dann nicht, wie ich die Information über die Zeile des Commandbuttons dann weiterverarbeiten kann. Ich möchte jetzt mit der Zeile weiterprogrammieren, in etwa in der Form:

Private Sub CommandButton4_Click()
Dim Zeilennummer
Zeilennummer = ...
End Sub
Und ich habe den Eindruck, dass das Callen der Class_Init unter Workbook_open nicht immer funktioniert, hast du schon mal etwas derartiges gehört/erlebt?
Bis morgen,
Andreas

Anzeige
AW: Zeile einer Befehlsschaltfläche zum Weiterverwende
19.02.2015 18:41:19
Luschi
Hallo Andreas,
ein Weiterarbeiten in der Form

Private Sub CommandButton4_Click()
Dim Zeilennummer
Zeilennummer = ...
End Sub
funktioniert nicht, da diese 'Private Sub CommandButton4_Click()'-Prozedur zuerst ausgeführt wird und erst im Anschluß die Prozedur 'Private Sub ButtonGroup_Click()' des Extra-Klassenmoduls.
Es ist ja Sinn und Zweck deses Klassenmoduls, alle Klick-Ereignisse alle CommandButtons in den verschiedenen Tabellen hier zu sammeln und dann entsprechende Maßnahmen im Code auszulösen.
Das heißt, Du kommst so an die gewünschte Zeilennummer garnicht heran!
Das in diesem Klassenmodul definierte Objekt 'ButtonGroup' besitzt viele weitere Eigenschaften, die man abrufen kann, z.B: ButtonGroup.Parent gibt das Tabellenobjekt zurück in dem der CommandButton liegt.
Gruß von Luschi
aus klein-Paris
PS: Du solltest Dir das Konstrukt noch mal genauer ansehen, denn von einem Klassenmodul war in Deinen Ausführungen noch nie die Rede.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige