Button für +1 bzw. clear erstellen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Button für +1 bzw. clear erstellen

Re: Button für +1 bzw. clear erstellen

von Tichy » Di, 24.06.2008 17:20

Kann ich das dann auch in Exel exportieren?

Re: Button für +1 bzw. clear erstellen

von WorstCases » Fr, 20.06.2008 00:10

OK! Danke.

Wie du siehst: Ich bin blutiger Anfänger. Bin davon ausgegangen, dass ich für jedes Makro eine "neue Seite" brauche und nicht alles in das selbe Dokument kommt.

Re: Button für +1 bzw. clear erstellen

von turtle47 » Do, 19.06.2008 22:37

WorstCases hat geschrieben:Es braucht doch nicht jedes Makro ein eigenes Modul, oder?
Nein, die Subs müssen aber immer unterschiedliche Namen haben.
z.B.

Code: Alles auswählen

Sub plus_eins_1
.......
end Sub


Sub plus_eins_2
.......
end Sub

Re: Button für +1 bzw. clear erstellen

von WorstCases » Do, 19.06.2008 22:24

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?
Dateianhänge
OOCalc.jpg
OOCalc.jpg (26.42 KiB) 13723 mal betrachtet

Re: Button für +1 bzw. clear erstellen

von turtle47 » Do, 19.06.2008 17:11

In der IDE kannst Du über Menue > Bearbeiten > Suchen&ersetzen.... den Tabellennamen ruckzuck austauschen. :D

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.

Re: Button für +1 bzw. clear erstellen

von WorstCases » Do, 19.06.2008 15:44

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

Re: Button für +1 bzw. clear erstellen

von turtle47 » Do, 19.06.2008 14:07

Zelle auswählen und dann Menue > Einfügen > Namen > Festlegen........... :D

Re: Button für +1 bzw. clear erstellen

von WorstCases » Do, 19.06.2008 14:03

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:
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.
Sorry für die vielleicht dumme Frage: Aber wie gebe ich einer Zelle einen festen namen? Konnte diese Möglichkeit (noch) nicht finden...

Re: Button für +1 bzw. clear erstellen

von turtle47 » Do, 19.06.2008 13:25

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:
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.

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[
In Diesem Fall hat die angesprochene Zelle den Namen "Zelle1".
Dafür musst Du aber für jede Zelle zwei eigene Makros erstellen. :lol:

WorstCases, irgendwie musst Du einen Kompromiss finden.

Re: Button für +1 bzw. clear erstellen

von WorstCases » Do, 19.06.2008 12:33

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

Re: Button für +1 bzw. clear erstellen

von turtle47 » Do, 19.06.2008 12:04

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.
WorstCases hat geschrieben:Wie wird jetzt das Drehfeld einem Feld auf dem Tabellenblatt zugeordnet...?
In der Formular-Steuerelemente Sybolleiste den Entwurfsmodus zuerst einschalten.
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

Re: Button für +1 bzw. clear erstellen

von WorstCases » Do, 19.06.2008 11:54

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

Re: Button für +1 bzw. clear erstellen

von turtle47 » Mi, 18.06.2008 22:12

Hallo WorstCases,
WorstCases hat geschrieben:Was meinst Du mit dem Rest.
Sorry, das sollte Reset heissen. :oops:
WorstCases hat geschrieben:Hier mal ein Screenshot meines Vorhabens:
Ein Bild sagt mehr als tausend Worte bestätigt sich immer wieder. :D

Dazu habe ich mal ein Beispiel erstellt.
Unter Ansicht > Symbolleisten > Formular-Steuerlemente findest Du das
Steuerelement "Drehfeld" was ich hier verwendet habe.
Drehfeld.ods
(9.15 KiB) 1010-mal heruntergeladen
Sind wir damit einen Schritt weiter?

Jürgen

Re: Button für +1 bzw. clear erstellen

von WorstCases » Mi, 18.06.2008 21:46

@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!
Dateianhänge
OOCalc.jpg
OOCalc.jpg (71.24 KiB) 13897 mal betrachtet

Re: Button für +1 bzw. clear erstellen

von turtle47 » Mi, 18.06.2008 21:09

Hi WorstCases,
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)?
Nicht unbedingt.
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?
Ja, aber es bezieht sich immer noch auf die Zelle "A1".

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
Für den Reset nimm folgenden Code:

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
Ist es das was Du Dir vorstellst?

Jürgn

Nach oben