Optionsfelder im Dialog

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: Optionsfelder im Dialog

Re: Optionsfelder im Dialog

von balu » Sa, 22.03.2014 13:07

Mahlzeit.

Als ich mir das Makro von 'Marce Cz' (Marcel) so anschaute, kam mir das doch irgendwie etwas bekannt vor. Und richtig! Ich hatte ihm im Januar in diesem Thread: Basic Synthaxfehler Else/Endif ohne if eine Datei samt Makro gegeben.

Warum ich das jetzt extra erwähne? Nur damit ihr wisst wer den "Grundstein" für das Makro verbrochen hat :lol:.

Nun möchte ich aber doch etwas zum aktuellem Makro sagen.


Erstmal etwas generelles zu Marcel.
Nur damit Du mich nicht falsch verstehst. Es geht mir nur darum das Du etwas dazu lernst.

Wenn eine Datei mit Makro geladen, und anschließend das Makro gestartet wird, so wird das gesammte Makro von oben bis unten (von Anfang bis Ende) ersteinmal durchlaufen. Und wenn keine schweren Fehler auftreten, die dann auch angezeigt werden würden wie z.B. ein x-Beliebiges Wort oder Zeichen welches sich nicht in einer Sub befindet, erst dann wird das Makro komplett ausgeführt.

Bei diesem Prozess werden aber auch schon z.B. Variablennamen und Objekte in den Speicher mit aufgenommen. Das ist auch gut so. Nur muss man aufpassen das dies auch alles schön der reihe nach geht. Soll heißen, erst die die Variablendeklaration und dann die Variablendefenition, und dann kann man die Variablen weiter verarbeiten.

Die deklaration findet entweder ganz am Anfang außerhalb einer Sub statt, dann sind die Variablen Öffentlich. Oder sie werden in einer Sub deklariert, dann sind sie Lokal. Und die defenition findet immer in einer Sub statt. Und bei Makros mit Dialogen ist es doch sehr empfehlenswert das gleich nach der deklaration eine so genannte "Haupt-Sub" kommt in der die ganzen Variablen defeniert werden. Erst danach, nach der "Haupt-Sub", können und dürfen weitere Subs erstellt werden, die die defenierten Variablen verarbeiten.

Ich weise deshalb darauf hin, weil Du nicht diese Regel kennst, und schon dagegen verstoßen hast. Deine "Haupt-Sub" heißt bei dir: Sub EingabeDialog
Hier ist zu sehen was Du falsch gemacht hast.

Code: Alles auswählen

sub Weiter
[...]
end sub

Sub DatenEingeben
[...]
end sub

Sub EingabeDialog
	
	iMonatsNamen = Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")	
	
	DialogLibraries.loadLibrary("Standard")
	oDialogZeitenErfassen = CreateUnoDialog(DialogLibraries.Standard.DlgZeitenErfassen)
	oMonatAuswaehlen = CreateUnoDialog(DialogLibraries.Standard.Monat)	
	oArbeit = oDialogZeitenErfassen.getControl("FrameControl1")
	oArt = oDialogZeitenErfassen.getControl("FrameControl2")
	oLohn = oDialogZeitenErfassen.getControl("FrameControl3")
	oMonatsTitel = oDialogZeitenErfassen.getControl("Label2")
[...]
end sub
Besser, und richtig wäre aber diese Reihenfolge.

Code: Alles auswählen

Sub EingabeDialog
	
	iMonatsNamen = Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")	
	
	DialogLibraries.loadLibrary("Standard")
	oDialogZeitenErfassen = CreateUnoDialog(DialogLibraries.Standard.DlgZeitenErfassen)
	oMonatAuswaehlen = CreateUnoDialog(DialogLibraries.Standard.Monat)	
	oArbeit = oDialogZeitenErfassen.getControl("FrameControl1")
	oArt = oDialogZeitenErfassen.getControl("FrameControl2")
	oLohn = oDialogZeitenErfassen.getControl("FrameControl3")
	oMonatsTitel = oDialogZeitenErfassen.getControl("Label2")
[...]
end sub

sub Weiter
[...]
end sub

Sub DatenEingeben
[...]
end sub
Und ja ich weiß das das Makro trotzdem funktioniert. Aber besser ist es wenn man sich an bestimmte Regeln hält, denn sonst sucht man sich hinterher im Fehlerfalle einen Wolf.


warum speichert er meine Daten aus der FrameBox1 nicht in die entsprechende Zeile?
Schau dir doch mal bitte schön jeden einzelnen OptionButton bei "Zusatzinformationen" genau an.



Gruß
balu

Re: Optionsfelder im Dialog

von Marce Cz » Sa, 22.03.2014 12:54

