Makro: Position von auslösendem Push-Button bestimmen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

batgilla
*
Beiträge: 12
Registriert: Mi, 06.05.2009 11:49

Makro: Position von auslösendem Push-Button bestimmen

Beitrag von batgilla »

Hallo,

habe ein Problem mit der Positionsbestimmung eines Pushbuttons per Makro bei dem mir hoffentlich jemand helfen kann.

Mein Pushbutton soll Makro A ausführen.
Makro A soll die Position des auslösenden Pushbuttons als Koordinatenwert der Zelle ausgeben, auf der er "liegt" (also als (X,Y) Wert).
Makro A soll dann den Inhalt der Zelle die 2 Spalten neben dem Pushbutton liegt (X-2,Y) in eine andere Zelle (A,B) schreiben.

Direktes Problem - wie lese Ich den (X,Y)-Wert der Button-Zelle aus?
Wie kann ich die Spalten-Koordinaten als Variable speichern, um aus X das X-2 zu machen?
Um den Wert aus der Zelle (X-2,Y) zu holen, kann ich ganz einfach "getCellrangebyPosition(X-2,Y)" bzw. "getCellrangebyPosition(X,Y)"schreiben?

Danke für eure Tipps.

Grüße,
batgilla.

EDIT:

Gibt es vielleicht eine andere Möglichkeit ohne Makros? Zum Beispiel eine Verkettung von Calc-Funktionen die per Button ausgelöst werden können?

Beispiel:

C20 ist Zielzelle
D20 ist Wertzelle
E20 ist Button

Wenn man den Button drückt, ist C20=C20+D20. Könnte man das nur mit Calcfunktionien lösen?
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Makro: Position von auslösendem Push-Button bestimmen

Beitrag von Charly »

Hallo Batgilla!
Batgilla hat geschrieben: Gibt es vielleicht eine andere Möglichkeit ohne Makros? Zum Beispiel eine Verkettung von Calc-Funktionen die per Button ausgelöst werden können?
Ich wüsste nicht wie.
Calc-Functionen, werden immer, wenn sich ein Wert Verändert hat neu berechnet. Wenn du eine Bedingte Neuberechnung haben willst, musst du irgendwo ein Kennzeichen setzen oder löschen, das du mit einer Wennbedingung abfragen kannst.

Auch das Herausfinden, welcher Button gedrückt wurde, geht meines Wissens nicht, da die Daten nicht mitgegeben werden. Hier würde nur helfen, wenn du jedem Button ein eigenes Makro zuordnest, in dem die Position festabgespeichert ist. Mit diesem Einzelmakro könntest du dann natürlich das Hauptmakro aufrufen und dabei die gewünschten Daten mitgeben.

Ein Möglichkeit ist auch noch, wenn vor dem Drücken des Buttons eine Zelle in der gewünschten Zeile ausgewählt ist, denn dadurch kann das Makro den zu bearbeitenden Ort ermitteln.

Eine Möglichkeit ist auch noch "Selection Change Listener". Da könnte man statt einen Button eine Zelle anklicken. Das Makro kann dann ermitteln, in welcher Zeile die angeklickte Zelle ist.

Beispiel für den Listener
viewtopic.php?f=18&t=24295&p=103933&hil ... er#p103933

Gruß
Charly
batgilla
*
Beiträge: 12
Registriert: Mi, 06.05.2009 11:49

Re: Makro: Position von auslösendem Push-Button bestimmen

Beitrag von batgilla »

