Schaltfläche bedingt sichtbar und nutzbar

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

Moderator: Moderatoren

AlinaGeier
**
Beiträge: 21
Registriert: Mo, 01.02.2021 14:10

Schaltfläche bedingt sichtbar und nutzbar

Beitrag von AlinaGeier »

Hallo,
diesmal habe ich die Frage, ob es möglich ist, eine Schaltfläche nur bedingt sichtbar zu machen. Ich möchte, dass meine Schaltfläche nur dann sichtbar und auch benutzbar ist, wenn in einer bestimmten Zelle ein bestimmter Wert steht. Ist das möglich?
LG, Alina
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von craig22 »

Hallo Alina,

dazu benötigt man eine Eventsteuerung/ Ereignissteuerung.
Alles weitere in der Datei:
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
AlinaGeier
**
Beiträge: 21
Registriert: Mo, 01.02.2021 14:10

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von AlinaGeier »

@craig22

Vielen Dank! Ich habe nur ein Problem... ich habe das Makro jetzt kopiert und in die Calc-Tabelle eingefügt, in der ich arbeite. Wenn ich jetzt allerdings eine Schaltfläche mit dem Namen Schaltfläche 1 erstelle und deinen Anweisungen nach über Ereignisse das Makro einbaue, passiert nichts, wenn ich in A1 den Wert 1 eingebe. Woran könnte das liegen?
Ich habe auch noch eine andere Frage. Ich würde gerne die Schaltfläche nicht von A1 abhängig machen, sondern von einer anderen Zelle und auch nicht, ob der Wert 1 darin steht, sonder von einem gewissen Text "richtige Antwort", also dass die Schaltfläche nur sichtbar ist, wenn dieser Text angezeigt wird. Ist das mit demselben Makro möglich? Was muss ich dabei dann verändern? Aber nochmals vielen Dank, das Makro hat schon sehr geholfen!

@Gast45

Ups, sorry, das wusste ich nicht, mach ich das nächste Mal:)

LG, Alina
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von craig22 »

Hallo Alina,
  1. Im Makro ist Referenz für die Tabelle mit dem Namen "Tabelle1" gesetzt.
    Wenn Deine Tabelle einen anderen Namen hat, dann musst Du dies im Makro (Zeile 8 ) ändern:

    Code: Alles auswählen

    oSheet = thiscomponent.sheets.getbyname("Tabelle1")
  2. Du musst der Tabelle ein Tabellenereignis zuweisen, so wie ich es im Beispiel bebildert habe:
    1. Rechtsklick auf das Register Deiner "Tabelle → Tabellenereignisse"
    2. Im nächsten Fenster unter "Zuweisungen → Inhalt geändert" markieren
    3. Button "Makro..." und nun das Makro auswählen, auf das die Ereignissteuerung reagieren soll:
      Dieser Screenshot zeigt links, beim ersten roten Pfeil den Namen meines Dokuments,
      hier musst Du Deine Calc-Datei auswählen und dann folge dn roten Pfeilen
      Tabellenereignis Makrozuweisung.JPG
      Tabellenereignis Makrozuweisung.JPG (20.88 KiB) 3386 mal betrachtet
Nun solte es funktionieren.

--------------------------------------
Alina hat geschrieben:Ich habe auch noch eine andere Frage. Ich würde gerne die Schaltfläche nicht von A1 abhängig machen, sondern von einer anderen Zelle und auch nicht, ob der Wert 1 darin steht, sonder von einem gewissen Text "richtige Antwort", also dass die Schaltfläche nur sichtbar ist, wenn dieser Text angezeigt wird. Ist das mit demselben Makro möglich? Was muss ich dabei dann verändern? Aber nochmals vielen Dank, das Makro hat schon sehr geholfen!
Der geänderte Code. Lese bitte die Kommentare im Code!

Code: Alles auswählen

REM  *****  BASIC  *****

Dim event
Dim oSheet as Object
Dim oRange as Object
Dim oForm as Object
Sub Check_A1(event)

