Du hasts gut. Du kannst deinen Akku wieder voll aufladen. Ich jedoch habe zur Zeit das Problem, das mein Akku unter dem Memory-Effekt leidet. Na ja, wird schon wieder.
Danke schön.Ich hatte echt Probleme, mich in die Arrays hineinzudenken.
Dabei hast du es perfekt erklärt
Auch wenn mir das noch nicht so ganz verständlich ist, so ist das gezeigte Array ja nicht weggeschmissen/umsonst, da es ja immer wieder mal irgendwie gebraucht werden kann.… öhhmm… zumal ich zu meiner Schande feststellen musste, dass eine solche Rabatt-Text-Festlegung gar nicht sinnvoll ist… Leider brauchen wir das hier gar nicht, weil es im Grunde nur den Rabatt-Text „Sonstige“ geben wird.
Sag das nicht, das das unmöglich ist. Es ist sehr vieles möglich, man muss es nur mal halt ausprobieren. Aber das können wir uns eventuell später noch mal vornehmen, da dies jetzt noch nicht so richtig hier rein passt.Denn Mitarbeiter und Chefetage, die eine ganze Flasche einer Spirituose entnehmen, ersetzen sie einfach später. Und es wäre auch fast unmöglich für Mitarbeiter, den Flaschenpreis von 50% über den Dialog herauszubekommen.
Das ist natürlich auch ein ArgumentIch habe es jetzt trotzdem drin gelassen, weil´s so schön ist.

Bedenke aber, das dies noch nicht die letzte Art von Array war, kommen noch andere.UND – weil ich denke, das war ein klasse Beispiel, wie Arrays funktionieren.

Doch gibt es, aber damit erzeugt man an einem echten Lichtschalter unter Umständen einen Kurzschluß. *grins*Ich hab ein bisschen darauf herumgedacht, ob es für den Lichtschalter auch noch andere Aggregatzustände geben kann als „an“ und „aus“. Ja, nä?
Schön, schön!Haha! Das gefällt mir!Code: Alles auswählen
aUnterGrenze(4) = 150 : aOberGrenze(4) = 200 : aRabattText(4) = "Freies Gelage" aUnterGrenze(5) = 200 : aOberGrenze(5) = 300 : aRabattText(5) = "Kater Stimmung"
Du musst die 0 in diesem Falle nicht in Klammern setzen, da dies jetzt eine Position ist. Deshalb steht da ja auch SelectItemPos.Deshalb habe ich das hier stattdessen eingefügt, s.o. und hier:Code: Alles auswählen
oListBox_AusserHaus.SelectItemPos((0), True) ' Listbox-Wert Voreinstellung auf "Nein"
Etwas anders siehts ja hierbei aus.
Code: Alles auswählen
oListBox_Preis.SelectItem(aKistenPreise(0), True)
Während der Eingabe hochsrollen geht nicht. Aber wenn eine Eingabe im Dialog fertig getätigt wurde, kann man anschließend den Cursor auf eine bestimmte Position setzen. Jedoch gibts da eine kleine, aber wohl unbedeutende Einschränkung. Der Cursor springt wohl die Zelle an, sie wird aber so gesehen "zentriert". Das heißt, wenn z.B. 25 Zeilen zu sehen sind, dann wird die gewünschte Zelle nicht ganz oben am Anfang stehen, sondern irgendwo in der mitte der sichtbaren Zeilen. Das ist aber immer noch besser, als wenn man zu "Fuß" zu der gewünschten Zelle gehen muss.Jetzt habe ich noch eine andere Frage:
Es wurde der Wunsch geäußert, dass im Tabellenblatt immer automatisch etwas hochgescrollt wird während der Eingabe. Jetzt muss man dafür ja immer erst die Dialog schließen.
Ich hab auch vielleicht die entsprechende Anweisung dazu gefunden, jedoch krieg ich das nicht so hingebastelt, dass es funktioniert.Code: Alles auswählen
oAktuellesBlatt.getCellRangeByName("A" & iEnd_Row).Select
Ich weiß nicht wie Du auf diese Code Anweisung gekommen bist, aber ganz so einfach ist das nun wiederum doch nicht.
Das müsste dann schon wie folgt aussehen.
Code: Alles auswählen
sub SprungZurZelle
oDok = thisComponent
oViewController = oDok.CurrentController
oAktSheet = oDok.sheets().getbyName(oViewController.activesheet.getName)
aAktCursor = oAktSheet.getCellByPosition(0, 10) 'die gewünschte ZellPosition'
oViewController.Select(aAktCursor) 'Der eigentliche Sprung zu der Zelle'
end sub
Beim Dannenhöfer gibts wohl ein anderes kleines Breispiel dazu, welches ich auch genommen und dementsprechend angepasst habe, aber es basiert auf einem fest vorgegebenen Blattindex. Guckst Du hier: 7.1.9 Wie kann man den aktuellen Cursor auf eine Zelle setzen?
Da es hier aber um wechselnde Blätter geht, also dynamisch anstatt statisch wie bei Dannenhöfer, musste ich auch erstmal etwas Knobeln bis das ich es hinbekommen habe. Und aus diesem Grunde sieht der Code jetzt etwas anders aus.
Wie, und was Du jetzt an diesem Code änder musst damit das auch mit der festgestellten "Letzten Zeile" funktioniert, das müsstest Du ja wohl alleine hinbekommen.

Nein wie wunderschön, das Du selber auf die Idee gekommen bist. Doch, das erfreut mich wirklich sehr. *schön-schön*Was mich schon recht lange beschäftigt hat, ist folgendes:Nach einigen Tests habe ich den Eindruck, dass der Cursor, wenn er gebraucht wird, immer neu „created“ werden muss.Code: Alles auswählen
oAktuellesBlatt = thiscomponent.getcurrentcontroller.activesheet oCellCursor = oAktuellesBlatt.createCursor() oCellCursor.GotoEndOfUsedArea(True) iEnd_Row = oCellCursor.getRangeAddress.EndRow
Jetzt habe ich, weil das so oft vorkam und so eine unschöne Verlängerung des Codes in den einzelnen Subs verursacht hat, ein Modul „Funktionen“ angelegt und das dahin verschoben.
Die Funktion wird jetzt mit ClZ aufgerufen (Cursor letzte Zeile).
Dank deiner Erläuterungen zu unserem vor Kurzem ebenfalls neu erstellten Modul „Text-Mitteilungen“ klappt der Aufruf auch.
![]()
Das freche an der ganzen Sache ist aber, GENAU DAS hatte ich mir für heute schon vorbereitet gehabt. Und jetzt hast Du mir meine Arbeit einfach so mir-nix-dir-nix geklaut. Frechheit.

Jetzt aber ernsthaft.
Ich wollte dir anhand genau dieser "Problematik" etwas anderes zeigen und Erklären, aber dann dachte ich mir; warum das? Das geht genau so gut auf diese einfache und funktionierende Weise, als wenn man das technisch "hochfrisieren" würde. Und ja, mein vorbereiteter Beitrag hatte wirklich deine selbst erstellten Codezeilen drin gehabt.
Das Du jetzt das ganze selber in Angriff genommen hast, zeugt doch davon das Du was gelernt hast und das auch nutzbringend anzuwenden weißt. Das ist doch gut so.
Jetzt erstmal ein klein wenig Kritik.Wenn man in die von mir zuletzt eingegebene Zeile in die Spalte "Mindereinnahmen" klickt, sieht man oben in der Leiste nicht den eigentlichen, einfachen Wert „0“, sondern einen negativen, nämlich „-2,22044604925031E-016“.
Dadurch ändert sich in diesem Fall auch die Darstellung in -0,00 € statt - €.
Diesbezüglich habe ich damals das Internet tagelang durchforstet, weil ich nämlich alle Werte mit Null wegfiltern wollte und das dann deswegen nicht ging und ich es per Hand erledigen musste.
Ich wage gar nicht zu hoffen, dass du die Lösung kennst…!?
Es hilft mir doch schon sehr, wenn Du erklärst was Du aufrufst, was Du wo eingibst und welche Subs daran beteiligt sind. Denn so musste ich erstmal suchen welche Sub und welche Zeile innerhalb dieser Sub etwas einträgt. Aber nun gut, ich bin ja weitestgehend fündig geworden, wer was wo. Und die Problemlösung folgt anschließend.
Also es geht ab in die Sub Neuer_Artikel im Modul Artikel.
Das Problem liegt darin, das die Berechnungen dort mit Single-Variablen durchgeführt wird. Und diese Variable kann eine ganz schön lange Zahl hinterm Komma aufnehmen. Und das Makro rechet auch damit immer schön weiter. Und so kommt dann am Ende schlußendlich diese Gigantische Nachkommastelle zustande.
Beseitigung des Problemsd ist recht einfach.
Vor dem Kommentar
Code: Alles auswählen
' Sheet "Stamm" nach Artikeltext (sTxt_Art) und ListenPreis(sgEP_Art) durchsuchen
Code: Alles auswählen
DIM MindEinnahme_Art AS Currency
Tja, und nun kommt es ganz Dicke, leider.
Erst heute habe ich eine Sache festgestellt, wonach ich eigentlich sonst immer sehr früh und rechtzeitig nachgeschaut habe, doch diesmal leider nicht.
Ich habe nämlich festgestellt, das die Datei entweder auf irgendeine Art und Weise Kontakt mit Excel hatte, oder aber sie als *.xls zwischendurch mal gespeichert wurde.
Und das geht in diesem Falle aboslut überhaupt gar-nie-nie-nicht!
Die Datei darf aus Sicherheitsgründen nur noch als *.ods gespeichert werden. Alle anderen Dateiformate wie z.B. *.xls sind absolut Tabu.
Und das bedeutet jetzt für dich, mach die Datei komplett NEU. Denn nur so sind wir auf der sicheren Seite. Aus Erfahrung weiß ich das es ansonsten zu merkwürdigem Verhalten der Datei kommen kann.
Um dir aber wenigsten etwas arbeit abzunehmen, habe ich im Anhang eine fast Blanko-Datei wo nur die ganzen BASIC-Module und die Dialoge schon drin sind. Du musst jetzt nur zusehen das Du die Tabellenblätter neu erstellst.
Aber achte dringends darauf das Du aus der anderen Datei nix, aber auch absolt reine weg gar nix per "Strg + C" -> "Strg + V" reinkopierst. Denn dadurch kopierst Du dann ansonsten wieder alles aus der alten Datei darein. Und das muss ja unbedingt vermieden werden.
Wenn Du Formeln oder Zellinhalte kopieren willst/musst, dann aber nur per "Strg + C" -> "Strg + Umschalt + V" -> "Unformatierter Text".
Aber auf gar keinen Fall irgendwelche Bedingte Formastierungen, Zellformatierungen oder Formatvorlagen. All die sind einfach Tabu. Du musst die dann halt alle in der neuen Datei neu erstellen.
Eine kleine Arbeitserleichterung.
Lege in *Meine Makros* -> *Standard* ein Modul an, und kopiere folgendes kleines Makro in dies Modul rein.
Code: Alles auswählen
sub Unformatiert
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "SelectedFormat"
args2(0).Value = 1
dispatcher.executeDispatch(document, ".uno:ClipboardFormatItems", "", 0, args2())
end sub
Jetzt ist aber Schluß. Will in die Heia.

Gruß
balu