Seite 7 von 8

Re: Drucken "von Datum bis Datum" Makro

Verfasst: Do 21. Jun 2018, 15:19
von balu
Hallo Pretender,

als erstes, wenn Du jemandem zitieren willst, also Textpassagen wiederholen möchtest, klicke dazu auf diesen Button.
PN_000.jpg
PN_000.jpg (18.25 KiB) 5797 mal betrachtet
Da wo jetzt Text zu lesen ist, kommt der zu zitierende Text rein.


Dann als zweites, den Makro-Code nicht als einfachen Text hier einfügen, sondern das mittels diesem Button machen.
PN_001.jpg
PN_001.jpg (17.87 KiB) 5797 mal betrachtet
Und hier kommt bei Code (mit großem C) der Makro-Code rein.
Das alles macht das lesen der Beiträge doch etwas übersichtlicher.
Aber irgendwie klappt das nicht. Hab ich da was übersehen?
So auf den ersten Blick: Ja, du hast etwas übersehen.

Code: Alles auswählen

.SearchString = SuchString
Es soll also jetzt nach dem Wort SuchString gesucht werden? :roll:

Mach mal lieber eine winzige kleine Beispieldatei wo man dein Problem besser nachvollziehen kann.



Gruß
balu

Re: Drucken "von Datum bis Datum" Makro

Verfasst: Do 21. Jun 2018, 21:54
von balu
Hier spricht der Wetterfrosch :?
ich hoffe das ist so richtig.
Schon besser für den Anfang.

balu hat geschrieben: Es soll also jetzt nach dem Wort SuchString gesucht werden? :roll:
Kleine Korrektur.
Das sollte heißen:
Es soll also jetzt nach der leeren Variablen SuchString gesucht werden? :roll:

Und warum willst Du denn jetzt auf einmal mit createSearchDescriptor arbeiten, anstatt mit dem createFilterDescriptor.
Der letzt genannte filtert doch schon aus, und übergibt das Ergebnis in ein Array welches an einer bestimmten Position im Tabellenblatt ausgegeben werden kann. Und dies Ergebniss kann man dann meinetwegen in die Listbox übertragen.

Wenn Du schon unbedingt mit createSearchDescriptor arbeiten willst, dann solltest Du auch darüber bescheid wissen wie er gehandhabt wird. Denn so wie ich das sehe, kommst Du mit findAll nicht wirklich weiter.
Versuchs mal mit FindNext oder mit findFirst.
Schau mal dazu entweder hier rein, oder aber hier rinn.

Für heute reichts mir. :twisted: von wegen wetterfrosch



Gruß
balu

Re: Drucken "von Datum bis Datum" Makro

Verfasst: Mo 25. Jun 2018, 10:00
von balu
Guten Morgen Pretender,

ich hab da ein kleine Demo-Datei für den createFilterDescriptor wieder gefunden.

Habe jetzt nicht viel Zeit, deshalb nur das wichtigste zum grundsätzlichen Verständnis.

Also im Tabellenblatt "StammDaten" in der Spalte D mit der Überschrift *Quelle* sind Fantasienamen aufgelistet. Und links daneben sind entweder Sternchen (*) oder keine aufgeführt.

Beim klick auf den kleinen blauen Button "Filtern" filtert das Makro alle Einträge die mit einem Sternchen versehen sind und gibt das Ergebnis nach *Ziel1* aus. Nebst den Sternchen werden natürlich auch die dazugehörigen Namen gefiltert, weil das im Makro mit oBereichAlleDaten so vorgegeben ist.

Anschließend werden diese gefilterten Einträge noch mal gefiltert, aber diesmal werden nur "Nicht leere Zellen" aus der Spalte L nach "Ziel2" rausgefiltert. Das geschieht jetzt im Makro mit oBereichAlleDaten2.

Okay, natürlich kann man auch beide Durchläufe in einen zusammenpacken, so das nur 1 mal gefiltert wird. Aber so kannst Du dich ja schon mal ein weing damit vertraut machen und etwas rumexperimentieren. ;)



Gruß
balu

Re: Drucken "von Datum bis Datum" Makro

Verfasst: Mo 25. Jun 2018, 12:05
von balu
Mahlzeit.
kannst du mir kurz mitteilen, wo hier nach dem Wort gesucht wird?
Das läuft wie folgt in diesen 3 Zeilen ab.

Code: Alles auswählen

Filterfeld.operator = com.sun.star.sheet.FilterOperator.LESS
Wert = Right(Wert,Len(Wert)-1)
Filterfeld.StringValue = Wert

