Seite 1 von 1

[Gelöst] Problem mit CheckBox

Verfasst: Do, 22.12.2011 12:00
von CamuelSpenser
Ahoi, hab hier ein kleines Problem das sich in mein Makro eingeschlichen hatt..

Hier erstmal der Code :

Code: Alles auswählen

REM  *****  BASIC  *****
REM Sichtkanten Makro
Option Explicit
Sub Sichtkanten(oEvent)
dim oAuslesen, oDocument, oSheet(5) as Object
dim oDraw(5), oForm(5), oControler  as Object
dim oCheckBox                       as Object  
dim iSicht, Z, I                    as Integer
dim oCBLib, oLib, oRan, sTesT       as String 
	oAuslesen     = oEvent.Source.Model.Name
	oDocument     = StarDesktop.CurrentComponent
	oSheet(0)     = oDocument.Sheets.GetByName("Plattenerfassung")
	oSheet(1)     = oDocument.Sheets.GetByName("Granit Modul")
	oSheet(2)     = oDocument.Sheets.GetByName("Durabo Modul")
	oSheet(3)     = oDocument.Sheets.GetByName("GlassStone Modul")
	oSheet(4)     = oDocument.Sheets.GetByName("HILFSTABELLE2")
	oSheet(5)     = oDocument.Sheets.GetByName("Bestellformular")
	oDraw(0)      = oSheet(0).DrawPage
	oDraw(5)      = oSheet(5).DrawPage
	oForm(0)      = oDraw(0).Forms.GetByIndex(0)
	oForm(5)      = oDraw(5).Forms.GetByIndex(0) 
	oControler    = oDocument.GetCurrentController
	Select Case Val(Right(oForm(0).getByName(oAuslesen).Name,1))
		Case 1	:	Z = 11 : oRan = "$B$2"  : oLib = "$F$2"
		Case 2	:	Z = 12 : oRan = "$H$2"  : oLib = "$L$2"
		Case 3	:	Z = 13 : oRan = "$B$7"  : oLib = "$F$7"
		Case 4	:	Z = 14 : oRan = "$H$7"  : oLib = "$L$7"
		Case 5	:	Z = 22 : oRan = "$B$13" : oLib = "$F$13"
	End Select
	sTest     = "Check Box " & Z
	oCheckBox = oControler.GetControl(oForm(5).GetByName(sTest))
	iSicht    = Val(oSheet(4).GetCellRangeByName(oRan).String)
	oCBLib    =     oSheet(4).GetCellRangeByName(oLib).String
	If iSicht > 1 Then
		If not(oSheet(1).GetRows().GetByIndex(Z).isVisible) Then
			For I = 1 To 3
				oSheet(I).GetRows().GetByIndex(Z).isVisible = True
			Next I
			oCheckBox.State = 0
		End If
	Else
		If oSheet(1).GetRows().GetByIndex(Z).isVisible Then
			For I = 1 To 3
				oSheet(I).GetRows().GetByIndex(Z).isVisible = False
			Next I
			oCheckBox.State = 1
		End If
	End If
End Sub
Beim Ausführen des Codes bekomme ich folgende Fehlermeldung :

BASIC-Laufzeitfehler.
Es ist eine Exception aufgetreten
Type : com.sun.star.container.NoSuchElementException
Message : .

In folgender Zeile :

Code: Alles auswählen

oCheckBox = oControler.GetControl(oForm(5).GetByName(sTest))
Nur versteh ich nicht warum ich nun die Fehlermeldung bekommen, weil in nem anderen Makro benutz ich genau die gleiche Funktion um danach die oCheckBox.State zu überprüfen.

Nun hier will ich schlussendlich wenn ich diese Fehlermeldung überwinden kann...
die CheckBox Sichtbar/Unsichtbar machen
den Text der CheckBox ändern und
die CheckBox Checken/Unchecken

*****
Nebenbei werden auch Zeilen in 3 anderen Blättern Versteckt/resp. angezeigt dies funktionniert tadellos und wurde auch gestestet bevor ich die CheckBox eingebaut habe. :)

Ps Datei im Anhang :)

Re: Problem mit CheckBox

Verfasst: Do, 22.12.2011 13:10
von balu
Hallo CamuelSpenser,

nachdem ich den Namen von 5 CheckBoxs überprüft hatte, hatte ich keine Lust mehr weiter nach deinem Problem zu suchen. Denn ich muss dich ernsthaft fragen:
"Willst Du dich selber verarschen?" :lol:

Wie soll das Makro z.B. die Check Box 11 finden, wenn Du 20 mal Check Box 1 hast?
Und auf die nächste Frage werde ich dir selber antworten.
Wo um Himmelswillen ist denn die Check Box 11?
Antwort.
Die gibt es nirgendwo! Die existiert nicht!
Damit nicht genug. Ich brauchte nur 20 sekunden um festzustellen das Du in der Datei insgesammt 21 CheckBoxs mit der Nummer 1 hast. Also 20 mal in ein und demselben Blatt, und 1 mal auf einem anderen Blatt.

Also wenn Du 21 mal Check Box 1 hast, dann wird es auch keine Check Box 12, Check Box 13 ... geben.

Nur, ob das dein Problem lösen wird, weiß ich noch nicht. Bring das mit den CheckBoxs und deren Nummer erstmal in Ordnung, dann sehen wir (Du) weiter.
Viel Spaß dabei :wink:.



Gruß
balu

Re: Problem mit CheckBox

Verfasst: Do, 22.12.2011 13:32
von CamuelSpenser
hoppla mein Fehler hatte vergessen in der Beispiel-Datei die CheckBox Namen zu ändern ^^

Hab dies nun korrigiert und im Anhang ist nun die Richtige Datei mit den umbenannten Checkboxen :)

Nun das Problem hatt sich hierdurch allerdings nicht erledigt, bekomme weiterhin die gleiche Fehlermeldung.. hat also leider nicht geholfen.

In der Richtigen Datei haben die CB's alle die korrekten Namen.

Hab auch schon bissle rumgetestet aber leider keine Lösung gefunden ^^

Um noch ein paar Erklärungen dazu zu geben also :

- Auslösende Elemente sind die 5 DropDown Listen im Blatt "Plattenerfassung"
- Zeilen werden manipuliert in den 3 Modul Blättern (dies funktionniert)
- CheckBox'en betreffen die 5 ersten auf dem Blatt "Bestellformular" hinter APL-Kantentyp

Bild

Lg Camuel


Edit :

Hab ma was getestet und zwar wenn ich das ganze so eingebe :

Code: Alles auswählen

oTest     = oForm(5).GetByName("Check Box 11")
	oCheckBox = oControler.GetControl(oTest)
müsste er doch eigentlich schon bei dei oTest = .... -Zeile rummeckern,dass es das Objekt nicht gibt oder? ... Die Fehlermeldung bleibt weiterhin der gleichen Zeile bei oCheckBox = ....

Re: Problem mit CheckBox

Verfasst: Do, 22.12.2011 16:04
von balu
Hallo CamuelSpenser,

ich blick momentan auch noch nicht so richtig durch. Aber ich geb dir mal Hausaufgaben auf, damit Du selber durch beobachten und experementieren vielleicht etwas feststellst.

Schneide deine betroffenen CheckBoxen aus, also nicht markieren und kopieren, sondern markieren und ausschneiden, und füge diese dann im Blatt "Plattenerfassung" irgendwo unterhalb der Zeile 25 ein.

Ändere im Makro folgende Zeile

Code: Alles auswählen

	oSheet(5)     = oDocument.Sheets.GetByName("Bestellformular")
auf das hier ab.

Code: Alles auswählen

	oSheet(5)     = oDocument.Sheets.GetByName("Plattenerfassung")
Und nun klicke die List Box 1 (auf der Zelle A25) an, und wähle einen Eintrag aus. BEOBACHTE die eben eingefügten CheckBoxen!

Wie dein Problem abgestellt werden kann, weiß ich nicht, da ich mich mit der Drawpage noch nicht so auskenne.

dass es das Objekt nicht gibt
Ich sage erst mal nur so viel: Das Objekt gibt es!



Gruß
balu

Re: Problem mit CheckBox

Verfasst: Do, 22.12.2011 16:26
von CamuelSpenser
Ahoi balu :)

So hab eben mal nen Test gewagt wie du es beschrieben hast.... und siehe da es funktionniert wie du gesagt hast :)
Und genauso wie du gesagt hast es Existiert....nur nicht da wo es soll >.<

also "muss" das Problem bei der Verlinkung auf das Bestellformular auftreten wenn ich das jetzt richtig verstehe... was genau Draw.Page eigentlich bewirkt weiss ich selbst nicht?..
Hab nur gemerkt dass es an manchen stellen benötigt wird, da ich sonst die weiteren Funktionen nicht weiter nutzen kann...

Jetzt muss ich noch weiter nachforschen wie ich diese Problem nun beheben kann... ^^

********
Kurze Frage Nebenbei... hab in nem weiteren Makro ein kleines Problem und zwar :

Code: Alles auswählen

REM oAuslesen = oEvent.Source.Model.Name 
REM diese Zeile funktionniert in mehreren Makro's nur in diesem nicht, bekomme die fehlermeldung : "Falsche Verwendung eines Objektes"
REM jedoch funktionniert folgende Zeile Problemlos
oAuslesen     = val(right(oEvent.Source.Model.Name,1))
REM oAuslesen war Anfangs als Object definiert aber da ich damit diverse Probleme hatte hab ich es als Integer definiert


Lg Camuel

Re: Problem mit CheckBox

Verfasst: Do, 22.12.2011 17:01
von balu
Hallo CamuelSpenser,
und siehe da es funktionniert wie du gesagt hast
Hab ich nirgendwo erwähnt oder gesagt.
Aber schön und gut das Du wohl meine Beobachtungen bestätigen kannst.


also "muss" das Problem bei der Verlinkung auf das Bestellformular auftreten wenn ich das jetzt richtig verstehe
Nein!
Es geht nicht um die Verlinkung, das ist ja wohl was ganz anderes, sondern um das richtige ansprechen eines entfernten Objekts welches sich nicht auf der gleichen Drawpage befindet von wo es angesprochen wird. So seh ich das zumindest.

was genau Draw.Page eigentlich bewirkt weiss ich selbst nicht?
Dannenhoefer?
Aber davon abgesehen, alle Zeichenelemente, seis ein gezeichnetes Rechteck oder eine Listbox, befinden sich nicht in der Zelle, sondern auf der Zelle (auch wenn man sie in den Hintergrund stellen kann). Und diese besondere Ebene ist die Drawpage. Und um nun ein solches Element, z.B. Rechteck, ansprechen zu können gibt es diesen Befehl (oder wie auch immer).


Kurze Frage Nebenbei
Ich werd nich so recht schlau daraus welche Sub Du in deinem Makro meinst.
Aber ein genereller Tipp: Besorg dir xray! Weiteres dazu steht hier im Forum.



Gruß
balu

Re: Problem mit CheckBox

Verfasst: Do, 22.12.2011 17:11
von CamuelSpenser
lol k man kann auch bissle aneinander vorbeireden (:

Also deinen Ratschlag n bissle beherzigend hab ich nochma was anderes versucht :

Code: Alles auswählen

	sTest     = "Check Box " & Z
	oTest     = oForm(5).GetByName(sTest)
	msgbox(oTest.State)
hier hab ich in der MessageBox den richtigen Wert stehen je nachdem ob die CheckBox gechecked oder unchecked ist. Heisst also, dass es mir sehr wohl gelingt die CheckBox anzusprechen jedoch, ist es mir nicht möglich die Kontrolle über eben diese zu Erlangen, folglich muss ich dir zustimmen dass es nicht an der Verlinkung liegt....

Okay danke für die Erklärung ;D

*grübel*

LG

Re: Problem mit CheckBox

Verfasst: Do, 22.12.2011 20:27
von balu
Na'bend CamuelSpenser,
lol k man kann auch bissle aneinander vorbeireden (:
Wie meinen? Ich nicht verstehn.


Bis das ich deinen Code verstanden habe, ist ne halbe Ewigkeit vergangen. In meinen Augen ist er stellenweise sehr unübersichtlich geschrieben. Aber nun gut, Du musst ja da den Durchblick behalten.

Ich habe aber dennoch das Problem gelöst :mrgreen:, nach dem ich hier im Forum gesucht hatte und einen Thread gefunden hatte der mir den richtigen Denkanstoß gab.

IM Makro folgende Zeile

Code: Alles auswählen

	oCheckBox = oControler.GetControl(oForm(5).GetByName(sTest))
auf das hier ändern.

Code: Alles auswählen

	oCheckBox = oForm(5).GetByName(sTest)
Und nun sei Glücklich und Froh! :D


Gruß
balu

Re: Problem mit CheckBox

Verfasst: Fr, 23.12.2011 10:34
von CamuelSpenser
uiiii vielen Danke balu bist mein Lebensretter :D:D

und besonders dein Tipp mit dem xRay-Tool war genial ^^

hatte nämlich nun auf Dannenhofer noch nachgeschaut wie ich ne CB verstecken kann, jedoch wie dort beschrieben geht es bei mir nicht ^^
hab jedoch bei Dannenhofer die Label funktion der CB gut erklärt vorgefunden
durch das xRay hab ich aber das gefunden was ich brauche dazu :

Code: Alles auswählen

sTest     = "Check Box " & Z
oCheckBox = oForm(1).GetByName(sTest)
oCheckBox.EnableVisible = True
btw ich weiss dass mein Code bissle zu wünschen übrig lässt, ist aber nicht so einfach wenn man unter Zeitdrucksteht ^^
muss Heute fertig werden und hab noch 6 Makro's von VBA zu StarBasic zu übersetzen :)

Ich danke dir aber vielmals für deine Hilfe :)

Lg Camuel