Listbox fuellen

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

Moderator: Moderatoren

kalle2005
**
Beiträge: 26
Registriert: Do, 29.11.2018 18:52

Listbox fuellen

Beitrag von kalle2005 »

Hallo Leute,
ich bin immer noch Lehrling und brauche mal Eure Hilfe. Ich habe zwei Tabellen. In der einen erfasse ich Fahrzeuge (BestandsListe), in der anderen Kosten für diese Fahrzeug.
In der BestandsListe versuche ich vergeblich im Dialog das Alter nach der Eingabe des Baujahres sichtbar zu machen. In der Personenliste hatte Stephan dies toll hinbekommen.
Nun wollte ich dies in der Bestandsliste genauso machen und scheitere kläglich.

In der Tabelle „Kosten“ kann ich zwar die Kennzeichen aus der BestandsListe heraussuchen lassen, doch ein Speichern ist nicht möglich. Selbst wenn ich alles herausnehme und nur die laufende Nummer speichern will, tut sich gar nichts. Irgend etwas mache ich falsch.
Mit Daten“Gültigkeit“ bzw. „SVERWEIS“ kann ich ja hier im Dialog nicht arbeiten.
Ob das Datum, so wie ich es haben möchte, richtig formatiert ist, weiß ich auch nicht. Auf der Suche bei Euch im Forum habe ich viele Möglichkeiten gefunden. Doch welche ist die richtige ?

Dann möchte ich auch noch sämtliche Einträge für ein Fz. aus der Tabelle Kosten als GesamtSumme in die BestandsListe eintragen lassen. Wie ich dies schaffen soll, bleibt für mich erst einmal ein Rätsel.
Übrigens: Ich wollte mich noch gar nicht mit „if“ und „then“ beschäftigen. Doch in der BestandsListe musste ich dennoch ran und habe es nach Stunden oder waren es Tage? geschafft.
Es wäre schön, auch wenn es sehr viel ist, wenn ihr mir helfen könnt. Vielleicht sogar mit einigen Erläuterungen im Modul, das wäre toll.
Bevor ich Mecker bekomme hier meine abgespeckte Version.
Gruß
Kalle
Dateianhänge
Test KostenPkw.ods
(24.09 KiB) 124-mal heruntergeladen
Win 10 Pro, AOO 4.1.9
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Listbox fuellen

Beitrag von Stephan »

In der BestandsListe versuche ich vergeblich im Dialog das Alter nach der Eingabe des Baujahres sichtbar zu machen. In der Personenliste hatte Stephan dies toll hinbekommen.
Nun wollte ich dies in der Bestandsliste genauso machen und scheitere kläglich.
statt:

Code: Alles auswählen

Dlg_Pkw.getControl("txt_alter").Text = Year(NOW())-Year(Dlg_Pkw.getControl("Baujahr").Text)
muss es heißén:

Code: Alles auswählen

Dlg_Pkw.getControl("txt_alter").Text = Year(NOW())-VAL(Dlg_Pkw.getControl("Baujahr").Text)
weil Du nicht einen Text von einer Zahl subtrahieren kannst bzw. Du auch YEAR nur von einem Datum (und nicht einer Zahl) ermitteln kannst

und das Makro Datum_pruefen() muss dem Ereignis "Bei Fokusverlust" des Feldes "Baujahr" zugeordnet werden.

In der Tabelle „Kosten“ kann ich zwar die Kennzeichen aus der BestandsListe heraussuchen lassen, doch ein Speichern ist nicht möglich. Selbst wenn ich alles herausnehme und nur die laufende Nummer speichern will, tut sich gar nichts. Irgend etwas mache ich falsch.
ES gibt nicht eine Zeile Code dazu, woher soll man erkennen was Du falsch machst?
Dann möchte ich auch noch sämtliche Einträge für ein Fz. aus der Tabelle Kosten als GesamtSumme in die BestandsListe eintragen lassen. Wie ich dies schaffen soll, bleibt für mich erst einmal ein Rätsel.
z.B. in Zelle Bestandsliste.E4 die Formel:

=SUMMEWENN(Kosten.B4:B100;B4;Kosten.H4:H100)



Gruß
Stephan
kalle2005
**
Beiträge: 26
Registriert: Do, 29.11.2018 18:52

Re: Listbox fuellen

Beitrag von kalle2005 »

Hallo Stephan,
vielen Dank für die schnelle Antwort. Nun zerbreche ich mir den Kopf. In der Personenliste erschien ohne weiteres das Alter bereits nach Eingabe des Geb-Datums. Jetzt soll:
das Makro Datum_pruefen() muss dem Ereignis "Bei Fokusverlust" des Feldes "Baujahr" zugeordnet werden.
"Bei Fokusverlust" eine weitere Schaltfläche installiert werden ? Funktioniert nicht.
In der Tabelle „Kosten“ kann ich zwar die Kennzeichen aus der BestandsListe heraussuchen lassen, doch ein Speichern ist nicht möglich. Selbst wenn ich alles herausnehme und nur die laufende Nummer speichern will, tut sich gar nichts. Irgend etwas mache ich falsch.
ES gibt nicht eine Zeile Code dazu, woher soll man erkennen was Du falsch machst?
In "Sub Kosten_eingeben" stehen doch die Zeilen drin oder ist dies Unsinn ?
=SUMMEWENN(Kosten.B4:B100;B4;Kosten.H4:H100)
D.h. diese Formel muss in die Spalte "E" der BestandsListe übertragen werden. Dies bekomme ich sicherlich hin.
Dialoge sind für mich als Neuling ein Buch mit Siegeln ( 7 ist zu wenig) und es dauert ewig, bis ich etwas hinbekomme. :mrgreen:
Gruß
Kalle
Win 10 Pro, AOO 4.1.9
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Listbox fuellen

Beitrag von Stephan »

"Bei Fokusverlust" eine weitere Schaltfläche installiert werden ? Funktioniert nicht.
Du sollst beim Textfeld "Baujahr" dem Ereignis "Fokusverlust" das Makro zuordnen
Ereignis_bei_Fokusverlust.gif
Ereignis_bei_Fokusverlust.gif (32.36 KiB) 4586 mal betrachtet
In "Sub Kosten_eingeben" stehen doch die Zeilen drin oder ist dies Unsinn ?
Keine Ahnung ob das Unsinn ist, aber der Schaltfläche "Speichern" ist ein ganz anderes Makro zugeordnet das nicht existiert:
Makrozuordnung.gif
Makrozuordnung.gif (12.21 KiB) 4586 mal betrachtet

Vielleicht klärst Du erst einmal welches Makro richtigerweise zugeordnet sein soll und testet dann nochmals


Gruß
Stephan
kalle2005
**
Beiträge: 26
Registriert: Do, 29.11.2018 18:52

Re: Listbox fuellen

Beitrag von kalle2005 »

Hallo Stephan,
manchmal sehe ich den Wald vor lauter Bäumen nicht. Nur gut, dass es Leute wie Dich gibt.
Ich bin davon ausgegangen, dass ich das Modul von der PersonenListe 1 zu ~1 umsetzen kann. Doch offensichtlich ist dies ja nicht der Fall, warum auch immer.
Durch das Lesen in diesem Forum bis ins Jahr 2004 zurück habe ich viele Informationen gesammelt, aber wie ich sehe, reicht es nicht aus.

Nun funktioniert alles, bis auf die Tatsache, dass die Kennzeichen aus der ListBox nicht in die Tabelle Kosten übertragen werden. Es erscheint die Fehlermeldung: Eigenschaft oder Methode nicht gefunden: Text.
Nun sollte ich wieder lesen, es sei denn, Du hilfst mir auf die Sprünge ?

Desweiteren habe ich noch eine Frage: Ist es nicht möglich durch Aufrufen eines Dialogs Formeln in die jeweilige Spalte zu kopieren anstatt es händisch zu machen ? Wie z.B. =Summewenn, Summe etc.
Gruß
Kalle
Win 10 Pro, AOO 4.1.9
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Listbox fuellen

Beitrag von Stephan »

bis auf die Tatsache, dass die Kennzeichen aus der ListBox nicht in die Tabelle Kosten übertragen werden. Es erscheint die Fehlermeldung: Eigenschaft oder Methode nicht gefunden: Text.
mutmaßlich musst Du ändern:

Code: Alles auswählen

oSheet.getCellRangeByName("B" & End_Row).String = Dlg_Kosten.getControl("ListBox_Kennzeichen").Text
in:

Code: Alles auswählen

oSheet.getCellRangeByName("B" & End_Row).String = Dlg_Kosten.getControl("ListBox_Kennzeichen").SelectedItem

Desweiteren habe ich noch eine Frage: Ist es nicht möglich durch Aufrufen eines Dialogs Formeln in die jeweilige Spalte zu kopieren anstatt es händisch zu machen ? Wie z.B. =Summewenn, Summe etc.
Naja, nicht "durch" Aufrufen eines Dialogs, aber innerhalb des Makros das den Dialog aufruft. ES gibt doch ohnehin in dem anderen Makro schon ein Beispiel für Formeln, nämlich:

Code: Alles auswählen

oSheet.getCellRangeByName("A2").Formula = "=Max(A4:A50)"

Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Listbox fuellen

Beitrag von Stephan »

Doch auf die Idee, einfach nur SelectedItem dahinter zu setzen, wäre ich wohl nie gekommen.
Du hattest im Konkreten eine klare Fehlermeldung die hieß "Eigenschaft oder Methode nicht gefunden: Text". Schaue in die Codezeile:

Code: Alles auswählen

oSheet.getCellRangeByName("B" & End_Row).String = Dlg_Kosten.getControl("ListBox_Kennzeichen").Text
und Du siehst das Text (also: .Text) zum Objekt "Dlg_Kosten.getControl("ListBox_Kennzeichen")" gehört. Deshalb kommentiere die gesamte Code-Zeile temporär aus und schreibe eine Debuganweisung darunter:

Code: Alles auswählen

'oSheet.getCellRangeByName("B" & End_Row).String = Dlg_Kosten.getControl("ListBox_Kennzeichen").Text
Msgbox Dlg_Kosten.getControl("ListBox_Kennzeichen").dbg_properties
wenn Du nun das Makro laufen lässt werden Dir alle Eigenschaften des Objekts angezeigt:

dbg_properties_für_Listbox.gif
dbg_properties_für_Listbox.gif (17.29 KiB) 4515 mal betrachtet

und Du siehst schon einmal das es dort keine Text-Eigenschaft gibt, weshalb diese falsch sein muss. Welche hingegen die richtige Eigenschaft ist kannst Du nur herausbekommen indem Du alle Eigenschaften die aufgelistet sind durchgehst bis Du die Passende findest. Das wird am Anfang lange dauern, die Übung (bzw. das Erfahrungswissen) kommt erst mit der Zeit.

Da in der Fehlermeldung steht "Eigenschaft ODER Methode" musst Du, wenn Du nicht weist das "Text" eine Eigenschaft und keine Methode ist, das Ganze nochmals durchführen mit:

Code: Alles auswählen

'oSheet.getCellRangeByName("B" & End_Row).String = Dlg_Kosten.getControl("ListBox_Kennzeichen").Text
Msgbox Dlg_Kosten.getControl("ListBox_Kennzeichen").dbg_methods
und alle Methoden durchgehen.
Vielleicht ein kleiner Tipp
mutmaßlich sollte gehen:

Code: Alles auswählen

osheet.getCellRangeByName("H" & End_Row).Formula = "=SUM(E" & End_Row & ":F" & End_Row & ")"
evtl. muss der Index um 1 höher sein (weil z.B. A1 ja den Zeilenindex 0 hat):

Code: Alles auswählen

osheet.getCellRangeByName("H" & End_Row+1).Formula = "=SUM(E" & End_Row+1 & ":F" & End_Row+1 & ")"

Gruß
Stephan
kalle2005
**
Beiträge: 26
Registriert: Do, 29.11.2018 18:52

Re: Listbox fuellen

Beitrag von kalle2005 »

Hallo Stephan,
osheet.getCellRangeByName("H" & End_Row).Formula = "=SUM(E" & End_Row & ":F" & End_Row & ")"
Auch die englische Bezeichnung "SUM" habe ich natürlich auch probiert. Der einzige Haken war, dass ich nicht wußte, dass vor dem Doppelpunkt noch ein Gäsefüßchen gesetzt werden muss.
Jetzt funktioniert alles wunderbar. Dann werde ich später diese Anregung auch dazu benutzen, in der Tabelle BestandsListe die Formel SummeWenn eingeben zu lassen.
Msgbox Dlg_Kosten.getControl("ListBox_Kennzeichen").dbg_methods
ist der Hammer. Es produziert sogar einen Überlauf :lol:
Diese beiden Msgbox 'en werde ich mir gut aufheben müssen, denn ich habe noch mehr vor.
Vielen Dank erst einmal und guten Rutsch ins neue Jahr.
Kalle
Win 10 Pro, AOO 4.1.9
Antworten