Als erstes wird die Bedingung festgelegt

Code: Alles auswählen

Filterfeld.operator = com.sun.star.sheet.FilterOperator.LESS

Dann wid das zu filternde 'Wort' bestimmt.

Code: Alles auswählen

Wert = Right(Wert,Len(Wert)-1)

Und zu guter letzt wird das ermittelte 'Wort' an das Filterfeld übergeben.

Code: Alles auswählen

Filterfeld.StringValue = Wert

Das Problem liegt darin, dass die Zeile, nach dem ganzen Wortlaut durchsucht
wird und nicht nur nach dem Wort im Wort.
z:B. Bananenplantage /gefunden wird es nur wenn es genau so erfasst wurde.
Das ist nun mal halt die sogenannte "Grundeinstellung".

besser wäre es doch, wenn nach Banane, Bananen, Plantage ein Ergebnis
erscheinen würde.
Ob das jetzt besser wäre, glaub ich nicht.
Das Wort Bananenplantage enthält das TEILWORT Banane und dieses muss dann besonders gehandhabt werden, wenn man nach Banane innerhalb eines anderen Wortes suchen will. Und für diese besondere Aktion braucht es, müsste dir eigentlich vom wortsinn nicht ganz unbekannt sein, die Regulären Ausdrücke.

Ohne die Regulären Ausdrücke kann man sich sehr viel Tipparbeit ersparen. Jedoch mit ihnen wird es dann doch schon wieder komplizierter, und das in doppelter Hinsicht. Denn einerseits müssen die zulässigen Regulären Ausdrücke nicht nur aktiviert werden, sondern auch irgendwie im Makro bekannt sein. Und anderseits mus man bei der Eingabe auch mal darauf achten, das bestimmte Reguläre Ausdrücke vermieden werden sollten. Das heißt, man darf nicht jedes x-beliebige Sonderzeichen verwenden da dies unter Umständen zu argen Problemen führen kann.

Du siehst im Makro drei unterschiedliche Bedingungen für den FilterOperator; GREATER, LESS und EQUAL. Um jetzt auch noch mit Regulären Ausdrücken zu arbeiten, muss irgendwas mit 'RegularExpression' (oder so ähnlich) eingetragen werden. Müsstest mal selber die bekannten Quellen durchforsten.



Gruß
balu

Re: Drucken "von Datum bis Datum" Makro

Verfasst: Mo 25. Jun 2018, 15:03
von balu
Hai.

Trotz 'Magen & Darm prob' ... :?
momentan zeigt er kein Suchergebnis an
Tja, das hat ich vorhin nicht so richtig verstanden und übersehen. Wie soll ich trotz allem dir helfen, wenn aus dem Code nicht ersichtlich wird wie Du was nach wohin ausgeben lassen willst?
Also eine minimale Beispieldatei sollte es nun schon sein.

In meiner 'Filter-Demo.ods' sind die Stellen ab wo das Ergebnis ausgegeben werden soll wie folgt angegeben.

Code: Alles auswählen

oFilterBeschreib.CopyOutputData = True
oZielZelle = oStammSheet.getCellRangeByName...
[...]
oFilterBeschreib.CopyOutputData = True
oZielZelle2 = oStammSheet.getCellRangeByName...
Durch CopyOutputData wird gesagt, das das Ergebnis wo anders hin ausgegeben werden soll.


Für heute is Feierabend angesagt.



Gruß
balu

Re: Drucken "von Datum bis Datum" Makro

Verfasst: Di 26. Jun 2018, 15:01
von balu
Hallo Pretender,
Mit diesem Teil gelingt die Suche nach einem Teilwort, allerdings zeigt er mir die Zeilen
zwar an, aber ich muss allerdings die Tabelle komplett durchscrollen um die markierten
Zeilen zu finden. Ich werd noch verrückt....
Du verlangst von dem Code etwas wofür er gar nicht vorgesehen ist. Er macht genau das was er soll, wie Du selbst festgestellt hast.
Wenn Du jetzt willst das die gefundene Zelle auch noch in deinen Sichtbereich gerückt werden soll, so musst Du das programmieren.
Mit dieser kleinen Routine zum testen ist das wohl kein Problem.

Code: Alles auswählen

Sub Zelle_hervorholen
myDoc = thisComponent
	myView = myDoc.CurrentController
	mysheet = myDoc.sheets(0)
	mycell =  mysheet.getCellByPosition(3,33) '<-- hier die gewünschte Zelladresse eingeben.
	myView.Select(mycell)
