Button für +1 bzw. clear erstellen
Moderator: Moderatoren
-
- ***
- Beiträge: 74
- Registriert: Mi, 09.05.2007 00:03
Button für +1 bzw. clear erstellen
Hallo Leute,
nachdem ich hier im Forum ja schon super viel Hilfe in einem anderen Thread bekommen habe, kann ich es nicht lassen...
Heute beschäftigt mich ein neues Thema:
Ich würde gerne in einer Tabelle 2 Butons erstellen
Einen Button, der mir den Wert eines bestimmten Feldes um +1 erhöht (Zahlenfeld)
Einen Button, der mir den Inhalt eines bestimmten Feldes zurücksetzt auf "0" bzw einfach löscht.
Gibt es dafür in Calc eine Möglichkeit?
Gruß.
WorstCases
nachdem ich hier im Forum ja schon super viel Hilfe in einem anderen Thread bekommen habe, kann ich es nicht lassen...
Heute beschäftigt mich ein neues Thema:
Ich würde gerne in einer Tabelle 2 Butons erstellen
Einen Button, der mir den Wert eines bestimmten Feldes um +1 erhöht (Zahlenfeld)
Einen Button, der mir den Inhalt eines bestimmten Feldes zurücksetzt auf "0" bzw einfach löscht.
Gibt es dafür in Calc eine Möglichkeit?
Gruß.
WorstCases
Re: Button für +1 bzw. clear erstellen
Hallo
Du benötigst 2 Schaltflächen (-->Ansicht-->Symbolleiste-->Formularsteuerelemente)
Diese verknüpfst du über -->Rechtsklick-->Kontrollfeld-->Ereignisse-->beim Auslösen
mit jeweils einem der folgenden Makros:
im Kapitel "Quelltext übernehmen" gibts Informationen zur Installation der Makros.
Gruß Karo
Du benötigst 2 Schaltflächen (-->Ansicht-->Symbolleiste-->Formularsteuerelemente)
Diese verknüpfst du über -->Rechtsklick-->Kontrollfeld-->Ereignisse-->beim Auslösen
mit jeweils einem der folgenden Makros:
Code: Alles auswählen
Sub plus_eins
'erhöht den Wert von Tabelle1.A1 um 1
thisComponent.sheets().getbyname("Tabelle1").getcellrangebyname("A1").value =_
thisComponent.sheets().getbyname("Tabelle1").getcellrangebyname("A1").value + 1
End Sub
Sub reset
'leert Tabelle1.A1
thisComponent.sheets().getbyname("Tabelle1").getcellrangebyname("A1").string = ""
end sub
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)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
-
- ***
- Beiträge: 74
- Registriert: Mi, 09.05.2007 00:03
Re: Button für +1 bzw. clear erstellen
Danke für den Tipp - das sieht soweit ja vielversprechend aus.
Aber: Ich möchte diesen "+1" bzw clear-Button gerne für ca. 50+ Felder benutzen. Muss ich da für jeden Button ein eigenes Makro schreiben (wegen dem Feld, dass mit dem Button verändert werden soll)?
Was passiert, wenn das Makro als Position z.B. A1 hat und ich füge zusätzliche Spalten/Reihen davor ein? Ist das Makro und der Button dann funktionsunfähig?
Ach und noch eine Frage zu dem Code bzgl Feld leeren (clear). Angenommen, ich möchte das Feld nicht leeren, sondern auf Null "0" setzen, würde der Code dann so aussehen?
Gruß.
WorstCases
Aber: Ich möchte diesen "+1" bzw clear-Button gerne für ca. 50+ Felder benutzen. Muss ich da für jeden Button ein eigenes Makro schreiben (wegen dem Feld, dass mit dem Button verändert werden soll)?
Was passiert, wenn das Makro als Position z.B. A1 hat und ich füge zusätzliche Spalten/Reihen davor ein? Ist das Makro und der Button dann funktionsunfähig?
Ach und noch eine Frage zu dem Code bzgl Feld leeren (clear). Angenommen, ich möchte das Feld nicht leeren, sondern auf Null "0" setzen, würde der Code dann so aussehen?
Code: Alles auswählen
Sub Null
'stzt den Wert von Tabelle1.A1 auf Null zurück
thisComponent.sheets().getbyname("Tabelle1").getcellrangebyname("A1").value =""
End Sub
WorstCases
Re: Button für +1 bzw. clear erstellen
Hi WorstCases,
Folgender Code bezieht sich immer auf die Zelle(n) die selektiert ist/sind:
Für den Reset nimm folgenden Code:
Ist es das was Du Dir vorstellst?
Jürgn
Nicht unbedingt.WorstCases hat geschrieben:Aber: Ich möchte diesen "+1" bzw clear-Button gerne für ca. 50+ Felder benutzen. Muss ich da für jeden Button ein eigenes Makro schreiben (wegen dem Feld, dass mit dem Button verändert werden soll)?
Ja, aber es bezieht sich immer noch auf die Zelle "A1".WorstCases hat geschrieben:Was passiert, wenn das Makro als Position z.B. A1 hat und ich füge zusätzliche Spalten/Reihen davor ein? Ist das Makro und der Button dann funktionsunfähig?
Folgender Code bezieht sich immer auf die Zelle(n) die selektiert ist/sind:
Code: Alles auswählen
Sub plus_eins
oDoc = ThisComponent
If Not oDoc.supportsService _
("com.sun.star.sheet.SpreadsheetDocument" ) then
MsgBox "Das ist ein kein Calc-Dokument! Die Anwendung kann deshalb nicht ausgeführt werden! " , 16 , "plus_eins"
Exit Sub
end if
if End_Row > 65534 then
msgbox "Ganze Spalten markieren ist nicht möglich!" & CHR(13) & "Der Vorgeng wird jetzt abgebrochen!",,"plus_eins"
end if
oSheet = ThisComponent.CurrentController.getActiveSheet()
oZell = oDoc.getCurrentSelection()
oZell.supportsService("com.sun.star.sheet.SheetCellRange")
oSelect=ThisComponent.CurrentSelection.getRangeAddress
oSelectColumn=ThisComponent.CurrentSelection.Columns
oSelectRow=ThisComponent.CurrentSelection.Rows
CountColumn=oSelectColumn.getCount
CountRow=oSelectRow.getCount
Start_Column=oSelect.StartColumn
End_Column=oSelect.EndColumn
Start_Row =oSelect.StartRow
End_Row=oSelect.EndRow
if End_Row > 65534 then
msgbox "Ganze Spalten markieren ist nicht möglich!" & CHR(13) &_
"Der Vorgang wird jetzt abgebrochen!",,"plus_eins"
exit sub
end if
For sp = Start_Column to End_Column
For ze = Start_Row to End_Row
oCell = oSheet.getCellByPosition(sp,ze)
myvalue = oCell.value
myvalue = myValue +1
ocell.value = myValue
next ze
next sp
msgbox "Der Vorgang ist abgeschlossen" ,64, "plus_eins"
End Sub
Code: Alles auswählen
Sub reset
oDoc = ThisComponent
If Not oDoc.supportsService _
("com.sun.star.sheet.SpreadsheetDocument" ) then
MsgBox "Das ist ein kein Calc-Dokument! Die Anwendung kann deshalb nicht ausgeführt werden! " , 16 , "plus_eins"
Exit Sub
end if
if End_Row > 65534 then
msgbox "Ganze Spalten markieren ist nicht möglich!" & CHR(13) & "Der Vorgeng wird jetzt abgebrochen!",,"plus_eins"
end if
oSheet = ThisComponent.CurrentController.getActiveSheet()
oZell = oDoc.getCurrentSelection()
oZell.supportsService("com.sun.star.sheet.SheetCellRange")
oSelect=ThisComponent.CurrentSelection.getRangeAddress
oSelectColumn=ThisComponent.CurrentSelection.Columns
oSelectRow=ThisComponent.CurrentSelection.Rows
CountColumn=oSelectColumn.getCount
CountRow=oSelectRow.getCount
Start_Column=oSelect.StartColumn
End_Column=oSelect.EndColumn
Start_Row =oSelect.StartRow
End_Row=oSelect.EndRow
if End_Row > 65534 then
msgbox "Ganze Spalten markieren ist nicht möglich!" & CHR(13) &_
"Der Vorgang wird jetzt abgebrochen!",,"plus_eins"
exit sub
end if
For sp = Start_Column to End_Column
For ze = Start_Row to End_Row
oCell = oSheet.getCellByPosition(sp,ze)
ocell.value = 0
next ze
next sp
msgbox "Der Vorgang ist abgeschlossen" ,64, "plus_eins"
End Sub
Jürgn
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
-
- ***
- Beiträge: 74
- Registriert: Mi, 09.05.2007 00:03
Re: Button für +1 bzw. clear erstellen
@turtle47
Dein Code (der obere) ist interessant, aber nicht genau das, was ich brauche. Den unteren verstehe ich nicht so ganz. Vor allen, weil Du schreibst: Obere Code für selektierte Zellen, unterer Code für den Rest. Was meinst Du mit dem Rest.
Ich habe mal einen Screenshot angefügt, der verdeutlichen soll, was ich vorhabe. Vielleicht kann mir dann jemand einen Tipp eben.
Mein Problem ist, dass ich die Tabelle mit Sicherheit noch oft ändern/erweitern werde. Daher kann ich mit einem Makro, das auf eine spezielle Spalte und Zeile je Button festgelegt ist wenig anfangen. Ich kann ja nicht jedes Mal die Makros für die Buttons umprogrammieren, wenn ich Spalten oder Zeilen zur Tabelle hinzufüge.
Hier mal ein Screenshot meines Vorhabens:
Ich habe die Buttons mit einem Malprogramm nur mal zur Veranschaulichung eingefügt. Das sind (noch) keine Buttons aus Calc!
Dein Code (der obere) ist interessant, aber nicht genau das, was ich brauche. Den unteren verstehe ich nicht so ganz. Vor allen, weil Du schreibst: Obere Code für selektierte Zellen, unterer Code für den Rest. Was meinst Du mit dem Rest.
Ich habe mal einen Screenshot angefügt, der verdeutlichen soll, was ich vorhabe. Vielleicht kann mir dann jemand einen Tipp eben.
Mein Problem ist, dass ich die Tabelle mit Sicherheit noch oft ändern/erweitern werde. Daher kann ich mit einem Makro, das auf eine spezielle Spalte und Zeile je Button festgelegt ist wenig anfangen. Ich kann ja nicht jedes Mal die Makros für die Buttons umprogrammieren, wenn ich Spalten oder Zeilen zur Tabelle hinzufüge.
Hier mal ein Screenshot meines Vorhabens:
Ich habe die Buttons mit einem Malprogramm nur mal zur Veranschaulichung eingefügt. Das sind (noch) keine Buttons aus Calc!
- Dateianhänge
-
- OOCalc.jpg (71.24 KiB) 13893 mal betrachtet
Re: Button für +1 bzw. clear erstellen
Hallo WorstCases,
Dazu habe ich mal ein Beispiel erstellt.
Unter Ansicht > Symbolleisten > Formular-Steuerlemente findest Du das
Steuerelement "Drehfeld" was ich hier verwendet habe. Sind wir damit einen Schritt weiter?
Jürgen
Sorry, das sollte Reset heissen.WorstCases hat geschrieben:Was meinst Du mit dem Rest.

Ein Bild sagt mehr als tausend Worte bestätigt sich immer wieder.WorstCases hat geschrieben:Hier mal ein Screenshot meines Vorhabens:

Dazu habe ich mal ein Beispiel erstellt.
Unter Ansicht > Symbolleisten > Formular-Steuerlemente findest Du das
Steuerelement "Drehfeld" was ich hier verwendet habe. Sind wir damit einen Schritt weiter?
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
-
- ***
- Beiträge: 74
- Registriert: Mi, 09.05.2007 00:03
Re: Button für +1 bzw. clear erstellen
Ja, damit sind wir definitiv einen Schritt weriter.
Kann man das auch so ungefähr realisieren (siehe Bild)?
Die Änderung habe ich nur grafisch gemacht, nicht in Calc. Ich möchte nach Möglichkeit so wenig Platz wie möglich verbrauchen, damit das ganze übersichtlich bleibt.
Ich habe mal versucht, den Code von dem Makro zu verstehen - leider mit mässigem Erfolg. Wie wird jetzt das Drehfeld einem Feld auf dem Tabellenblatt zugeordnet...?
Gruß.
WorstCases
Kann man das auch so ungefähr realisieren (siehe Bild)?
Die Änderung habe ich nur grafisch gemacht, nicht in Calc. Ich möchte nach Möglichkeit so wenig Platz wie möglich verbrauchen, damit das ganze übersichtlich bleibt.
Ich habe mal versucht, den Code von dem Makro zu verstehen - leider mit mässigem Erfolg. Wie wird jetzt das Drehfeld einem Feld auf dem Tabellenblatt zugeordnet...?
Gruß.
WorstCases
Re: Button für +1 bzw. clear erstellen
Hi WorstCases,
der Makrocode wird in diesem Fall nicht benötigt, kann also entfernt werden.
Der war noch aus den ersten Versuchen in der Tabelle drin.
Das ist das Symbol mit dem Dreieck/Lineal/Bleistift.
Dann das Drehfeld auf dem Tabellenblatt markieren und dann Rechtsklick > Kontextmenue > Kontrollfeld > Reiter "Daten"
Dort kannst Du die Verknüpfte Zelle eintragen.
Viel Erfolg.
Jürgen
der Makrocode wird in diesem Fall nicht benötigt, kann also entfernt werden.
Der war noch aus den ersten Versuchen in der Tabelle drin.
In der Formular-Steuerelemente Sybolleiste den Entwurfsmodus zuerst einschalten.WorstCases hat geschrieben:Wie wird jetzt das Drehfeld einem Feld auf dem Tabellenblatt zugeordnet...?
Das ist das Symbol mit dem Dreieck/Lineal/Bleistift.
Dann das Drehfeld auf dem Tabellenblatt markieren und dann Rechtsklick > Kontextmenue > Kontrollfeld > Reiter "Daten"
Dort kannst Du die Verknüpfte Zelle eintragen.
Viel Erfolg.
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
-
- ***
- Beiträge: 74
- Registriert: Mi, 09.05.2007 00:03
Re: Button für +1 bzw. clear erstellen
OK - So weit, so gut. Jetzt habe ich ein Drehfeld, mit dem ich den Wert entweder um "+1" erhöhen bzw um "-1" veringern kann.
Das ich ein großer Schritt
.
Ist ein Drehfeld denn die einzige Möglichkeit. Bei dieser Lösung habe ich vier Schaltflächen, benötige aber nur 2 ("+1" und "auf 0").
Gruß. WorstCases
Das ich ein großer Schritt