REM Hier ggf. den Tabellenblattnamen ändern	
    oSheet = thiscomponent.sheets.getbyname("Tabelle1")

REM Hier ggf. die Zelladresse ändern
	    oRange = oSheet.getcellrangebyname("B20")

		oForm=thisComponent.DrawPages.getByIndex(0)
			oForm=oForm.getForms.getByIndex(0).getByIndex(0)

    if oRange.queryIntersection(event.RangeAddress).count = 1 then

			' hier geändert in → oRange.String = "richtige Antwort"
   			If oForm.Name="Schaltfläche 1" AND oRange.String = "richtige Antwort" then
   				oForm.EnableVisible ="False"
   				
			' hier geändert in → oRange.String <> "richtige Antwort"
			' <> bedeutet NICHT
   			ElseIf oForm.Name="Schaltfläche 1" AND oRange.String <> "richtige Antwort" then
   				oForm.EnableVisible ="True"   				
			End If
    end if

End Sub
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
AlinaGeier
**
Beiträge: 21
Registriert: Mo, 01.02.2021 14:10

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von AlinaGeier »

Vielen Dank @craig22, das hilft mir schon sehr weiter. Allerdings wird in die Zelle, die überprüft wird, nicht manuell "richtige Antwort" eingetragen sondern durch eine WENN-Formel. Wenn ich den Text manuell eintrage, funktioniert alles wie gewünscht, wenn der Text jedoch automatisch durch die Formel eingetragen wird, verschwindet die Schaltfläche nicht. Hättest du auch hierfür eine Lösung? Das wäre echt super!
Das wäre super! LG, Alina
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von craig22 »

Hallo Alina,

eine unmittelbare Lösung dafür habe ich nicht.

Ggf. wenn ich mehr Informationen zu Deinen Abläufen habe:

Zelladressen?
Wie lautet die WENN-Funktion?
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von craig22 »

Hallo Alina,
  • Formel in Zelle A1 =

    Code: Alles auswählen

    =WENN(B1=1;"richtige Antwort";0)
  • In Zelle B1 eine 1 oder etwas anderes schreiben.
  • Das Tabellenereignis bleibt unverändert.
  • Beachte auch die Kommantare im Code
Der Code dazu:

Code: Alles auswählen

REM  *****  BASIC  *****

Dim event
Dim oSheet as Object
Dim oRange as Object
Dim oForm as Object
Sub Check_A1(event)
'Sub Check_A1()
    oSheet = thiscomponent.sheets.getbyname("Tabelle1")
		' Die Zelle in der die Wenn-Funktion steht
	    oRange1 = oSheet.getcellrangebyname("A1")
	    	' Die Zelle auf welche reagiert werden soll
		    oRange2 = oSheet.getcellrangebyname("B1")
	
		oForm=thisComponent.DrawPages.getByIndex(0)
			oForm=oForm.getForms.getByIndex(0).getByIndex(0)

    if oRange2.queryIntersection(event.RangeAddress).count = 1 then

   			If oForm.Name="Schaltfläche 1" AND oRange1.Text.String = "richtige Antwort" then
   				oForm.EnableVisible ="False"
   			ElseIf oForm.Name="Schaltfläche 1" AND oRange1.Text.String <> "richtige Antwort" then
   				oForm.EnableVisible ="True" 
			End If
   end if

End Sub
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
AlinaGeier
**
Beiträge: 21
Registriert: Mo, 01.02.2021 14:10

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von AlinaGeier »

Ich habe in A1 die Wenn-Formel geschrieben, eine Schaltfläche eingefügt, dein Makro mit Copy&Paste zu meinen Makros hinzugefügt, davor habe ich das alte Makro mit dem Namen Check_A1 gelöscht, und dann habe ich wie in der Anleitung oben das neue Makro als Ereingnis angebracht. Ich habe auch überprüft, ob Schaltfläche und Tabellenblatt wirklich "Schaltfläche 1" und "Tabelle1" heißen, aber wenn ich den Wert in B1 nun so ändere, dass in A1 "richtige Antwort" erscheint, verschwindet die Schaltfläche trotzdem nicht. Hast du eine Idee, woran das liegen könnte?