Ein Möglichkeit ist auch noch, wenn vor dem Drücken des Buttons eine Zelle in der gewünschten Zeile ausgewählt ist, denn dadurch kann das Makro den zu bearbeitenden Ort ermitteln.
Danke erstmal :) - dafür hatte Ich auch schon ein Beispiel gefunden, aber das wäre in der Summe auch zu aufwendig :(. Läuft wahrscheinlich darauf hinaus, dass Ich statt 2 generalisierter Makros... 160 Makros mache. Für jede Zelle einen :lol:.

EDIT:

Hab es mir überlegt - werde doch deinen Vorschlag umsetzen ^^.
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Makro: Position von auslösendem Push-Button bestimmen

Beitrag von Charly »

Hallo!
Ein Möglichkeit ist auch noch, wenn vor dem Drücken des Buttons eine Zelle in der gewünschten Zeile ausgewählt ist, denn dadurch kann das Makro den zu bearbeitenden Ort ermitteln.

Läuft wahrscheinlich darauf hinaus, dass Ich statt 2 generalisierter Makros... 160 Makros mache. Für jede Zelle einen :lol:.
Das verstehe ich jetzt nicht. Bei dem Vorschlag brauchst du doch keine Einzelmakros. Durch die markierte Zelle kannst du die aktuelle Zeile auslesen.

Code: Alles auswählen

Zeile = ThisComponent.CurrentSelection.getCellAddress().row
Die nötigen Spalten stehen doch nach deinen Angaben fest. In deinem Beispiel war es C, D, E. Mehr brauchst du nicht, um die Zellen zu finden.
Sollten es doch unterschiedliche Spalten sein, dann darf natürlich nur eine bestimmte Zelle aktiviert werden. Da kann man auch die Spalte auslesen. Oder es andere Kriterien aus der man die Spalte ermitteln kann. z.B. "letzte gefüllte Spalte".

Gruß
Charly
Zuletzt geändert von Charly am Mi, 06.05.2009 15:51, insgesamt 1-mal geändert.
batgilla
*
Beiträge: 12
Registriert: Mi, 06.05.2009 11:49

Re: Makro: Position von auslösendem Push-Button bestimmen

Beitrag von batgilla »

Charly hat geschrieben:Hallo!

Die nötigen Spalten stehen doch nach deinen Angaben fest. In deinem Beispiel war es C, D, E. Mehr brauchst du nicht, um die Zellen zu finden.

Äh... ja... wollte zuerst nicht deine Methode ausprobieren(sondern die Methode mit den Einzelmakros ^^). Hatte mich dann aber mit dem "Edit" umentschieden - ist mir vom Arbeitsaufwand lieber. Danke :).
batgilla
*
Beiträge: 12
Registriert: Mi, 06.05.2009 11:49

Re: Makro: Position von auslösendem Push-Button bestimmen

Beitrag von batgilla »

Kriege es damit leider auch nicht hin :>.

Um die Problemlösung leichter zu machen - ich möchte eine Zelle markieren ("auswahlzelle"), dann möchte ich den Inhalt von dieser Zelle ("auswahlzelleinhalt") mit dem Inhalt einer bestimmten Zelle ("festezelleinhalt") addieren und in dieser Zelle speichern ("festezelle" mit den Koordinaten "C20").

Code: Alles auswählen

Sub Test

Dim oDocument,auswahlzelle,auswahlzelleinhalt,festezelle,festezelleinhalt,inhalt 

oDocument=thisComponent.Sheets.getbyName("test")

auswahlzelle = oDocument.getCurrentSelection()
auswahlzelleinhalt=auswahlzelle.value

festezelle=oDocument.getCellRangeByName("C20")
festezelleinhalt=festezelle.value
festezelleinhalt=festezelleinhalt+auswahlzelleinhalt
oDocument.getCellRangeByName("C20")=festezelleninhalt
End Sub
Bereits bei "auswahlzelle = oDocument.getCurrentSelection()" sagt er, dass "Eigenschaft oder Methode nicht gefunden wird" :(.
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Makro: Position von auslösendem Push-Button bestimmen

Beitrag von Karolus »

Hallo
Nimm mal:

Code: Alles auswählen

Sub Test

Dim oDoc,oSheet,auswahlzelle,auswahlzelleinhalt,festezelle,festezelleinhalt,inhalt

oDoc = thisComponent
osheet = oDoc.Sheets().getbyName("test")

auswahlzelle = oDoc.getCurrentSelection()
auswahlzelleinhalt=auswahlzelle.value

festezelle = oSheet.getCellRangeByName("C20")
festezelleinhalt = festezelle.value
festezelleinhalt = festezelleinhalt+auswahlzelleinhalt
festezelle.value = festezelleinhalt
End Sub
.getCurrentSelection() gibts nur fürs ganze Dokument und nicht für ein einzelnes Tabellenblatt

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
batgilla
*
Beiträge: 12
Registriert: Mi, 06.05.2009 11:49

Re: Makro: Position von auslösendem Push-Button bestimmen

Beitrag von batgilla »

Danke - hat geklappt :).
Antworten