CALC: Gültigkeit

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Eddy
********
Beiträge: 2758
Registriert: So, 02.10.2005 10:14

Re: Gültigkeit im Makro

Beitrag von Eddy »

Hallo Jollar,

als erstes solltest Du Dich in Foren gründlich umsehen um herauszufinden, in welchem Unterforum Du am ehesten Hilfe findest. Hier ist es das Unterforum: OOo Basic und Java. Extra für Makros eingerichtet.

Mit unprogrammierten Grüßen

Eddy
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Gültigkeit im Makro

Beitrag von turtle47 »

Hallo Das Jollar,
- Zellen eine Gültigkeit zuweisen (genauer einen Zellbereich)
Hier ein Beispiel, welches ich mal im Web gefunden habe, aus meiner Grabbelkiste:

Code: Alles auswählen

sub Main
oDoc = ThisComponent
oSheet = oDoc.getSheets.getByIndex(0)

' example of VALIDATION TYPE: DECIMAL

CellRange = oSheet.getCellRangeByName("B1:B999")
Validation = CellRange.Validation
Validation.Type = com.sun.star.sheet.ValidationType.DECIMAL
Validation.ShowErrorMessage = True
Validation.ErrorMessage = "This is an invalid value!"
Validation.ErrorTitle = "ERROR"
Formula1 = "0.0"
Formula2 = "5.0"
Validation.ShowInputMessage = True
Validation.InputTitle = "RANGE IS:"
Validation.InputMessage = "Between " & Formula1 & " and " & Formula2
Validation.ErrorAlertStyle = com.sun.star.sheet.ValidationAlertStyle.STOP
Validation.setOperator com.sun.star.Sheet.ConditionOperator.BETWEEN
Validation.setFormula1 "0.0"
Validation.setFormula2 "5.0"
CellRange.Validation = Validation

' example of VALIDATION TYPE: LIST

Set CellRange = oSheet.getCellRangeByName("C1:C999")
Set Validation = CellRange.Validation
Validation.Type = com.sun.star.sheet.ValidationType.LIST
Validation.ShowErrorMessage = True
Validation.ErrorMessage = "Must be a value from the list!"
Validation.ErrorTitle = "ERROR"
Validation.ShowInputMessage = True
Validation.InputTitle = "INPUT VALUES:"
Validation.InputMessage = "Take a value from the list"
Validation.ErrorAlertStyle = com.sun.star.sheet.ValidationAlertStyle.STOP
Validation.setOperator com.sun.star.Sheet.ConditionOperator.EQUAL
For z = 1 To 10
    oSheet.getCellByPosition(0, z).setString "ITEM" & z
Next
Validation.setFormula1 "$A$2:$A$11"
CellRange.Validation = Validation
end sub
Jürgen

@Mod: Thread bitte verschieben.
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
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Gültigkeit im Makro

Beitrag von turtle47 »

Hallo,

Code: Alles auswählen

Set CellRange = oSheet.getRangeAddress
Wie kommst Du denn darauf oder was willst (wolltest) Du damit bezwecken?

Tausche obere Zeile gegen folgende aus:

Code: Alles auswählen

Set CellRange = oSheet.getCellRangeByName("C1:C999")
Das bestimmt den Bereich, in dem die Gültigkeit eingefügt wird.
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
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Gültigkeit im Makro

Beitrag von turtle47 »

mal ein paar fragen zum besseren verständniss
Gegenfrage: Hast du Dir überhaupt mal angesehen was auf dem ersten Tabellenblatt passiert ist, nachdem das Makro durchgelaufen ist?
Ich glaube eher nicht.
Code: Alles auswählen
Set CellRange = oSheet.getRangeAddress


damit wollte eich eig dem makro sagen das es die zelle verändern soll die gerade selektiert ist aber das funktioniert wohl net so einfach xD
Diese Aufgabenstellung ist nicht in Deiner Eingangsfrage enthalten.
Der Zugriff auf die aktuelle Zelle funktioniert so.
Validation.setOperator com.sun.star.Sheet.ConditionOperator.EQUAL
ist das die einstellung (=; <; <= usw)die frei wird
wenn man das was zugelassen werden soll auf Ganze Zahl, Datum, Zeit usw. setzt?
Genau so ist es, kann man in diesem Beispiel aber ruhig weglassen.
For z = 1 To 10
oSheet.getCellByPosition(0, z).setString "ITEM" & z
Next
ich kann mir nicht erklären wozu das dienen soll cO
An dieser Frage sehe ich, dass Du dir die erste Tabelle nicht angesehen hast. Denn dann hättest Du festgestellt, dass in den Zellen von A2 bis A11 etwas in der Art steht.

Code: Alles auswählen

ITEM1
bis
ITEM10
Die Strings setzen sich zusammen aus "ITEM" & z

Code: Alles auswählen

For z = 1 To 10
        oSheet.getCellByPosition(0, z).setString "ITEM" & z
    Next
Wenn die Schleife durchlaufen wird zählt z jeweils einen hoch und trägt den String "ITEM" und die Zahl, die sich aus dem Count "z" ergibt, zusammengesetzt an der jeweiligen Zellposition ein.
Validation.setFormula1 "$A$2:$A$11"
müsste da nich sowas wie INDEX() o.Ä. hin ? oder beinhaltet set Formula1 eine bestimmte formel
Und schon wieder sind wir an dem Punkt, wo ich einfach frech behaupte, dass Du Dir das Ergebniss des Makrodurchlaufs in der Gültigkeit nicht angesehen hast.
Set Validation = CellRange.Validation
CellRange.Validation = Validation
wo ist da der unterschied (ja das set), des entzieht sich mir irgendwie cO
Sorry, mir ehrlich gesagt auch, da der Code nicht von mir ist.
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
Jollar
Beiträge: 4
Registriert: Mo, 08.10.2012 12:56

Re: Gültigkeit im Makro

Beitrag von Jollar »

Moin,

ah jetzt ja ^^ ich war wirklich zu doof zum gucken

jedoch:

ich hab mir den code mal angepasst

Code: Alles auswählen

sub test2

    oDoc = ThisComponent
    oZelle=oDoc.getCurrentSelection()

    Set CellRange = oZelle
    Set Validation = CellRange.Validation
    Validation.Type = com.sun.star.sheet.ValidationType.LIST
    Validation.setFormula1 "INDEX('2.Tabellenblatt'.B1:C3;VERGLEICH(VERSCHIEBUNG(INDIREKT(ZELLE(""ADDRESS""));-2;-7);'2.Tabellenblatt'.A1:A3;0))"
    CellRange.Validation = Validation
end sub
Wenn ich diesen Code nun ausführe wird mir in der aktuell ausgewählten Zelle ein gültigkeitsbereich eingerichtet.
Wenn ich die nun entstandene Gültigkeit verändern will (also mir einen wert aus der liste aussuchen will),
zeigt mir die liste als einzigen Eintrag #NAME? an.
Wenn ich nun das gültigkeitsfenster (über Daten-> Gültigkeit) und ok klicke werden mir danch die richtigen werte angezeigt

PROBLEM:

aus INDEX('2.Tabellenblatt'.B1:C3;VERGLEICH(VERSCHIEBUNG(INDIREKT(ZELLE(""ADDRESS""));-2;-7);'2.Tabellenblatt'.A1:A3;0))
wird INDEX('2.Tabellenblatt'.B1:C3;vergleich(verschiebung(indirekt(zelle("ADDRESS"));-2;-7);'2.Tabellenblatt'.A1:A3;0))

Mit verwirrten Grüßen Das Jollar
Antworten