LG, Alina
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von craig22 »

Hallo Alina,

hast Du den Entwurfsmoddus für Steuerelemente ausgeschaltet:
Menü Ansicht → symbolleisten → Formularentwurf
Dann über das Symbol "Entwurfsmodus" umschalten.
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
AlinaGeier
**
Beiträge: 21
Registriert: Mo, 01.02.2021 14:10

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von AlinaGeier »

Ups, daran hats gelegen, vielen Dank! Jetzt habe ich aber noch ein Problem. Ich brauche das alles für ein Schulprojekt, "Wer wird Millionär". Deshalb hägt die Zelle B1, von der die Zelle A1 abhängt, auch wieder von einer Zelle ab und so weiter und die Formeln darin sind alle ziemlich lang und kompliziert. Ich dachte, dass es egal ist, ob in der Zelle B1 der Wert 1 per Hand oder Wenn-Formel eingetragen ist, ist es aber nicht. Gibt es irgendeine Möglichkeit, dass es egal für das Makro ist, ob der Wert in Zelle B1 manuell oder durch eine Formel 1 ist, oder ist das nicht möglich?
Die Zelle D10 (bisher als A1 bekannt) hat folgende Formel:

=WENN(ODER(UND(C10="A";A6="X";B6="";A7="";B7="");UND(C10="B";A6="";B6="X";A7="";B7="");UND(C10="C";A6="";B6="";A7="X";B7="");UND(C10="D";A6="";B6="";A7="";B7="X"));"RICHTIGE ANTWORT";WENN(UND(A6="";B6="";A7="";B7="");" ";WENN(ODER(UND(A6="X";B6="X");UND(A6="X";A7="X");UND(A6="X";B7="X");UND(B6="X";A7="X");UND(B6="X";B7="X");UND(A7="X";B7="X");UND(A6="X";B6="X";A7="X");UND(A6="X";B6="X";B7="X");UND(A6="X";A7="X";B7="X");UND(B6="X";A7="X";B7="X");UND(A6="X";B6="X";A7="X";B7="X"));"ES KÖNNEN NICHT MEHRERE ANTWORTEN ANGEKREUZT WERDEN";"FALSCHE ANTWORT")))

Sie gibt an, abhängig ob in eine der vier Auswahlzellen (A6, A7, A8, A9) ein "X" ist oder 2 oder 3 oder 4, ob die Antwort richtig oder falsch ist, oder ob mehrere Antworten angekreuzt wurden. Ob die Antwort richtig ist, ist abhängig von dem richtigen Antwortbuchstaben für jede Frage (D9) und der angekreuzten Zelle. Die Formel für D9 lautet:

=WENN(ODER(A6="X";B6="X";A7="X";B7="X");WENN(A1=1;"A";WENN(A1=2;"B";WENN(A1=3;"C";WENN(A1=4;"D";WENN(A1=5;"A";WENN(A1=6;"B";WENN(A1=7;"C";WENN(A1=8;"D";WENN(A1=9;"A";WENN(A1=10;"B";WENN(A1=11;"C";WENN(A1=12;"D";WENN(A1=13;"A";WENN(A1=14;"B";WENN(A1=15;"C";" ")))))))))))))));" ")

Diese ist wiederum abhängig von der Fragenummer (A1), die durch die Schaltfläche "Weiter" bei Betätigen automatisch um 1 erhöht wird. Und eben diese Schaltfläche möchte ich nur dann sichtbar machen, wenn die richtige Antwort angekreuzt wurde.

