BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

Drucken "von Datum bis Datum" Makro

Alles zur Programmierung im OpenOffice.org
mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Drucken "von Datum bis Datum" Makro

Beitrag von mikele » Mi 23. Mai 2018, 21:04

Hallo,
bevor ich mich jetzt durch die details des Makros wurstle: Deine Daten befinden sich auf "Tabelle1" in den Spalten A-I ab Zeile 6. Das Datum befindet sich in Spalte A und die Zeilen sind nicht nach Datum sortiert.
Du möchtest nun alle Zeilen aus diesem Bereich, deren Datum sich zwischen einem Anfangsdatum und einem Enddatum liegen (inkl. dieser Daten), als pdf exportieren. Dabei müssen Anfangs- und Enddatum existieren.
Ist das erstmal so richtig verstanden?
Ergänzende Fragen:
a) Wäre es nicht auch sinnvoll die Zeilen zu exportieren, die einfach zwischen den beiden Daten liegen, ohne dass diese selbst existieren müssen?
b) Irgendwie werden im Makro weitere Tabellenblätter ein-/ausgeblendet. Hat das eine besondere Bewandnis?
Gruß,
mikele

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Drucken "von Datum bis Datum" Makro

Beitrag von mikele » Fr 25. Mai 2018, 12:17

Hallo,
nur mal grundsätzlich gefragt: Du hast aber nicht den Anspruch, dass die Datei dann unter Calc und Excel läuft (würde ich als fast aussichtslos betrachten)?
Daher geht es nun also darum, die vorhandene Exceldatei (inkl. Makro) in Calc umzu schreiben. Es könnte hilfreich sein, das Gesamtprojekt zu sehen, um Abläufe zu optimieren.
Gruß,
mikele

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Drucken "von Datum bis Datum" Makro

Beitrag von mikele » Fr 25. Mai 2018, 13:01

Hallo,
das Ganze wäre schon sinnvoll (wenn es möglich ist). Arbeitet ihr mit AOO oder LO? Version?
Gruß,
mikele

balu
Beiträge: 155
Registriert: Di 12. Okt 2010, 11:35

Re: Drucken "von Datum bis Datum" Makro

Beitrag von balu » Fr 25. Mai 2018, 13:47

Mahlzeit,
Pretender1970 hat geschrieben: Soll ich das ganze hochladen?
mikele hat geschrieben: das Ganze wäre schon sinnvoll
Das befürworte ich auch.
Denn Excel sprech Deutsch ist etwas anderes als OpenOffice (gilt für AOO und LO) sprech deutsch.

Mir gefällt z.B. diese Aussage nicht so sonderlich.
Pretender1970 hat geschrieben: Sollte das passieren, öffnen sich Msg-Boxen die einen Hinweis
geben.
Wenn ich falsch liegen sollte, so solle man es mir sagen. Aber das hört sich nicht gut an, wenn eine UserForm geöffnet ist, und in einem Problemfall eine Msg-Box aufpoppt.

Ich weiss jetzt nicht ob ich mich da vertue, wahrscheinlich kann das mikele bestätigen oder verneinen, aber in OpenOffice würde das ja bedeuten das erst ein Dialog angezeigt wird und dann im Problemfall eine Msgbox aufpoppt.

Besser fände ich es (in OpenOffice deutsch); Dialog okay, aber im Problemfall ein selbst gestallteter Dialog aktivieren. Denn die Msgboxen können nicht so individuell gestaltet werden wie ein eigenständiger Dialog.


Pretender1970 hat geschrieben: Das aus und einblenden der Blätter hat die Bewandtnis, dass ich mehrere Benutzeroblächen (UserForm) generiert habe.
Und das ist mir wiederum ein Rätsel. Denn wenn eine UserForm gleichzusetzen ist mit einem Dialog in OpenOffice, was bringt es da Blätter aus- und einzublenden?

Oder ist eine UserForm nicht das gleiche wie ein Dialog.

Du siehst, lieber Pretender, Excel und Calc sind nicht gleich, und erst recht nicht wenn es um VBA und StarBasic geht. Wenn Du jetzt nicht weisst was ein Dialog in OpenOffice ist, dann ergeht es dir jetzt nicht anders als wie mir wo ich nicht wirklich weiss was eine UserForm ist.



Gruß
balu

balu
Beiträge: 155
Registriert: Di 12. Okt 2010, 11:35

Re: Drucken "von Datum bis Datum" Makro

Beitrag von balu » Di 29. Mai 2018, 01:43

Hallo Pretender,

Danke für die Datei. Zumindest für mich wird dadurch einiges klarer. :D

Also doch. Excel UserForm ist gleich AOO Dialog.

Ich sehe, das im Editor insgesamt 9 UserFormen existieren. Das sind die *UserForm1* bis *UserForm8* und die *Suchergebnis*.

Mal ne bescheidene Frage, weil ich es nicht weiss. :?
Kann in Excel keine mehrseitige UserForm erstellt werden?
Wie ich das meine, willst Du wissen?
Okay hier kommt eine Erklärung.

In AOO ist ein Dialog von Grund auf ein leeres Buch mit sehr vielen Seiten. Und dieser Vergleich passt hier auch vorzüglich hin. Und was ein Buch ist, das weiss ja nun wohl jedes Kind ;) .

Also dieses Leere Buch mit all seinen leeren Blättern kann man nun innerhalb der Blattgröße ganz individuell gestalten. Schriftgröße und Schriftfarbe, Bild einfügen, Hintergrund farblich gestalten, und so weiter und so fort. Und wenn dieses Buch fertig gestaltet ist, kann man es Beispielsweise "Obst" benennen. Da steht dann alles über 'Äpfel & Co' drin, und das auf beispielsweise 10 Seiten.
Damit wäre dann ein Dialog mit dem Namen "Obst" und 10 'Unterseiten' fertig.

Dann kann man ein weiteres Buch gestalten mit dem Namen "Gemüse", welches nur 5 Seiten hat.
Damit wäre dann ein Dialog mit dem Namen "Gemüse" und 5 'Unterseiten' fertig.

Es stehen dann also 2 Bücher mit recht vielen Seiten im Regal.

Und im AOO Editor würde das beispielsweise so aussehen.
Erst kommen die Basic-Module, und anschließend 2 Basic-Dialoge mit den Namen "Obst" und "Gemüse".


Bei dir sieht das aber so aus, wenn wir bei dem Vergleich mit den eben genannten Büchern bleiben wollen.
Anstatt 1 Buch hast Du 8 Bücher mit jeweils nur dem Deckblatt erstellt. Und auf jedem einzelnen Deckblatt steht z.B. etwas über Äpfel, oder Bananen, oder Birnen. Du hast also kein Gesamtbuch, sondern eine Ansammlung von diversen Deckblättern.

Das mit den Basic-Modulen lassen wir jetzt unbeachtet. Konzentrieren wir uns auf die Dialoge die man in AOO sieht. Die 8 einzelnen Dialoge sind doch vom Grundaufbau (Länge mal Breite) doch eigentlich identisch. Also warum das ganze nicht in einen einzigen Dialog zusammenpacken?
Klar wird dadurch der Programmieraufwand erhöht, aber es kann sich unter Umständen durchaus lohnen.

Im Anhang ist ein minimalistisches Beispiel das im groben das eben gesagte veranschaulicht.
(Simpel_Beispiel_mehrseitiger_DIALOG_0.ods)
Wie gesagt, das Beispiel ist extrem einfach gehalten. Es ist ein kleiner kostenloser Appetitanreger. Nach dem Motto: "Willst du mehr! Dann musst du dafür bezahlen!"
Nein!
Natürlich musst Du keinen T€uro übern Thresen schieben, sondern Du musst dich damit intensiver befassen, das ist deine Bezahlung.

Und hier kommt ein Link, der etwas ausführlicher das Thema "Mehrseitige Dialoge" erklärt.
4.1.6 Wie kann man mehrseitige Dialoge erstellen?
In meiner Beispieldatei ist das pracktisch angewendet, was Dannenhöfer da dort erklärt.



Kommen wir zu deinem eigentlichem Problem, Thema.

Drucken "von Datum bis Datum"
Ist das mit OO auch möglich? Und ist das sehr aufwendig zu gestalten?
Ja, es ist schon möglich.
Aber ganz ehrlich gesagt möchte ich nicht in deiner Haut stecken :? . Erst lange Zeit Erfahrung mit VBA ansammeln, und dann auf einmal auf eine andere, oder zumindest teilweise andere Programmiersprache umsteigen. Ich richte dir schon mal mein aufrichtiges Beileid aus.

Du musst dich in so einigen Punkten ganz schon umgewöhnen. VBA ist nun mal halt nicht StarBasic, und umgekehrt. Aber trotzdem habe ich dir jetzt mal etwas zusammengenäht :lol: , was folgendes abarbeitet.

- 2 Spalten mit Daten, einmal mit Datum und einmal mit ein paar Fantasienamen, sollen in ein Array eingelesen werden, nach einem Quartalsdatum duchsuchen, und die Übereinstimmungen im Tabellenblatt dann rechts neben der Dateiliste ausgegeben werden.

- Das Quartalsdatum wird automatisch erzeugt. Das aktuelle Jahr wird aus "now" ausgelesen, und der Monat und der dementsprechende Tag sind feste Daten.
Ein Beispiel was ich genau unter Quartalsdatum verstehe:
01.01.2018 - 31.03.2018

Die Datume werden in einem Array gespeichert, Beispiel:

Code: Alles auswählen

aQuartalsArray(0,0) = DateSerial(Year(now), 1, 1) : aQuartalsArray(1,0) = DateSerial(Year(now), 3, 31)
In

Code: Alles auswählen

aQuartalsArray(0,0) = DateSerial(Year(now), 1, 1)
wird der 01.01.2018 erstellt und gespeichert.

Und in

Code: Alles auswählen

aQuartalsArray(1,0) = DateSerial(Year(now), 3, 31)
wird der 31.03.2018 erstellt und gespeichert.

Der zu sehende Doppelpunkt ':' ist ein Zeichen dafür, das es eigentlich 2 Zeilen sind. Ohne diesen Doppelpunkt müsste man die zitierte "Zeile" wie folgt schreiben.

Code: Alles auswählen

aQuartalsArray(0,0) = DateSerial(Year(now), 1, 1)
aQuartalsArray(1,0) = DateSerial(Year(now), 3, 31)
ABER ACHTUNG!!!
GANZ WICHTIG!!!

In diesem Falle gilt; Vor und hinter dem Doppelpunkt muss DRINGENDS mindestens ein Leerzeichen stehen, ansonsten gibts böse Überraschungen. :o

Um auf eine gewisse Art und Weise die Datumsliste (die aus Spalte A) zu durchsuchen, muss ein VON und ein BIS Datum existieren.

Code: Alles auswählen

if aDatenArray(iAz)(0) >= dQuartalVon AND aDatenArray(iAz)(0) <= dQuartalBis then
Hiermit wird untersucht ob das "VON"-Quartalsdatum {aQuartalsArray(0,0)} größer oder gleich groß wie das Datum aus der Datumsliste ist, und ob das "BIS"-Quartalsdatum {aQuartalsArray(1,0)} kleiner oder gleich groß wie das Datum aus der Datumsliste ist. So im ganz groben.

Zu dieser ineteressanten Art und Weise wie die Durchsuchung abläuft, empfehle ich dir mal einen Blick hier rein zu werfen.

Wenn jetzt also ein Datum sich innerhalb eines Quartalsdatum (beispielsweise: 01.01.2018 - 31.03.2018) befindet, dann wird das im Tabellenblatt in der Spalte D ausgegeben, und in der Spalte E wird der dazugehörige Name ausgegeben.

Die Ausgabe geschieht leider noch auf eine langsame Methode, weil mir momentan nicht das richtige einfällt um das zu Optimieren :oops: .
Aber so hast Du schon mal etwas zum selber üben und testen, und womit im groben Grundprinzip deine Thema hier teilweise abgearbeitet ist.

Viel Erfolg beim Studieren. :)



Gruß
balu
Dateianhänge
Simpel_Beispiel_mehrseitiger_DIALOG_0.ods
(11.09 KiB) 239-mal heruntergeladen
Daten für Druckbereich filtern_einfache Version_0.0.ods
(20.94 KiB) 234-mal heruntergeladen

balu
Beiträge: 155
Registriert: Di 12. Okt 2010, 11:35

Re: Drucken "von Datum bis Datum" Makro

Beitrag von balu » Di 29. Mai 2018, 13:04

Mahlzeit Pretender,
werde ich wie ein Erstklässler die Schulbank
drücken müssen, aber hey, gut für`s Gehirn....:))))
Na ja, etwas weiter wie ein Erstklässler bist Du ja schon :) . Denn es gibt hier und da schon gewisse Ähnlichkeiten oder sogar Parallelitäten, wenn es um den Programmcode geht.
Auch wenn es sich quasi nicht nach viel anhört, so sind "For i =..." und "if ... then ..." vom Aufbau identisch. Und das ist schon mal sehr viel Wert.

Aber das betrifft jetzt nur die Makros, bei den Dialogen ist es wirklich eine Rückstufung in die 1. Schulklasse :cry: . Und das fängt schon im Editor an. Da ist doch gar nix identisch.

Wenn ich da so an meine Anfangszeiten mit Dialogen zurück denke, ist noch gar nicht so sehr lange her (ungefähr 8 Jahre), dann kommen in mir Erinnerungen hoch die mich damals fast regelrecht verzweifeln liesen. Da hatte ich dann doch schon so das ein oder andere von allein geschafft, aber bei Problemen fragte ich mich sehr oft: "Bin ich jetzt total behämmert, dass ich das nicht geregelt kriege? :twisted: ".
Aber nein! So behämmert war ich da gar nicht!
Denn es gibt schon manchmal ein paar Stoplersteine die man nicht sofort sieht oder erkennt. Und dann musste ich mir auch Hilfe durch ein Forum holen. Trotz der schon verlinkten Seite von Dannenhöfer, oder anderer Quellen wie z.B. die Seite von 'Volker Lenhardt'.

Der Volker Lenhardt hat sich daran gesetzt und das Buch "OpenOffice.org Macros Explained" von Andrew Pitonyak ins deutsche übersetzt. Die Übersetzung ist im laufe der letzten Jahre Stück für Stück gewachsen. Er hat aber nicht nur Übersetzt, sondern auch hier und da etwas angepasst.
Mittlerweile ist das zu downloadende PDF auf über 700 Seiten herangewachsen. Es ist kostenlos. 8-)
Hier der Link zu Volker Lenhardts seine Seite.
OOo/LO Volker Lenhardt
Meine dringende Empfehlung an dich.
Lade dir die PDF-Fassung dort bei Download: herunter!

Egal ob die Seiten von Dannenhöfer (schaue ich immer wieder mal rein), oder das eben genannte PDF, manchmal hat man als Anfänger doch so seine schwierigkeiten die Sprache richtig zu verstehen. Und nein, ich meine nicht die Programmiersprache, sondern die Worte der Autoren :? . Aber da kann man sich im Laufe der Zeit schon reinarbeitn, ist nun mal halt so.


Ob man mehrseitige UserForm verwenden kann...mmmhh? Hab
ich mir noch nie Gedanken gemacht. Werde mich mal darüber belesen....
Ich hatte gestern mich deswegen auch mal auf die Suche gemacht, aber bin wohl dank falscher Suchbegriffe nicht wirklich weiter gekommen. Und da ich mich ja auf meine Beispieldateien konzentrieren wollte, habe ich dann die Suche aufgegeben. Aber wenn Du genaueres weisst, dann würde ich mich über eine Info von dir dazu sehr freuen.

Und ein Danke schön für deine Lobende Worte. Das tut immer wieder gut. :D

Noch mal etwas allgemeines zum Thema Dialoge, ist mehr ein Erfahrungsbericht meinerseits ohne in die Tiefen der Materie einzutauchen.

Ich hatte vor nun mehr um so ca. 8 Jahren damit angefangen. Es war nicht für mich selber, sondern für jemand anderem. Nein! Er hatte das nicht von mir gewollt! Aber aus einem anfänglich kleinen unbedeutsamen Calc-Problem, habe ich dann auf Grund einer Idee von mir angefangen das Problem mittels Makros und Dialoge zu lösen wollen. Und im laufe der Zeit wurde das immer Umfangreicher. Aber immer in Rücksprache mit dem "unfreiwilligen Auftraggeber" (er wusste zu anfangs nicht was ich vor hatte, war dann aber von meiner Idee begeistert), was auch so gut war. Denn irgendwann erzählte er mir das ein oder andere über die Personen die damit arbeiten sollten.

Und dadurch erfuhr ich das es durchaus wohl an bestimmten Stellen zu Problem kommen kann, weil die Personen die Dialoge wohl nicht so bedienen würden wie es vorgesehen ist. Okay das lässt sich wohl abstellen, was sich bis hier her noch sehr harmlos anhört. Doch damit fingen für mich erst die Probleme so richtig an. :twisted:

1.
Wie leitet man die Personen durch die Dialoge?

2.
Wie kann man Fehleingaben verhindern?

______________Und ganz besonders Wichtig!______________
3.
Wie kann man ihnen Hilfe anbieten, wenn es mal nicht weiter geht, oder jemand nicht weiss was er zu machen hat?


zu 1.
Es werden nicht alle Elemente sofort Frei oder Sichtbar geschaltet. Und pro "Aufgabe" nur das aller nötigste.

zu 2.
Am besten von vornherein auf direkte manuelle Eingaben verzichten, wie z.B. ein Datum eingeben. Wenn es irgendwie möglich ist, dann nur mir OptionsButton oder ähnlichem arbeiten. Das ganze so gestallten, das am besten nur mit der Maus gearbeitet wird. Bei der Maus am besten im Makrocode das Mausrad deaktivieren, denn das kann an anderen Stellen zu ungewollten "Fehleingaben" führen. Und ferner fließt hier auch Punkt 1 mit ein.

Aber auch daran denken das bestimmte Aktionen wohl quasi fast jeder machen darf, dies aber nicht mal so eben auf die Schnelle erledigt werden kann, so nach dem Motto: "Klick, klick, klick und wech is er!" :o
Also eine Bremse einbauen die das Tempo "mal eben hier und da ein paar Mausklicks" herausnimmt. Der Benutzer muss dazu gezwungen werden für eine gewisse Zeit sein Tempo zu drosseln und mal kurz inne zu halten.
Und das habe ich auf eine ganz einfache Art und Weise mittels einer so genannten "Captch-Eingabe" Realisiert. Es wird also per Zufallsgenerator ein 5 Stelliger "Code" vorgegeben den man an einer bestimmten Stelle von Hand in ein Textfeld eintippen mus. Der vorgegebene Code kann nicht Kopiert werden um ihn in das Textfeld einzufügen. Erst wenn man den Code richtig eingeben hat, kommt man weiter.

Und wer sich nicht mit der Programmierung auskennt, also der einfache Benutzer, der wird auch nicht so schnell den Makrocode dafür verstehen und ändern können, obwohl er eigentlich gar nicht so sehr schwer ist. Zusätzlich könnte man auch noch das dementspechende Modul verschlüsseln, so das man ohne Passworteingabe nicht daran kommt. Das hatte ich aber nicht gemacht.

zu 3.
Am besten für jede "Aufgabe", oder jede Dialogseite, einen Hilfe-Button anbieten. Und wenn man darauf klickt, poppt dann ein weiteres Dialog-Fenster auf in dem immer passend zu der Stelle wo man auf die Hilfe klickt ein Hilfetext angeboten wird.


Ferner muss man sich auch Gedanken darüber machen was passiert wenn einer bei einem Mehrseitigem Dialog auf "zurück" klickt? Sollen alle zuvor vorgenommenen Einstellung bestehen bleiben, oder nur ein paar gelöscht werden, oder was?

Das jetzt nur mal im Groben was ich mir alles so für das "Projekt" habe einfallen lassen müssen. Und egal ob VBA oder StarBasic, das sind alles Punkte die man eben nicht so ausm Ärmel schüttelt. Da steckt eine imense Arbeit, und so einige Schlaflose Nächte dahinter.


Wünsche dir alles gute beim verstehen und Begreifen von StarBasic, inklusive den Dialogen. :)


Bis die Tage.



Gruß
balu

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Drucken "von Datum bis Datum" Makro

Beitrag von mikele » Mi 30. Mai 2018, 16:07

Hallo Pretender1970,
Balu hat (wie immer toll) das Wesentliche angesprochen.
Grundsätzlich kann Calc an der Stelle alles das, was die Excel-Datei leistet. Soweit die einfache Antwort.
Wie das Ganze aber am sinnvollsten gestaltet wird, insbesondere die Bedienung, musst du, der die Abläufe kennt, entscheiden.
Auf alle Fälle erscheint es mir effektiver, die Datei von Grund auf neu zu stricken. Dabei können all die praktischen Erfahrungen einfließen und vielleicht (siehe mehrseitige Dialoge) neue Wege gegangen werden.
Neben der Bedienungsanalyse, wo Balu viele Punkte ansprach, ist es wichtig (und für uns Aussenstehende schwierig) zu klären,
a) welche Daten müssen erfasst werden
b) wie sollen sie abgelegt werden
c) ob und in welchem Umfang sollen die Daten bearbeitet werden
d) wie sollen sie exportiert/gespeichert/gedruckt werden

Um hier zu helfen, bräuchte ich etwas mehr Input. Man kann sich zwar einiges zusammenreimen, aber das wird Murks ...
Gruß,
mikele

balu
Beiträge: 155
Registriert: Di 12. Okt 2010, 11:35

Re: Drucken "von Datum bis Datum" Makro

Beitrag von balu » Mi 30. Mai 2018, 21:49

Hallööchen!

@mikele
Danke für die Blumen :-)


@Alle
Da ich wegen einer anderen Makro-Angelegenheit extrem stark gefrustet bin, musste ich mal meinen Frust in einer kleinen Datei ablassen.

Keine Angst! Die Vorwarnung setze ich natürlich nicht in eine sehr Böse Attacke um.
Obwohl!
Sie ist schon ein wenig gemein. Das aber auf eine noch so einigermaßen erträgliche Art und Weise.

Was macht die Datei?
Nicht viel. Wer sie sich anschaut, und mehr wissen will, der muss den Button "Klick mich" anklicken. Und dann kommt das, was ich in meinem letzten Beitrag Beschrieben habe und zwar:
Ein Captcha.
Im Prinzip wars das auch schon. ;-)

ABER!
Wer kann mir sagen wie ich das Programmiert habe? Am besten den Code zeigen.
Und das ist die Gemeinheit die ich mir einfallen lies. :D

Meldet Euch.



Gruß
balu
Dateianhänge
Einfaches Captcha_Bibliothek_mit_PASSWORT_geschützt_0.0.ods
(15.33 KiB) 210-mal heruntergeladen

balu
Beiträge: 155
Registriert: Di 12. Okt 2010, 11:35

Re: Drucken "von Datum bis Datum" Makro

Beitrag von balu » Fr 1. Jun 2018, 12:57

Hallo Pretender,

ich glaube ich muss dir erstmal einen kleinen Crash-Kurs verpassen. Da ich nicht weiss wie das in VBA gehandhabt wird, ist das kommende für dich sehr Wichtig! Nur damit Du schon mal ein paar Dinge besser verstehst.

Als erstes.
Meine Beispieldatei ist darauf ausgelegt gewesen, das ein Datum und ein Text "gefiltert" und kopiert wird. Nicht mehr, und nicht weniger.
Formate jeglicher Art werden nicht kopiert!
Außerdem sollte sie jetzt erstmal nur zeigen wie ein einfacher Dialog aussieht und wie man ihn per Makro anspricht. Das Makro ist nur der aller kleinste Bruchteil von "der Spitze des Eisbergs", es ist quasi nur ne kleine Schneeflocke auf der Spitze.

Du möchtest aber mehr als das. Und das geht noch nicht so ohne weiteres. Das kommt aber noch so alles der Reihe nach dran.


Jetzt kommen wir zum eigentlichen Kurs-Teil.

Du hast schon ein paar kleine Änderungen im Makro vorgenommen, wobei einige überflüssig sind. Dazu musst Du unbedingt und ganz DRINGEND dir den richtigen Umgang mit Variablen deklaration und defenition aneignen. Denn grad bei der Programmierung die mit Dialogen zu tun haben, ist das das "A & O", damit kann ein Projekt ganz schnell zu Fall gebracht werden. Und das Chaos ist schon vorprogrammiert.

Es gibt bei der Variablen deklaration 3 Hauptgruppen, die ganz "normalen", und dann noch die beiden anderen die Öffentlichen und Privaten.
Die normalen werden innerhalb einer Sub deklariert.
Die anderen beiden werden als aller erstes in einem Modul ganz, ganz, ganz weit oben deklariert, so wie sie in meiner Beispieldatei (und jetzt in deiner) zu sehen sind.

Code: Alles auswählen

	Public oHptDialog as Object	

	Public oDok as Object, oBlatt2 as Object, oQuartalsDatum as Object
	Public aQuartalsArray()
	Public dQuartalVon as Date, dQuartalBis as Date
	Public iQuartalsNr as Integer, iArrayTreffer as Integer
Erst wenn alle dementsprechend nötigen Variablen deklariert wurden, kommt die erste Sub, wie z.B. die *Sub Main*.
Und dadran darf nicht gerüttelt werden. Öffentliche und Private Variablen gehören genau da hin, wo Du sie siehst, und nicht innerhalb einer Sub. Das ist ein absolutes Tabu. schreib dir das hinter die Ohren!

Und wozu das ganze?
Und warum die eindringliche Warung?

Nun, die Öffentlichen Variablen werden einmal deklariert, und sind dann in allen Subs und allen Modulen verfügbar. Und wenn man dann in der ersten Sub die Variablen defeniert, braucht man das nicht mehr in anderen Subs noch mal zu machen.

Wie Du oben siehst ist z.B. die Variable

Code: Alles auswählen

oBlatt2 as Object
als öffentlich deklariert. Und in der *Sub Main* wird sie dann wie folgt defeniert.

Code: Alles auswählen

	oDok = ThisComponent
	oBlatt2 = oDok.Sheets.GetByName("Ausdruck")
Das heißt: ab diesem Zeitpunkt steht die Variable oBlatt2 in jeder weiteren Sub zur Verfügung.
Aber nicht nur der Variablennamen, nein auch das was da zugeordnet wurde. In diesem Falle:
oDok.Sheets.GetByName("Ausdruck")

Mit anderen Worten.
Selbst in der x-ten Sub braucht man nur noch beispielsweise folgendes einzugeben.

Code: Alles auswählen

oBlatt2.getCellRangeByName("C" & iAT).string =  aDatenArray(iAz2)(1)
Die schon einmal vorgenommene defenition, wie eben gezeigt, entfällt hier dann ganz einfach. Was du aber unwissender Weise getan hast.

Wenn Du nämlich das öfters macht, kann es durchaus passieren das Du dir ganz schnell einen bösen Fehler einhandelst. Denn wenn Du aus versehen das einmal vergessen hast, oder falsch gemacht hast, kann es vorkommen das die Variable zwei unterschiedliche Bezüge hat, was zu ernsthaften Problem führen kann.

Also erst Öffentlich deklarieren, dann in der ersten Sub definieren, und gut ist.
Und außerdem ersparst Du dir dadurch sehr viel geschreibse.

Um es dir noch auf eine andere Art zu verdeutlichen.

Stell dir mal vor, Du hast insgesamt 20 Subs. Das ist nix ungewöhnliches. Und in jeder sub definierst du die Variable neu. Und dann änderst Du den Tabellenblattnamen. Folglich musst du in 20 Subs überall den Namen ändern. Das kostet Zeit und Nerven. Und deshalb ist es ja so einfach und bequemer, wenn nur einmal eine Änderung vorgenommen werden muss die anschließend überall zur Verfügung steht.

Du kannst entweder in das schon von mir genannte PDF, oder aber schnell bei Dannenhöfer bezüglich Variablen reinschauen.
3. Variablen

Das bezog sich jetzt auf das recht simple Blätter ansprechen. Aber so richtig lustig wird das ganze dann, wenn diverse Elemente in einem Doalog dran kommen. Denn wenn Du falsch deklarierst, wunderst Du dich hinterher nur noch Schwarz warum das Element nicht funktioniert.

Das solls jetzt erstmal auf die schnelle gewesen sein.
Wir werden uns schon so langsam an die anderen Themen rantasten.



Gruß
balu

balu
Beiträge: 155
Registriert: Di 12. Okt 2010, 11:35

Re: Drucken "von Datum bis Datum" Makro

Beitrag von balu » So 3. Jun 2018, 19:11

Hallo Pretender,

nur damit es zu keinem Missverstännis kommt.
Wenn ich jetzt von Filtern rede, dann ist das ja auch ein Filtern, da ja ein Suchbereich nach bestimmten Kriterien durchsucht wird, und anschließend wird das Ergebniss wo anders ausgegeben.

Der Suchbereich ist von der Tabelle (Verfügungen) A6 - I68000
Die Nachbildung (Ausdruck) von A6 -I1000 (das reicht an Zeilen).
Bevor ich mich jetzt hier weiter reinkniee, habe ich noch zwei Fragen.
Wie lange hat Excel zum Filtern von diesem Suchbereich gebraucht?

Und sind die Datume in der Spalte I "verfügt am" aufsteigend?



Gruß
balu

Antworten