Seite 1 von 2

Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Di, 02.02.2021 21:19
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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Di, 02.02.2021 22:24
von craig22
Hallo Alina,

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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Mi, 03.02.2021 13:42
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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Mi, 03.02.2021 14:11
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) 3648 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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Mi, 03.02.2021 17:34
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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Mi, 03.02.2021 18:29
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?

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Mi, 03.02.2021 19:03
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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Mi, 03.02.2021 22:09
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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Mi, 03.02.2021 22:18
von craig22
Hallo Alina,

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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Mi, 03.02.2021 23:25
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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Do, 04.02.2021 08:33
von AlinaGeier
Oder @craig22 gibt es vielleicht irgendeine Seite, auf der Programmierer so was freiwillig programmieren?
LG, Alina

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Do, 04.02.2021 08:46
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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Do, 04.02.2021 09:49
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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Do, 04.02.2021 09:56
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

Re: Schaltfläche bedingt sichtbar und nutzbar

Verfasst: Do, 04.02.2021 20:24
von AlinaGeier
Vielen, vielen Dank! Jetzt funktioniert alles so, wie ich es mir vorgestellt habe^^