Ich bin mir sicher, dass das extrem kompliziert ist oder gar nicht möglich mit so vielen Formeln, die alle wieder von einander abhängig sind. Dashalb die Frage, ob man einstellen kann, dass das Makro Check_A1 (oder dann eben Check_D10) unabhängig von den ganzen Formeln ist und den Text in der Zelle D10 auch dann nimmt, wenn er nicht manuell eingetragen wurde.

Ich bin so dankbar für deine Antworten und hoffe, ich nerve dich nicht damit, du und dein Wissen sind echt ein Segen!

Ganz liebe Grüße, Alina
AlinaGeier
**
Beiträge: 21
Registriert: Mo, 01.02.2021 14:10

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von AlinaGeier »

Oder @craig22 gibt es vielleicht irgendeine Seite, auf der Programmierer so was freiwillig programmieren?
LG, Alina
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von Stephan »

Gibt es irgendeine Möglichkeit, dass es egal für das Makro ist, ob der Wert in Zelle B1 manuell oder durch eine Formel 1 ist, oder ist das nicht möglich?

Unter Aufgabe der Auswertung des event-Objekts könntest Du das Makro ändern zu:

Code: Alles auswählen

Dim oSheet as Object
Dim oRange as Object
Dim oForm as Object
Sub Check_A1()
    oSheet = thiscomponent.sheets.getbyname("Tabelle1")
	    oRange = oSheet.getcellrangebyname("A1")
		oForm=thisComponent.DrawPages.getByIndex(0)
			oForm=oForm.getForms.getByIndex(0).getByIndex(0)
   			If oForm.Name="Schaltfläche 1" AND oRange.Value = 1 then
   				oForm.EnableVisible ="False"
   			ElseIf oForm.Name="Schaltfläche 1" AND oRange.Value > 1 then
   				oForm.EnableVisible ="True"   				
			End If
End Sub
und dann dem Tabellenereignis "Auswahl geändert" zuweisen.

Da die Änderung in B1 (egal ob per Formel oder direkter Eingabe) kaum(*) möglich ist ohne die Auswahl zu ändern sollte das funktionieren.

(*)

z.B. eine Änderung in deer Eingabezeile würde nicht direkt erkannt, sondern nur wenn man danach wiedeer in eine Zelle wechselt.



Gruß
Stephan
AlinaGeier
**
Beiträge: 21
Registriert: Mo, 01.02.2021 14:10

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von AlinaGeier »

Okay, vielen Dank! Allerdings ist mir nicht ganz klar, wie und wo ich das jetzt eingeben soll.
Könntest du mir kurz erklären, was mit "Unter Aufgabe der Auswertung des event-Objekts könntest Du das Makro ändern" gemeint ist?
Soll ich unter Extras--> Makros--> Makros verwalten--> Basic das Makro Check_A1 verändern? Oder wie kann man ein Makro unter Aufgabe des Event-Objekts ändern? Sorry, dass ich das fragen muss haha
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von Stephan »

Könntest du mir kurz erklären, was mit "Unter Aufgabe der Auswertung des event-Objekts könntest Du das Makro ändern" gemeint ist?
Das ich bei dem Makro die Übergabe des event.Objektes entfernt habe, also statt:

Code: Alles auswählen

Sub Check_A1(event)
das hier nutze:

Code: Alles auswählen

Sub Check_A1()
Und das ich die Auswertung des Event-Objektes:

Code: Alles auswählen

if oRange.queryIntersection(event.RangeAddress).count = 1 then

...

end if
ebenfalls entfernt habe.

Soll ich unter Extras--> Makros--> Makros verwalten--> Basic das Makro Check_A1 verändern?
ja, und zwar so das es dem Makro entspricht, das ich gepostet habe.


Gruß
Stephan
AlinaGeier
**
Beiträge: 21
Registriert: Mo, 01.02.2021 14:10

Re: Schaltfläche bedingt sichtbar und nutzbar

Beitrag von AlinaGeier »

Vielen, vielen Dank! Jetzt funktioniert alles so, wie ich es mir vorgestellt habe^^
Antworten