Ist ein Drehfeld denn die einzige Möglichkeit. Bei dieser Lösung habe ich vier Schaltflächen, benötige aber nur 2 ("+1" und "auf 0").
Gruß. WorstCases
Re: Button für +1 bzw. clear erstellen
Zu Punkt 2 gibt es noch eine andere Möglichkeit. Du gibst den Zellen einen Namen und dann sprichst Du im Code die Zelle über den Namen an. So kannst Du in der Tabelle rumfuhrwerken wie Du willst, also Spalten und Zeilen einfügen oder löschen wie Du willst, der Bezug zu der Zelle ist immer eindeutig über den Namen gegeben.1. WorstCases hat geschrieben:Bei dieser Lösung habe ich vier Schaltflächen, benötige aber nur 2 ("+1" und "auf 0").[/q[ote]2. WorstCases hat geschrieben:Daher kann ich mit einem Makro, das auf eine spezielle Spalte und Zeile je Button festgelegt ist wenig anfangen. Ich kann ja nicht jedes Mal die Makros für die Buttons umprogrammieren, wenn ich Spalten oder Zeilen zur Tabelle hinzufüge.[/[uote]3. WorstCases hat geschrieben:Muss ich da für jeden Button ein eigenes Makro schreiben (wegen dem Feld, dass mit dem Button verändert werden soll)?[/[uote]
Zu letztem hatte ich Dir schon eine Lösung angeboten:[[uote="turtle47"]Folgender Code bezieht sich immer auf die Zelle(n) die selektiert ist/sind:
Code: Alles auswählen
Sub plus_eins_Zelle1
'erhöht den Wert von Tabelle1.A1 um 1
thisComponent.sheets().getbyname("Tabelle1").getcellrangebyname("Zelle1").value =_
thisComponent.sheets().getbyname("Tabelle1").getcellrangebyname("Zelle1").value + 1
End Sub
Sub reset_Zelle1
'leert Tabelle1.A1
thisComponent.sheets().getbyname("Tabelle1").getcellrangebyname("Zelle1").value = 0
end sub[
Dafür musst Du aber für jede Zelle zwei eigene Makros erstellen.

WorstCases, irgendwie musst Du einen Kompromiss finden.
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
-
- ***
- Beiträge: 74
- Registriert: Mi, 09.05.2007 00:03
Re: Button für +1 bzw. clear erstellen
Naja, dann muss ich halt in den sauren Apfel beissen und für jede Zelle zwei Markos erstellen.
Das macht zwar einmal arbeit, finde ich jetzt aber nicht mehr soo tragisch, weil Du mir folgendes gesagt hast:
Das macht zwar einmal arbeit, finde ich jetzt aber nicht mehr soo tragisch, weil Du mir folgendes gesagt hast:
Sorry für die vielleicht dumme Frage: Aber wie gebe ich einer Zelle einen festen namen? Konnte diese Möglichkeit (noch) nicht finden...Du gibst den Zellen einen Namen und dann sprichst Du im Code die Zelle über den Namen an. So kannst Du in der Tabelle rumfuhrwerken wie Du willst, also Spalten und Zeilen einfügen oder löschen wie Du willst, der Bezug zu der Zelle ist immer eindeutig über den Namen gegeben.
Re: Button für +1 bzw. clear erstellen
Zelle auswählen und dann Menue > Einfügen > Namen > Festlegen........... 

Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
-
- ***
- Beiträge: 74
- Registriert: Mi, 09.05.2007 00:03
Re: Button für +1 bzw. clear erstellen
Cool! Das funktioniert soweit.
Jetzt ergibt sich aber eine neue Frage:
Wenn ich dann alle Buttons fertig habe, sagen wir auf Tabellenblatt01. Nun möchte ich in Zukunft dieses Blatt einmal kopieren, sagen wir, die Kopie heisst Tabellenblatt2. Dann würden in diesem Blatt ja die Makros auch wieder nicht funktionieren...
Gibt es da auch einen Work-Around, oder muss ich damit leben, dass ich dann ohne größeren Aufwand nur das ursprüngliche-Blatt benutzen kann?
Gruß.
WorstCases
Jetzt ergibt sich aber eine neue Frage:
Wenn ich dann alle Buttons fertig habe, sagen wir auf Tabellenblatt01. Nun möchte ich in Zukunft dieses Blatt einmal kopieren, sagen wir, die Kopie heisst Tabellenblatt2. Dann würden in diesem Blatt ja die Makros auch wieder nicht funktionieren...
Gibt es da auch einen Work-Around, oder muss ich damit leben, dass ich dann ohne größeren Aufwand nur das ursprüngliche-Blatt benutzen kann?
Gruß.
WorstCases
Re: Button für +1 bzw. clear erstellen
In der IDE kannst Du über Menue > Bearbeiten > Suchen&ersetzen.... den Tabellennamen ruckzuck austauschen.
Aber das nützt in diesem Fall nichts, wenn das Blatt kopiert ist, dann ist der Zellname "Zelle1" ja noch auf dem Ursprungsblatt.
Zellnamen kann man innerhalb eines Dokuments aber nur einmal vergeben
was ja auch logisch ist.

Aber das nützt in diesem Fall nichts, wenn das Blatt kopiert ist, dann ist der Zellname "Zelle1" ja noch auf dem Ursprungsblatt.
Zellnamen kann man innerhalb eines Dokuments aber nur einmal vergeben

Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
-
- ***
- Beiträge: 74
- Registriert: Mi, 09.05.2007 00:03
Re: Button für +1 bzw. clear erstellen
Ja, ist logisch. Ich hab beim experimentieren is Dato immer einen gewissen Stand einfach innerhalb des Dokumentes in eine neue Tabelle kopiert. Ab jetzt speichere ich es dann einfach unter einem anden Dateinamen.
Aber ich hänge jetzt im Makro-Manager.
Irgendwie komme ich nicht zurecht. Ich bin in meinem Dokument, Module1 und sehe mein Erstes Makro.
So weit, so gut - siehe Bild.
Allerdings finde ich keinen Weg ein zweites Makro innerhalb dieses Molues zu erstellen. Was mache ich fasch? Es braucht doch nicht jedes Makro ein eigenes Modul, oder?
Aber ich hänge jetzt im Makro-Manager.
Irgendwie komme ich nicht zurecht. Ich bin in meinem Dokument, Module1 und sehe mein Erstes Makro.
So weit, so gut - siehe Bild.
Allerdings finde ich keinen Weg ein zweites Makro innerhalb dieses Molues zu erstellen. Was mache ich fasch? Es braucht doch nicht jedes Makro ein eigenes Modul, oder?
- Dateianhänge
-
- OOCalc.jpg (26.42 KiB) 13719 mal betrachtet