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
Wie ermittelt man die letzte Zeile einer Tabelle
-
- Beiträge: 42
- Registriert: 06.11.2020 12:17:10
Re: Wie ermittelt man die letzte Zeile einer Tabelle
Gegenwärtig haben wir diesen Befehl in BasicMaker nicht, aber ich habe diese Funktionsanfrage an unser Entwicklungsteam weitergeleitet.
-
- Beiträge: 6
- Registriert: 13.11.2022 13:44:49
Re: Wie ermittelt man die letzte Zeile einer Tabelle
Ist da schon etwas passiert? Ich versuche es gerade hiermit:
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)
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
Re: Wie ermittelt man die letzte Zeile einer Tabelle
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.
Das Beispiel mit der "For-Next"Schleife geht natürlich auch, etwas eleganter wäre es mit einer "Do - Loop- Schleife".
Gerhard
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
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
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
-
- Beiträge: 6
- Registriert: 13.11.2022 13:44:49
Re: Wie ermittelt man die letzte Zeile einer Tabelle
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.
-
- Beiträge: 1
- Registriert: 08.03.2023 23:05:47
Re: Wie ermittelt man die letzte Zeile einer Tabelle
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
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