BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice 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 LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

VBA-Makro unter "Meine Makros" speichern [GELÖST]

Alles zur Programmierung im LibreOffice.
balu
Beiträge: 370
Registriert: Mi 1. Jun 2011, 16:21

Re: VBA-Makro unter "Meine Makros" speichern

Beitrag von balu » So 12. Aug 2018, 16:36

Hallo mikele,
danke für die Blumen ;)
Ehre wem Ehre gebührt.

Die CellFlags für .clearcontents kommen von hier: https://www.openoffice.org/api/docs/com ... Flags.html
Jaaaarrrrgggh! :oops:
Da kannste mal sehen. Bis jetzt hatte ich mich nur auf die Infos von Dannenhöfer verlassen, aber an die Api gar nicht mehr gedacht. Die Api ist aber auch keine wirkliche Freundin von mir, mag sie nicht sonderlich.

Und deshalb reiche ich dir hiermit virtuell (Gedanklich) noch mal ein paar Blümchen. Danke für die Aufklärung. :)



Gruß
balu

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: VBA-Makro unter "Meine Makros" speichern

Beitrag von Ich Bins » Mo 13. Aug 2018, 13:44

Hallo zusammen,

@mikele
auch von mir noch einenBild für Deine schweißtreibende Unterstützung.
@balu
Vielen Dank auch an Dich und keine Sorge, dass ich Dir Deine Kritik, Vorschläge und Anregungen krumm nehme, ganz im Gegenteil.
Vor allen bei der Variable "osheet" habe ich oft den Überblick verloren. Habe nun alle von Dir vorgeschlagenen Änderung eingefügt.
Bei den csv-Dateien handelt es sich übrigens um Umsatzdaten im MT920-Format aus dem Sparkassen-Onlinebanking.

Viele Grüße
Ich Bins

balu
Beiträge: 370
Registriert: Mi 1. Jun 2011, 16:21

Re: VBA-Makro unter "Meine Makros" speichern

Beitrag von balu » Mo 13. Aug 2018, 14:49

Tach auch.

@mikele
So, und nun ganz offiziel. Hier sind die Bild die ich versprochen hatte.

Ist wohl ein geklauter Link, aber hey, etwas Spaß darf ja sein.


@Ich Bins
Vor allen bei der Variable "osheet" habe ich oft den Überblick verloren.
Na siehste! Auch mit so einer kleinen nicht wirklich wichtigen funktionalen Funktion wie z.B. einer "For..next" kann man sich das Leben erleichtern. Freut mich das ich da helfen konnte.

Der bisherige Code ist ja noch sehr kurz und überschaubar, zumal ja nur ein Modul gebraucht wird. Aber wenn ein Code länger wird, und dann auch noch mehrere Module benötigt werden, dann muss man sich sehr vieles einfallen lassen, um nicht gänzlich den Überblick zu verlieren und sich dadurch Fehler oder sonstige Problem einzufangen. Und deshalb sind solch kleine Tipps und Tricks grad für "Anfänger" und Quereinsteiger von nutzen. Aber da lernt man dann selbst im Laufe der Zeit noch so einiges.

Hier noch ein Tipp der für Später mal sehr nützlich sein kann. Es geht dabei um die Varaiablendeklaration.

Ich hatte ja schon erwähnt, das man unterschiedliche Variablen mit unterschiedlichen Typen in ein und die gleiche Zeile unterbringen darf oder kann.
Jedoch kann es aber auch manchmal, je noch Umfang der Variablen, von Vorteil sein, wenn man sie Thematisch Gruppiert.
Hier mal ein kleines Beispiel aus meiner Praxis.

Code: Alles auswählen

'__Objekte: Blätter
	Dim oErstellSheet as Object, oStammSheet as Object, oTempSheet as Object
	
'__Objekte: Zellen, Zellbereiche
	Dim oFormelZelle as Object, oZellCheck as Object

'__Zahlen:
	Dim iFaPal as Integer, iPage As Integer
	Dim lBackFarbe as Long, lFontFarbe as Long, lHintergrundFarbe as Long
Natürlich ist diese Gestaltung der Thematischen Gruppierung nur ein Vorschlag, und kann deshalb individuell angepasst werden. Aber es dürfte wohl klar sein worauf ich hinaus will.



Gruß
balu

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: VBA-Makro unter "Meine Makros" speichern

Beitrag von Ich Bins » Mo 13. Aug 2018, 18:41

Hallo balu,

vielen Dank für die guten Ratschläge, die ich auch in Base verwenden kann, wenn ich mich da irgendwann mal ranwage. Ich habe vor einigen Jahren sehr viel mit VBA in Access realiesiert - mit tatkräftiger Unterstützung aus dem https://www.ms-office-forum.net/forum/f ... y.php?f=60.

Ich würde das Thema gerne auf [GELÖST] setzen aber eine Kleinigkeit hätte ich da noch.

Beim Ermitteln der letzten belegte Zeile

Code: Alles auswählen

'letzte Zeile des Bereichs	
varEinfuegezeile = ocursor.getRangeAddress.endRow + 2
geht etwas schief. Weil ich nicht direkt am Ende der großen Tabelle anfügen möchte, sondern eine Zeile darunter, hätte ich erwartet, dass ich eine Zeile hinzuaddieren muss, aber ich musste 3 hinzuaddieren. Nachdem ich das überarbeitete Makro von mikele nutze muss ich nur noch 2 hinzuaddieren ???

Viele Grüße
Ich Bins

balu
Beiträge: 370
Registriert: Mi 1. Jun 2011, 16:21

Re: VBA-Makro unter "Meine Makros" speichern

Beitrag von balu » Di 14. Aug 2018, 12:17

Mahlzeit Ich Bins,

dein letztes Problem kann man nicht so ohne weiteres nachstellen.

Was aber schon mal durchaus sein kann ist, das die letzte benutzte Zeile nicht immer die sichtbar letzte benutzte Zeile ist. Auch wenn es optisch danach ausieht als wäre es die letzte Zeile, so kann in einer Zeile darunter in irgendeiner Spalte sich ein Leerezeichen, oder etwas anderes unsichtbares, versteckt haben. Und folglich ist die letzte benutzte Zeile nicht die mit sichtbarem Inhalt, sondern die mit unsichtbarem Inhalt.

Ich gehe mal davon aus, das Du Windoof Betriebssystem hast, und die Standardtastenbelegung von LO nicht geändert hast.

Mach mal folgendes.
- Setze von Hand den Zellmarkierung auf A1. Anders ausgedrückt, klicke einmal ganz einfach auf die Zelle A1.
- Und nun drücke folgende Tastenkombination "Strg" & "Ende".
- Ist die Zeile wo jetzt die Zellmarkierung ist die letzte benutzte, also mit Inhalt, oder steht die Markierung dadrunter?

Unabhängig davon wäre es jetzt gut zu wissen, mit welcher Art von Zelladressieung Du weiter arbeitest.
Ist es die mit getCellRangeByPosition, beziehungsweise getCellByPosition?
Oder die mit getCellRangeByName?
Bei der erst genannten Variante(n) ist die Zelladressierung Nullbasierend, während bei der letzteren die Zählung mit 1 beginnt.

Arbeitest Du beispielsweise mit getCellRangeByName, egal ob für eine Zelle oder einen Zellbereich, und Du wertest das Rückgabeergebnis des Code-Abschnitts für die letzte benutzte Zeile dort drin aus, so musst Du das Rückgabeergebnis um den Faktor 1 erhöhen.
Also aus beispielsweise

Code: Alles auswählen

getCellRangeByName("J7")
müsstest Du das daraus machen

Code: Alles auswählen

getCellRangeByName("J8")


Gruß
balu

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: VBA-Makro unter "Meine Makros" speichern

Beitrag von Ich Bins » Di 14. Aug 2018, 18:15

Hallo balu,

ja, ich verwende Win7 und habe an der LO Tasenbelegung nicht verändert und "Strg" & "Ende" erkennt auch tatsächlich die letzte benutzte Zeile, eine Zeile mit sichtbaren Zeichen. Eine Zeile mit z.B. Leerzeichen ist am Ende nicht vorhanden. Das ist aber auch nicht das Problem. In meinem Fall wird die letzte belegte Zeile nicht mitgezählt. Verwende ich zu Ermitteln der letzten belegten Zeile das Beispiel von Dannenhöfer
http://www.starbasicfaq.de/Wiekannmandi ... palte.html wird auch die letzte Zeile nicht mitgezählt. Habs mit mehreren Tabellen getestet.

Erstelle eine neue Tabelle, tippe in Spalte A untereinander 1 2 3 und teste das Beispiel.

Code: Alles auswählen

Sub Zeile()
'Beispiel Dannenhöfer
oDoc = thisComponent
Sheets=odoc.sheets(i)
oCellCursor = Sheets.createCursor
oCellCursor.GotoEndOfUsedArea(False)
nRow = oCellCursor.getRangeAddress().endRow
msgbox nRow

'in meinem Makro verwendet
oKontoDoc = ThisComponent
oZiel = oKontoDoc.Sheets().getByName("Tabelle1")
ocursor = oZiel.createCursor()
ocursor.gotoEndofUsedArea(false)
varEinfuegezeile = ocursor.getRangeAddress.endRow
msgbox varEinfuegezeile
End Sub
Ich erhalte von beiden Varianten 2 zurück.
Hat das damit zu tun, dass beide Varianten nullbasierend arbeiten ?

Viele Grüße
Ich Bins

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: VBA-Makro unter "Meine Makros" speichern

Beitrag von mikele » Di 14. Aug 2018, 19:37

Hallo,
Hat das damit zu tun, dass beide Varianten nullbasierend arbeiten ?
Ja.
Zeilen- und Spaltennummer aus .getRangeAddress (und .getCellAddress) beginnen bei 0. So werden sie auch in .getCellRangeByPosition und .getCellByPosition verwendet (siehe Balu's Info). Die Zellbezeichnung z.B. "E3" basiert auf 1.
Wenn also

Code: Alles auswählen

oCellCursor.GotoEndOfUsedArea(False)
nRow = oCellCursor.getRangeAddress().endRow
den Wert 5 liefert, heißt das, dass die Zeile beginnend mit der Zelle A6 die letzte benutzte Zeile ist.
Gruß,
mikele

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: VBA-Makro unter "Meine Makros" speichern

Beitrag von Ich Bins » Fr 17. Aug 2018, 22:23

Hallo mikele,

somit wäre auch meine letzte Frage in dieser Unterhaltung beantwortet, vielen Dank !
Und nochmals vielen herzlichen Dank mikele für Deine großartige, wochenlange Hilfe, ohne die ich LO sicherlich wieder deinstalliert hätte.
Und dann wäre da noch zu guter Letzt, mein Dankeschön für die Hilfe von balu.

Viele Grüße
Ich Bins

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten