Wie ermittelt man die letzte Zeile einer Tabelle

Antworten
knatterfux
Beiträge: 42
Registriert: 06.11.2020 12:17:10

Wie ermittelt man die letzte Zeile einer Tabelle

Beitrag von knatterfux »

Hallo,

wie ermittelt man die letzte Zeile einer Tabelle (mit Inhalt), um z.B. Zeilen mit bestimmten Inhalten zu löschen?
In VBA lautet der Befehl: lz = Cells(Rows.Count, 1).End(xlUp).Rows.Row

Beispiel:
lz = Cells(Rows.Count, 1).End(xlUp).Rows.Row
For t = lz To 2 Step -1 'Zählung rückwärts bis Zeile 2
If Cells(t, 2).Value = "Fehler" Then
Rows(t).Delete Shift:=xlUp
End If

"xlUp" kommt im Handbuch überhaupt nicht vor.

Gruß
Knatterfux
SuperTech
SoftMaker Team
SoftMaker Team
Beiträge: 3314
Registriert: 11.03.2020 17:30:08

Re: Wie ermittelt man die letzte Zeile einer Tabelle

Beitrag von SuperTech »

Gegenwärtig haben wir diesen Befehl in BasicMaker nicht, aber ich habe diese Funktionsanfrage an unser Entwicklungsteam weitergeleitet.
heiko12345
Beiträge: 6
Registriert: 13.11.2022 13:44:49

Re: Wie ermittelt man die letzte Zeile einer Tabelle

Beitrag von heiko12345 »

Ist da schon etwas passiert? Ich versuche es gerade hiermit:

Code: Alles auswählen

Sub main
 Dim i,c As Integer

Dim pm as Object
Set pm = CreateObject("PlanMaker.Application")
pm.Application.Visible = True
For i = 1 To pm.Application.Workbooks.Count
MsgBox pm.Application.Workbooks.Item(i).Name
Next i
'MsgBox (pm.Workbooks(1).Sheets(1).Cells.Item(246,2).Value)

For i = 5 To pm.Workbooks(1).Sheets(1).Rows.Count
    If pm.Workbooks(1).Sheets(1).Cells.Item(i,1).Value="" then exit for
Next i

'Diese Ausgabe ist meine Alternative zur Ermittlung der Zeilen in der Tabelle
MsgBox (i)

'weil dieser Rückwert 1048576 ergibt. Es sind aber nur 335 Zeilen
MsgBox pm.ActiveSheet.Rows.Count

'Auch hier ist der ermittelte Wert immer 1048576, egal welche Tabelle ich angebe
Msgbox (pm.Workbooks(1).Sheets(1).Rows.Count)

'Das hier geht nicht - warum?
MsgBox pm.Tables.Item(1).Rows.Count

End Sub 
Nur die selbst geschriebene Schleife bringt das Ergebnis bringt, dass ich brauche. i= 335 Zeilen. Wieso sind die anderen Rückgabewerte so hoch? pm.ActiveSheet.Rows.Count sollte doch nur die Zeilenanzahl anzeigen, die in der Tabelle geschrieben wurden, oder verstehe ich da etwas falsch? (Siehe Kommentierung im Code)
Benutzeravatar
Get
Beiträge: 231
Registriert: 08.12.2014 13:39:39
Kontaktdaten:

Re: Wie ermittelt man die letzte Zeile einer Tabelle

Beitrag von Get »

Hallo Heiko,
ist im ActiveSheet kein Bereich defiert, liefer Rows.Count immer die Anzahl der maximal möglichen Zeilen. Einw tasächlich im ActiSheet bearbeitete Tabelle muss als "Range" definert sein. Zwei Beispiele in folgendem Skriptfragment: Für das Selection-Objekt markeirt man die Tabelle mit der Maus, oder man definert im Skript den Bereich vom Links oben bis rechts unten.

Code: Alles auswählen

Sub Zeilenzahl
	Dim pm As Object
	Set pm = CreateObject("PlanMaker.Application")
	pm.Application.Visible = True

	Dim zeilen As Integer

'  Zeilenzahl der markierten Tabelle
	zeilen = pm.ActiveSheet.Selection.Rows.Count

'  oder
' 	die Tabelle als Range definieren, z. B. von A1 bis B20:
'	zeilen = pm.Application.ActiveSheet.Range("A1:B20").Rows.Count
'       müsste "zeilen = 20" ergeben

	MsgBox (zeilen)

	Set pm = Nothing
End Sub
Das Beispiel mit der "For-Next"Schleife geht natürlich auch, etwas eleganter wäre es mit einer "Do - Loop- Schleife".
Gerhard
Gerhard Etzel
Autor (gerhard-etzel-buch.de). Meine Bücher wurden alle mit Textmaker geschrieben!
Windows 10, SMO NX Universal 64 Bit Prof.
Intel(R) Core(TM) i5, 16 GB Ram
heiko12345
Beiträge: 6
Registriert: 13.11.2022 13:44:49

Re: Wie ermittelt man die letzte Zeile einer Tabelle

Beitrag von heiko12345 »

Do ... loop ist besser. Stimmt, schreibe ich um, aber schade ist, dass bei variabler Zeilenanzahl das Range immer angepasst werden muss. Daher verwende ich künftig Do ... loop plus Abfrage ... muss aber immer darauf achten, dass die jeweilige Spalte (die runter gelesen wird) keine Leerzelle hat. :D
netzroller
Beiträge: 1
Registriert: 08.03.2023 23:05:47

Re: Wie ermittelt man die letzte Zeile einer Tabelle

Beitrag von netzroller »

versuche es mal hiermit:

Sub Zeilenzahl ()
Dim pm As Object
Set pm = CreateObject("PlanMaker.Application")
pm.Application.Visible = True

Dim zeilen As Integer

SendKeys "^{Home}", True
SendKeys "^+{End}", True

' Zeilenzahl der markierten Tabelle
zeilen = pm.ActiveSheet.Selection.Rows.Count

SendKeys "^{End}", True
SendKeys "{Home}", True

' so nicht!
' die Tabelle als Range definieren, z. B. von A1 bis B20:
' zeilen = pm.Application.ActiveSheet.Range("A1580:I1590").Rows.Count
' müsste "zeilen = 11" ergeben

MsgBox (zeilen+1)


Set pm = Nothing
End Sub
Antworten

Zurück zu „BasicMaker 2021 für Windows“