Seite 1 von 1
Re: Suche Wert in Spalte, lösche Zeile
Verfasst: Mi, 06.02.2013 16:56
von Karolus
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??
Re: Suche Wert in Spalte, lösche Zeile
Verfasst: Mi, 06.02.2013 17:19
von Karolus
Hallo
finger12 hat geschrieben:Danke Karolus
Suche dennoch nach einem Makro, zwecks weiterführender Makros.
http://www.dannenhoefer.de/faqstarbasic/index.html
Karolus
Re: Suche Wert in Spalte, lösche Zeile
Verfasst: Do, 07.02.2013 17:25
von lorbass
finger12 hat geschrieben:Hab mir was zusammengeschuster was funktionert
Lässt du uns und zukünftige Leser an deiner Schuster-Lösung teilhaben?
Gruß
lorbass
Re: Suche Wert in Spalte, lösche Zeile
Verfasst: Fr, 08.02.2013 09:12
von juetho
Nur zwei kleine Anmerkungen.
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")
Der folgende Abschnitt ist in zweifacher Hinsicht "schlecht" definiert:
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
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):
Code: Alles auswählen
oSheet.Rows(x).isVisible = NOT oSheet.Rows(x).isVisible
Wenn ein logischer Wert "umgekehrt" werden soll, ist das immer das sinnvollste Verfahren.
Gruß Jürgen
Re: Suche Wert in Spalte, lösche Zeile
Verfasst: Fr, 08.02.2013 09:39
von bst
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
--
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
Verfasst: Fr, 08.02.2013 09:50
von Karolus
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:
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
Edit: Bernd war schneller