End Sub
Und dreimal darfst Du raten woher ich den Code habe.

...

...

...

Ich sag nur: Dannenhöfer
7.1.9 Wie kann man den aktuellen Cursor auf eine Zelle setzen?


Zu deinem anderen Problem.
Das ist auch für mich so ein Problem, da ich ja schon erwähnte das ich damit noch nix zu tun hatte. Aber nach ein bisschen Suchen im anderem Forum und testen, bin ich auf etwas gestoßen was dir einen etwas anderen Einblick in das spezielle Suchen verschaffen kann. Hier wird das Grundlegende Problem beschrieben: Klick mich.
Und so ziemlich zum Anfang gibt es auch ne Beispieldatei. Diese habe ich genommen, und ein zweites Modul angelegt, mit dem Namen: *Filteroutput_No2*
Aber zu erst zu dem ersten Modul *Filteroutput* noch ne kleinigkeit.
Generell wird mit Regulären Ausdrücken gearbeitet (UseRegularExpressions). Aber dort wird mit 3 Zahlen hantiert, entweder 1, oder 2, oder aber die 3.

In dem zweitem Modul wird Text mit den Regulären Ausdrücken kombiniert. Mein vorgegebenes Beispiel lautet:

Code: Alles auswählen

.*bär.*
Es wird also Eisbär, so wie auch bärendienst zurückgegeben.

Egal ob die Sache mit den Zahlen, oder das mit dem Text, es wird immer fest auf eine bestimmte Spalte zugegriffen. Aber zum Üben ist das ja schon mal nicht schlecht.

Das filtern mit 1, 2, oder 3 kannst Du mit dem Button ausführen.
Die Textfilterung musst Du von Hand ausführen.



Gruß
balu

Re: Drucken "von Datum bis Datum" Makro

Verfasst: Mi 27. Jun 2018, 17:27
von balu
Halllooooo!

Ja was wirfst Du mir denn da vor die Füße? :o
Du erstellst Dialoge zur Laufzeit!? Hat das einen besonderen Grund? :roll:

Ist der Code wirklich von dir?
Diese Frage hat nämlich seinen besonderen und tieferen Grund. Denn wenn ich das hier sehe

Code: Alles auswählen

'mri ocontrol1
muss ich mich ernsthaft Fragen, ob Du das Tool MRI wirklich installiert hast und ob Du weisst wie man damit umgeht. MRI habe ich auch in einer anderen OO.o Version installiert und auch schon damit gearbeitet, aber noch ist mir XRAY lieber.

Und wenn Du wirklich mit MRI arbeitest (wovon ich ausgehe), dann dürfte dich das nicht wundern, das das hier

Code: Alles auswählen

ocur.charbackcolor=rgb(150,150,150)
eine Fehlermeldung ergibt.


Und warum hast Du ein paar Zeilen tiefer, nach dem 'charbackcolor', das hier drin?

Code: Alles auswählen

        myView.Select(mycell)
        myView.Select(mycell)
Ist einmal nicht genug?


Code: Alles auswählen

	odoc=thiscomponent
	octrl=odoc.currentcontroller	
	otab=octrl.activesheet
	myDoc = thisComponent
Fällt dir dabei irgendetwas auf?

...

Du hast 'thiscomponent' zwei verschiedenen Variablen zugewiesen. Das ist Blödsinn. Es reicht wenn Du das einmal machst. Als Beispiel.

Code: Alles auswählen

	odoc=thiscomponent
Klar musst Du dann anschließend daher gehen und die Stellen mit 'myDoc' gegen 'odoc' tauschen, aber irgendwann MUSST Du dich an eine Einheitliche Linie gewöhnen, denn sonst wirst Du noch ganz andere Überaschungen erleben.

Ich greife das gleich mal auf um dir noch einen, so sehe ich das, wertvollen Tip zu geben. Eigentlich sind das sogar mehrere.
Du schreibst wirklich alles in Kleinschreibung?
Finde ich gar nicht gut.
Es gibt die Regel, das bestimmte Dinge einer exakten Schreibweise folgen müssen. Und dazu gehören solche Dinge, als Beispiel.
"com.sun.star.sheet.SheetCellRanges"
"com.sun.star.awt.UnoControlDialogModel"
"com.sun.star.awt.UnoControlDialog"
Hält man sich nicht daran, rappelts im Karton.

