Seite 1 von 1

Erste leere Zeile in Spalte ausgeben

Verfasst: Mi 10. Apr 2024, 11:53
von Araneus
Moin, moin,
Ich bin neu hier im Forum und kenne mich mit den Regeln nicht gut aus. Ich bedanke mich aber bereits im voraus bei jedem, der mir auch nur ein Stück weiterhelfen kann. Ich reduziere mein Problem auf das absolut Notwendige:
Ich habe eine Calc-Tabelle, suche also eine Lösung für LO-Basic. Wie kann ich mir die erste leere Zeilennummer der Spalte A in der Variablen x ausgeben lassen. In VBA-Excel lautet die Anweisung so:
x = activesheet.cells(rows.count, 1).End(xlUp).row +1
Ich weiß, für Könner ist diese Aufgabe pippifax, aber ich scheitere daran. Nochmals vielen Dank für jede Hilfe.

Re: Erste leere Zeile in Spalte ausgeben

Verfasst: Mi 10. Apr 2024, 12:25
von karolus
Hallo
Schreib im Kopf des Moduls:

Code: Alles auswählen

Option VBASupport 1

Re: Erste leere Zeile in Spalte ausgeben

Verfasst: Do 11. Apr 2024, 09:11
von Araneus
Hab ich getan! Trotzdem abwechselnd Fehlermeldungen: Laufzeitfehler 12: activesheet, Laufzeitfehler 423: Sheets. Was ist in meinem Code falsch? Als Ergebnis müsste die MsgBox die Zeilen-Nr. ausgeben. P.S.:Ich benutze LibreOffice 6.4.7.2

Option Explicit
Option VBASupport 1
Sub LetzteZeilennummerErmitteln()
Dim doc as object
Dim sheet as object
Dim row as objekt
Dim cell as object
Dim lzei as Integer ' lzei = Letzte Zeile
Doc = ThisComponent
Sheet = Doc.Sheets(0) ’ 1.Tabellenblatt
lzei = activesheet.cells(rows.count, 1).End(xlUp).row +1
'MsgBox”Die letzte benutzte Zeile ist: ” & lzei
MsgBox lzei
MsgBox "Toll – funktioniert"
End Sub

Re: Erste leere Zeile in Spalte ausgeben

Verfasst: Do 11. Apr 2024, 11:02
von karolus
Hallo



Von deiner Beschreibung her würde ich vermuten, das zur Ausführungzeit etwas anderes als ein Calc-dokument im Focus ist… ??

ps. hat zwar mit der Fehlermeldung nichts zu tun, aber die beiden Zeilen:

Code: Alles auswählen

Doc = ThisComponent
Sheet = Doc.Sheets(0) ' 1.Tabellenblatt
sind komplett wirkungslos!!

Re: Erste leere Zeile in Spalte ausgeben

Verfasst: Sa 13. Apr 2024, 00:45
von nitja
Araneus hat geschrieben:
Mi 10. Apr 2024, 11:53
… für jede Hilfe … [die] … mir auch nur ein Stück weiterhelfen kann.
Klingt danach, dass Du wirklich in einer Klemme steckst. (… und ich weiß, wie sich das anfühlt)
Und da es hier nicht wirklich weiter zu gehen scheint, mag ich versuchen Dir da 'raus zu helfen, obwohl ich Excel & VBA seit gut 20 kaum und seit 15 Jahren überhaupt nicht mehr angefasst habe.

Deshalb kann ich auch nicht im Detail nachvollziehen, was das
Araneus hat geschrieben:
Mi 10. Apr 2024, 11:53
x = activesheet.cells(rows.count, 1).End(xlUp).row +1
tatsächlich bewerkstelligt.

Geht es wirklich um "die erste leere Zeile"? … bzw., was ist das?
… die erste (also mit der niedrigsten Zeilennummer) leere Zelle "in Spalte"?
… oder die letzte (also mit der höchsten Zeilennummer), die nicht leer ist?
Das macht einen entscheidenden Unterschied, wenn in der Kolonne gefüllter Zellen zwischendurch auch mal eine leer sein kann. Oder ist das ausgeschlossen?
Araneus hat geschrieben:
Mi 10. Apr 2024, 11:53
… Zeilennummer der Spalte A in der Variablen x …
Konkret "Spalte A" oder irgendeine zu wählende?
Und braucht's dafür ein Makro, oder könnte das "x" auch in irgendeiner unbeteiligten Zelle als Ergebnis einer Formel erscheinen?
Araneus hat geschrieben:
Mi 10. Apr 2024, 11:53
… x = activesheet. …
Meinst Du die Tabelle, die aktuell den Focus hat, oder (wie im späteren post) die erste Tabelle im "Dokument" (der .ods-Datei)?
Beides (leicht) möglich, aber eben unterschiedlich.

Re: Erste leere Zeile in Spalte ausgeben

Verfasst: Mo 15. Apr 2024, 11:15
von Araneus
Moin, moin nitja,
die Codezeile habe ich von VBA übernommen, wo sie auch funtzt. ich brauche den Algorithmus jedoch für LibreOffice Basic, und da funktioniert sie eben nicht, obwohl ich über meiner Prozedur Option VBASupport 1 gestellt habe. Ich benötige den Zeilenindex der 1. freien Zelle oder Zeile unter meinen Einträgen in Spalte A. Ich habe nur Spalte A. In dieser habe ich (als Beispiel) 3 Einträge, von Zeile A bis C. Als Ergebnis des Algorithmus müsse ich den Zeilenindex 3 erhalten, denn das ist die erste leere Zeile in Spalte A. Mir würde auch ein Algorithmus weiterhelfen, der mir die letzte benutzte Zelle/Zeile in Spalte A zurückgibt - dann würde ich einfach 1 dazu zählen (x = x+1). Bis hierhin vielen Dank für deine Hilfe!!!