so, warum speichert er meine Daten aus der FrameBox1 nicht in die entsprechende Zeile?
Framebox2 klappt genauso wie alles andere.
Dateianhänge
neueIdee.ods
(16.07 KiB) 76-mal heruntergeladen

Re: Optionsfelder im Dialog

von Marce Cz » Sa, 22.03.2014 09:54

Danke f3k,

genau das hab ich gesucht.
Da war ich ja voll verkehrt. ich muss mal schauen das ich eine gute lektüre finde die
a leicht verständlich ist
b anwendbare beispiele enthält

Re: Optionsfelder im Dialog

von F3K Total » Sa, 22.03.2014 09:43

Jo, genau,
ich wüsste nicht, dass man durch Zugriff auf den "Rahmen" der Optionsgruppe an deren Werte kommt.
Hier dein geändertes Makro Eintragen
Damit es funtioniert, habe ich jeweils den Spaltennamen der Zielspalte (B,C,D) in die Zusatzinformation (.tag) der Optionsfelder eingetragen

Code: Alles auswählen

Sub Eintragen
	oMonatsBlatt = ThisComponent.sheets.getByName(iMonatsNamen(oMonat.SelectedItempos))
	With oMonatsBlatt ' Letzte Zeile der Spalte A ermitteln 
		x = .Columns(0).queryEmptyCells()
		iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1'- 1
	End With		
	oMonatsBlatt.getCellRangeByName("A" & iLetzteZeile).FormulaLocal = "x" 'Damit die letzte Zeile gefunden wird
    for i = 0 to ubound (oDialogZeitenErfassen.Controls) 'Durchlaufe alle Kontrollelemente des Dialogs
        ocontrol = oDialogZeitenErfassen.controls(i)
        if ocontrol.supportsservice("com.sun.star.awt.UnoControlRadioButton") then 'Wenn es sich um einen Optionsbutton handelt
            if ocontrol.state then '... und er markiert ist
                select case oControl.model.tag 'lese die Zusatzinformation des Optionsbutton aus
                    case "B"
                    scell = "B"
                    case "C"
                    scell = "C"
                    case "D"
                    scell = "D"
                end select		          
                oMonatsBlatt.getCellRangeByName(scell & iLetzteZeile).FormulaLocal = oControl.model.label
            endif
        endif
    next i
End Sub
Viel Erfolg
Gruß R
Dateianhänge
neueIdee.ods
(14.42 KiB) 65-mal heruntergeladen

Re: Optionsfelder im Dialog

von Marce Cz » Sa, 22.03.2014 09:24

Hallo Stephan,

also ich hab jetzt meinen Dialog dementsprechend angepasst und eine Vortlaufende Aktivierungsreinfolge reingebaut.
Jetzt bekomme ich dennoch wieder die Fehlermeldung:

Eigenschaft oder MEthode nicht gefunden: TEXT.

Code: Alles auswählen

	oMonatsBlatt.getCellRangeByName("B" & iLetzteZeile).FormulaLocal =  oArbeit.Text 
Dateianhänge
neueIdee.ods
(13.77 KiB) 63-mal heruntergeladen

Re: Optionsfelder im Dialog

von Stephan » Sa, 22.03.2014 08:42

in Dialogen (in Formularen ist das anders) wird die Zusammengehörigkeit von Optionsfeldern zu einer Gruppe durch deren Tab-Index ("Aktivierungsreihenfolge" im Eigenschaftendialog des Optionsfeldes) bestimmt, alle Optionsfelder einer Gruppe müssen fortlaufende Indexes haben. siehe Datei.


Gruß
Stephan
Dateianhänge
neueIdee-a.ods
(15.96 KiB) 76-mal heruntergeladen

Optionsfelder im Dialog

von Marce Cz » Sa, 22.03.2014 08:08

Hallo liebe Oo Gemeinde,

ich hatte eine neue Idee wie ich mittels eines Dialoges und Optionsfelder und Optionsgruppen meine Daten in der Entsprechenden Tabelle eintragen kann.
Ich habe mir ein Dialog erstellt wo ich die Tabelle Auswähle. Dies funktioniert.
Dann komm ich in ein Dialog wo ich 3 Gruppenfelder mit mehreren auswahloptionsbutton habe.
Jeweils kann ich nur eine Option wählen und diese soll er mir dann in der entsprechenden Tabelle speichern.

Leider hab ich entweder ein Denkfehler, oder ich habe mir die sache zu einfach gemacht.
Leider bin ich im Programieren noch ein blutiger Anfänger und finde leider keine entsprechende Lösung.
ich hoffe ihr könnt mir da helfen.
Dateianhänge
neueIdee.ods
(13.78 KiB) 72-mal heruntergeladen

Nach oben