Für deine selbst erstellten Variablennamen gilt das aber nicht. Da kannst Du theoretisch schalten wie Du gar luschdich bischt. Jedoch würde ich mich da an etwas halten, was später durchaus sehr nützlich sein kann.

Stelle dem Variablennamen einen kleinen Buchstaben voran, der dir auch gleichzeitig signalisiert um was für einen Variablentyp es sich dabei handelt. Und der eigentliche Variablenname beginnt dann mit einem Großbuchstaben.
Beispiele siehst Du eigentlich in mehreren dateien von mir, auch wenn ich je nach Beispieldatei mal etwas schludere.
Aber dennoch zeige ich es dir hier noch mal deutlich, als ein paar Beispiele.

Code: Alles auswählen

	Public oDok as Object, oDok2 as Object, oVerfuegen as Object
	Public dQuartalVon as Date, dQuartalBis as Date
	Public aQuartalsArray()
Hier siehst du die Variablen deklaration.
Kleines o = Object
Kleines d = Date
Kleines a = Array

Code: Alles auswählen

	oDok = ThisComponent
	oVerfuegen = oDok.Sheets.GetByName("Verfügungen")
	oDrucken = oDok.Sheets.GetByName("Ausdruck")
Hier ist das kleine o auch wieder zu sehen.
Ferner ist aber auch ThisComponent anders geschrieben, genau so wie z.B. GetByName.
Nur mal so als Beispiel.
Die Liste mit den kleinen Buchstaben lässt sich auch noch ergänzen, und würde dann wie folgt aussehen.
Kleines o = Object
Kleines d = Date
Kleines a = Array
Kleines i = Integer
Kleines l = Long Integer
Kleines s = String


Im Dialog
sollte er dann nach weiteren Treffern suchen
Sorry, aber diese Formulierung ist sehr missverständlich. :roll:
- Heisst das, es soll gefragt werden ob weiter gesucht werden soll (Dialog ist ein wechselseitiges Gespräch).
- Oder soll in deinem zur Laufzeit erstellten Dialog weiter gesucht werden? Wobei ich mich frage wie das gehen soll.

Also ganz ehrlich, Dialoge zur Laufzeit zu erstellen ist ja wohl ganz gut und schön, aber nicht so lange wie das eigentliche Arbeitsmakro noch nicht fertig ist. In der Entwicklungsphase würde ich auf das verzichten, man kann sich Probleme einfangen die man nicht versteht, und stattdessen lieber mit gezeichneten Dialogen arbeiten.

Ich bitte dich darum die Datei, genauer gesagt das Makro dementsprechend zu ändern, und dann sehen wir weiter.



Gruß
balu

Re: Drucken "von Datum bis Datum" Makro

Verfasst: Mi 4. Jul 2018, 21:34
von mikele
Hallo Pretender und Balu,
glaubt nur nicht, dass ich mich ausgeklinkt hätte ... :lol:
Ich bin mal einem anderen Ansatz nachgegangen. Ich hatte ja schon einmal angedeutet, dass es sich um ein typisches Datenbankproblem handelt. Warum also nicht Base nutzen? Knackpunkt für mich war, dass ich keine Ahnung von Datenbanken und deren Bearbeitung über Formulare etc. habe. Beste Voraussetzungen, um endlich mal etwas darüber zu lernen.
Mit ganz viel Hilfe von Robert Großkopf's Base-Handbuch und Beispielen (http://robert.familiegrosskopf.de/index_2.php) 8-) habe ich mal einen Lösungsansatz zusammengebastelt.
Die Daten werden über zwei Formulare verwaltet, die über ein Hauptformular ausgewählt werden. Ein Formluar dient der Eingabe eines neuen Datensatzes (=Verfügung). Mit dem zweiten Formular können die Daten bearbeitet, gefiltert und (zunächst rudimentär) exportiert werden.
Gerade die Filterfunktionaltäten einer Datenbank reduzieren den Makroaufwand enorm!
Pretender: Geh' mal auf Erkundungstour.
Anmerkung für die Datenbankprofis: Das Ganze ist sicher nicht optimal - Verbesserungsvorschläge nehme ich gern entgegen.

Re: Drucken "von Datum bis Datum" Makro

Verfasst: Do 5. Jul 2018, 12:27
von mikele
Hallo,
suchen ist doch im Prinzip auch nichts anderes als Filtern. Das sollte bereits klappen.

Re: Drucken "von Datum bis Datum" Makro

Verfasst: Di 10. Jul 2018, 15:52
von mikele
Hallo,
Ist das so in Ordnung?
Hast du es ausprobiert?