Nummer der ersten leeren Zeile unter einem gefüllten Bereich ermitteln

Verfasst: Mo 15. Apr 2024, 14:15
von nitja
Araneus hat geschrieben:
Mo 15. Apr 2024, 11:15
… die Codezeile habe ich von VBA übernommen, wo sie auch funtzt. ¹⁾
… obwohl ich über meiner Prozedur Option VBASupport 1 gestellt habe. ²⁾
… den Zeilenindex der 1. freien Zelle … unter meinen Einträgen … aha, also nix "Leere Zeile" - Zeilennummer
Ich habe nur Spalte A. Was die Unterscheidung hier drüber unnötig macht, nachdem das geklärt ist
¹) Hatte ich schon geschrieben, dass mir das nix nutzt?
²) Die Kompatibilität, die mit LOs VBA-Support zu erreichen ist, beschränkt sich auf Syntax und vordefinierte Konstanten der Sprache an sich.
Sie bedeutet nicht, dass das Objektmodell von LOs "Dokumenten", das dem von M$-Office deutlich überlegen ist, auf letzteres umgestellt würde und aus LO einen M$O-Clone machen würde.
·
24·04·15 LetzteZeilennummerErmitteln für 'Araneus'.ods
(11.89 KiB) 126-mal heruntergeladen
·
Mein Beispiel würde auch mit (mehreren|vielen|sehr vielen) Spalten funktionieren. Nur wenn in dem gefüllten Bereich größere überlappende leere Lücken wären, bräuchte es weitere Vorkehrungen.

Re: Erste leere Zeile in Spalte ausgeben

Verfasst: Mo 15. Apr 2024, 17:14
von mikele
Hallo,

Code: Alles auswählen

Option VBASupport 1
Sub LetzteZeilennummerErmitteln()
Dim doc as object
Dim sheet as object
Dim row as objekt
Dim cell as object
Dim lzei as Integer ' lzei = Letzte Zeile
lzei = activesheet.cells(rows.count, 1).End(xlUp).row +1
'MsgBox”Die letzte benutzte Zeile ist: ” & lzei
MsgBox lzei
MsgBox "Toll – funktioniert"
End Sub
funktioniert bei mir. (LO7.0.4)

Re: Erste leere Zeile in Spalte ausgeben

Verfasst: Mo 15. Apr 2024, 19:26
von mikele
Hallo,
wenn es darum geht die erste Zelle nach der letzte benutzten Zelle in Spalte A zu finden (wenn zwischendurch auch ein paar Lücken sind) in StarBasic

Code: Alles auswählen

	'Zugriff auf die 1. Tabelle
	oSheet=ThisComponent.Sheets(0)
	'Zugriff auf die 1. Spalte
	oSpalte=oSheet.Columns(0)
	'finden der Adressbereiche mit leeren Zellen
	aLeer=oSpalte.queryEmptyCells.RangeAddresses
	'erste Zeile des letzten Bereiches mit leeren Zellen
	n=aLeer(uBound(aLeer)).StartRow
oder als Zweizeiler komprimiert in Python

Code: Alles auswählen

def erste_freie_zeile():
    oDoc = XSCRIPTCONTEXT.getDocument()
    n = oDoc.Sheets[0].Columns[0].queryEmptyCells().RangeAddresses[-1].StartRow
Einen klitzekleinen Schönheitsfehler hat die Variante: sie geht schief, wenn die allerletzten Zeile (A1048576) nicht leer ist und liefert einen Fehler, wenn keine leere Zellen da sind.

Re: Erste leere Zeile in Spalte ausgeben

Verfasst: Do 18. Apr 2024, 09:55
von Araneus
Moin, moin mikele,
Juchuuuuuuuuuuuuu! Dein Code hat mir weitergeholfen. Mein Code ist vielleicht etwas dilettantisch und holperig - aber er funktioniert, und das ist die Hauptsache. Mein Code ermittelt die letzte belegte Zelle/Zeile in einer Spalte und übergibt den Wert an die Variable lz. Zu der muss ich jetzt nur noch den Wert 1 hinzuaddieren (lz = lz +1), und so kann ich auf die erste freie Zelle/Zeile zugreifen:
...
Dim doc as Object
Dim zeile as Object
Dim leer as Object
Dim lz as Object
doc = ThisComponent.sheets(0)
zeile = doc.Columns(0)
' leere Bereiche finden:
leer =zeile.queryemptycells
lz = leer(leer.count -1)
' Letzte belegte Zeile/Zelle:
msgbox "Die letzte belegte Zeile ist " & lz.rangeaddress.startrow -1
End Sub
Allen, die versucht haben, einem Greenhorn weiterzuhelfen, herzlichen Dank für eure Mühe und Geduld. Ihr kommt in den Himmel! Da ich hier neu bin im Forum, weiß ich nicht, wie man mein Problem als [gelöst] kennzeichnet, aber vielleicht kann dies jemand für mich machen. Danke!