Suche Wert in Spalte, lösche Zeile
Moderator: Moderatoren
Re: Suche Wert in Spalte, lösche Zeile
Hallo
'Stosse' besser auf →Daten→Filter→Standardfilter:
SpalteA <> <trag hier den Inhalt aus C4 ein
mit [x]Ausgabe <in andere Tabelle.A1>
drück die OK-taste und entferne die Ausgangstabelle
____
Warum werden hier eigentlich ständig Übersetzunghelfer für VBA-krimskrams gesucht - obwohl die Aufgabenstellung in einer Minute mit den 'Bordmitteln' jeder Tabellenkalkulation lösbar ist??
'Stosse' besser auf →Daten→Filter→Standardfilter:
SpalteA <> <trag hier den Inhalt aus C4 ein
mit [x]Ausgabe <in andere Tabelle.A1>
drück die OK-taste und entferne die Ausgangstabelle
____
Warum werden hier eigentlich ständig Übersetzunghelfer für VBA-krimskrams gesucht - obwohl die Aufgabenstellung in einer Minute mit den 'Bordmitteln' jeder Tabellenkalkulation lösbar ist??
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Re: Suche Wert in Spalte, lösche Zeile
Hallo
Karolus
http://www.dannenhoefer.de/faqstarbasic/index.htmlfinger12 hat geschrieben:Danke Karolus
Suche dennoch nach einem Makro, zwecks weiterführender Makros.
Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Re: Suche Wert in Spalte, lösche Zeile
Lässt du uns und zukünftige Leser an deiner Schuster-Lösung teilhaben?finger12 hat geschrieben:Hab mir was zusammengeschuster was funktionert
Gruß
lorbass
Re: Suche Wert in Spalte, lösche Zeile
Nur zwei kleine Anmerkungen.
Elemente, die mehrfach verwendet werden, sollten als eigene Variable deklariert werden. Das gilt dafür:
Der folgende Abschnitt ist in zweifacher Hinsicht "schlecht" definiert:
Wenn ein logischer Wert "umgekehrt" werden soll, ist das immer das sinnvollste Verfahren.
Gruß Jürgen
Elemente, die mehrfach verwendet werden, sollten als eigene Variable deklariert werden. Das gilt dafür:
Code: Alles auswählen
DIM oSheet AS Object
oSheet = thisComponent.Sheets.GetByName("Offerten")
Statt "if = false" ist besser "if not" zu schreiben. Warum sollte ein logischer Wert erst noch verglichen werden, wenn sowieso dieser Wert genommen wird? Aber es geht sowieso einfacher und kürzer (unter Berücksichtigung der ersten Anmerkung):finger12 hat geschrieben:Code: Alles auswählen
If ThisComponent.Sheets.GetByName("Offerten").Rows(x).isVisible = False Then ThisComponent.Sheets.GetByName("Offerten").Rows(x).isVisible = True Else ThisComponent.Sheets.GetByName("Offerten").Rows(x).isVisible = False End if
Code: Alles auswählen
oSheet.Rows(x).isVisible = NOT oSheet.Rows(x).isVisible
Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: Suche Wert in Spalte, lösche Zeile
Auch Hallo,
löschen solltest Du M.E. von Unten nach Oben. Auch kannst Du Dir das Markieren via 'Visible' sparen.
Oder greifst Du da etwa auf zwei unterschiedliche Blätter zu??
cu, Bernd
--
löschen solltest Du M.E. von Unten nach Oben. Auch kannst Du Dir das Markieren via 'Visible' sparen.
Oder greifst Du da etwa auf zwei unterschiedliche Blätter zu??
cu, Bernd
--
Code: Alles auswählen
Option Explicit
Sub Main
dim oSheet, oUsedCells, iMax As Integer, i As Integer, sSearch as String
oSheet = ThisComponent.currentController.ActiveSheet
oUsedCells = oSheet.Columns(0).queryContentCells(23)
iMax = oUsedCells.RangeAddresses(oUsedCells.Count-1).endRow
sSearch = oSheet.getCellRangeByName("C4").String
for i = iMax To 0 Step -1
if oSheet.getCellByPosition(0,i).String = sSearch then
oSheet.getRows.removeByIndex(i,1)
endif
next
End Sub
Re: Suche Wert in Spalte, lösche Zeile
Hallo
Das ist ein gutes Beispiel wie man es nicht machen sollte
Zuerst definierst du das Tabellenblatt fix über den Index.
Dann blendest du zunächst nur die Zeilen aus für die deine Bedingung zutrifft
Jetzt beginnst du nochmal von vorne mit neuen Variablenzuweisungen ( völlig sinnfrei )
im Falle von ...ActiveSheet wechselst du uU. sogar das Tabellenblatt !!! ( →evtl. Datenverlust )
um danach nochmal über die Bedingung 'not Row.isvisible' die Zeilen tatsächlich zu löschen.
umständlicher gehts nicht
Überarbeitet:
Edit: Bernd war schneller
Das ist ein gutes Beispiel wie man es nicht machen sollte
Zuerst definierst du das Tabellenblatt fix über den Index.
Dann blendest du zunächst nur die Zeilen aus für die deine Bedingung zutrifft
Jetzt beginnst du nochmal von vorne mit neuen Variablenzuweisungen ( völlig sinnfrei )
im Falle von ...ActiveSheet wechselst du uU. sogar das Tabellenblatt !!! ( →evtl. Datenverlust )
um danach nochmal über die Bedingung 'not Row.isvisible' die Zeilen tatsächlich zu löschen.
umständlicher gehts nicht
Überarbeitet:
Code: Alles auswählen
Sub LOESCHEN
Dok = ThisComponent
sheet = Dok.CurrentSelection.Spreadsheet
startrow = 20
refstring = sheet.getCellByPosition(3,0).String 'inhalt aus D1
Cursor = sheet.createCursor()
Cursor.goToEndOfUsedArea(false)
endrow = Cursor.getRangeAddress().Endrow
if startrow >= endrow then exit sub 'Vermeidung einer Endlosschleife
For rowindex = endrow to startrow step -1 'rückwärts iterieren
If sheet.getCellByPosition(0, rowindex ).String = refstring then
sheet.rows.removeByIndex( rowindex, 1)
endif
next
msgbox ("Offerte - " & refString & " - wurde gelöscht")
end sub
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)