Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel hängt sich auf: Lösche wenn len(next) größer

Excel hängt sich auf: Lösche wenn len(next) größer
10.03.2016 09:53:30
Alex
Hallo zusammen,
in einer Gliederung kann ich Punkte löschen, wenn ein Punkt Untergliederungspunkte hat sollen diese auch automatisch gelöscht werden.
1.1
1.2 //gelöscht
1.2.1 //soll automatisch gelöscht werden
1.3
Hatte mir einen Code überlegt, der funktioniert auch, aber Excel hängt sich leider auf...Keine Ahnung warum
Über eine Listbox markiere ich mein zu löschendes Element (Spalte B),
Dann springe ich eine Spalte nach links, schaue die len(Ausgangszelle)in Spalte A an, dann soll er solange jede Zeile löschen, bis die nächste Zelle die gleiche Länge hat wie die ausgangszelle.

Public Auswahllistbox1 As String 'im Modul erstellt
Public Kategorie As Worksheet 'im Modul erstellt
Private Sub CommandButton2_Click() 'löschen
Dim rng As Range
Dim strfrage As String
Dim lngZeile As Long
Dim lngspalte As Long
Dim ausgangsZelle As String
Dim nächsteZelle As String
strfrage = " - wirklich entfernen?"
With ListBox1
If .Selected(.ListIndex) = True Then
If MsgBox( _
prompt:="Wollen Sie den Eintrag - " & Auswahllistbox1 & strfrage, _
Buttons:=vbYesNo + vbQuestion _
) = vbYes Then
Unload Me
Set rng = Sheets(Kategorie).Cells.Find(What:=Auswahllistbox1, after:=ActiveCell, LookIn:= _
xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
lngspalte = rng.Column                              'funktion
lngZeile = rng.Row                                  'funktion
lngsplate = lngspalte - 1                           'funktion
ausgangsZelle = Cells(lngZeile, lngspalte).Value    'funktion
Do                                                  'funktion
Cells(lngZeile, 1).EntireRow.Delete                 'funktion
lngezeile = lngZeile + 1                            'funktion
nächsteZelle = Cells(lngZeile, 2).Value             'funktion
Loop Until Len(ausgangsZelle) = Len(nächsteZelle)  'funktion
End If
End If
End With
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel hängt sich auf: Lösche wenn len(next) größer
10.03.2016 10:21:37
UweD
Ohne den Code komplett zu verstehen...
Zeilen löscht mal immer von unten nach oben ...Step-1
Vielleicht hilft das ja schon.
LG UweD

AW: Excel hängt sich auf
10.03.2016 11:21:02
Alex
Hey UweD,
normalerweise ja, aber ich muss Zelle mit nachfolgerZelle vergleichen, kann leider nicht von unten anfangen.
Gruß Alex

Alternative Löschmethode
10.03.2016 12:22:49
Daniel
Hi
ich steig jetzt bei deinem Code nicht durch, aber wenn du den Gliederungspunkt 1.2 mit all seinen Unterliederungspunkten löschen willst, dann könnte das so funktionieren, wenn die Gliederungspunkte als Festwert in den Zellen stehen:
With columns(2) '--- Spalte in welcher die Gliederungspunkte stehen
.replace Auswahllistbox1 & "*", True, xlwhole
.specialCells(xlcelltypeconstants, 4).entireRow.Delete
End with
der Code ersetzt zunächst alle Gliederungspunkte, die mit dem gewählten Text beginnen durch WAHR.
Dabei werden dann auch alle Unterpunkte durch WAHR ersetzt.
im zweiten Schritt werden dann alle Zellen, die einen Wahrheitswert enthalten, gelöscht.
Gruß Daniel

Anzeige
AW: Alternative Löschmethode
10.03.2016 13:22:11
Alex
Hey Daniel,
hab mal alles rausgeschmissen, was nicht relevant ist für den Code und kommentiert, deine Lösung funktioniert leider nicht:
Public Auswahllistbox1 As String 'im Modul erstellt
Public Kategorie As Worksheet 'im Modul erstellt
Private Sub CommandButton2_Click() 'löschen
Dim rng As Range
Dim strfrage As String
Dim lngZeile As Long
Dim lngspalte As Long
Dim ausgangsZelle As String
Dim nächsteZelle As String
With ListBox1
Set rng = Range("B2")
lngspalte = rng.Column                              'Funktion: Welche Spalte hat die Range
lngZeile = rng.Row                                  'Funktion: Welche Zeile hat die Range
lngspalte = lngspalte - 1                           'Funktion: Da "Auswahllistbox" Spalte B  _
ist, gehe zu Spalte A
ausgangsZelle = Cells(lngZeile, lngspalte).Value    'Funktion: Deine Startzelle, wo der Lö _
schvorgang startet
Do                                                  'funktion
Cells(lngZeile, 1).EntireRow.Delete                 'Funktion Lösche die Startzeile
lngezeile = lngZeile + 1                            'Funktion Gehe in die nächste Zeile
nächsteZelle = Cells(lngZeile, 1).Value             'Funktion Nächste Zelle = Inhalt
Loop Until Len(ausgangsZelle) = Len(nächsteZelle)  'Funktion Vergleiche Länge Ausganszelle  _
mit Nächsterzelle, wenn gleich lang, dann neuen Gliederungspunkt gefunden und fertig
End If
End If
End With
End Sub
Gruß und Danke!
Alex

Anzeige
AW: Alternative Löschmethode
10.03.2016 13:25:33
Alex
Hey,
oh mann... meine Lösung funktioniert, hatte 2 Flüchtigkeitsfehler drinne....
1. lngspalte flasch geschriben
2. nächsteZelle = Cells(lngZeile, 2).Value , muss natürlich nächsteZelle = Cells(lngZeile, 1).Value sein.
Danke euch trotzdem!
Gruß Alex

AW: Alternative Löschmethode
10.03.2016 13:27:47
Daniel
Hi
es wäre gut, wenn du eine Beispieldatei mit deinem Versuch, meinen Vorschlag umzusetzen hier hochladen würdest, dann könnte ich dir schon sagen, warum es nicht funktioniert.
Gruß Daniel

112 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige