Seite 1 von 1
Makro: Position von auslösendem Push-Button bestimmen
Verfasst: Mi, 06.05.2009 12:16
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?
Re: Makro: Position von auslösendem Push-Button bestimmen
Verfasst: Mi, 06.05.2009 14:43
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
Re: Makro: Position von auslösendem Push-Button bestimmen
Verfasst: Mi, 06.05.2009 15:02
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

.
EDIT:
Hab es mir überlegt - werde doch deinen Vorschlag umsetzen ^^.
Re: Makro: Position von auslösendem Push-Button bestimmen
Verfasst: Mi, 06.05.2009 15:44
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

.
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
Re: Makro: Position von auslösendem Push-Button bestimmen
Verfasst: Mi, 06.05.2009 15:47
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

.
Re: Makro: Position von auslösendem Push-Button bestimmen
Verfasst: Mi, 06.05.2009 16:31
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"

.
Re: Makro: Position von auslösendem Push-Button bestimmen
Verfasst: Mi, 06.05.2009 20:37
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
Re: Makro: Position von auslösendem Push-Button bestimmen
Verfasst: Do, 07.05.2009 15:29
von batgilla
Danke - hat geklappt

.