Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1028to1032
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

Code löscht alles, wenn nur noch weniger als 180

Code löscht alles, wenn nur noch weniger als 180
07.12.2008 12:42:00
Wolfgang
Hallo,
beim Testen stolpere ich darüber, dass der untenstehende Code, wenn sich in Spalte Q keine Zahlen höher als 180 mehr befinden, alles umkopiert bzw. löscht. Wie lässt sich das evtl. abfangen, damit die Zeilen mit 180 und darunter auch stehen bleiben? - Danke schon jetzt für die Rückmeldungen.
Gruß - Wolfgang
Option Explicit

Sub FilternUndKopieren()
Application.ScreenUpdating = False
Sheets("Grunddaten").CheckBox1 = 0
With Sheets("Grunddaten")
.Unprotect
.Range("A1").Autofilter Field:=17, Criteria1:=">180"
Intersect(.Columns("A:R"), .Range(.Rows(2), .Rows(.Range("a1").CurrentRegion.Rows.Count))).  _
_
Copy
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormats
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
.Range(.Rows(2), .Rows(.Range("a1").CurrentRegion.Rows.Count)).EntireRow.Delete shift:=xlUp
.Range("A1").Autofilter
.AutoFilterMode = False
.Application.CutCopyMode = False
End With
'löscht in Grunddaten und Altdaten die Leerzeilen
On Error Resume Next
Sheets("Grunddaten").UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Sheets("Altdaten").UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
Sheets("Grunddaten").CheckBox1 = 1
Application.ScreenUpdating = True
End Sub


9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 14:31:34
ChrisL
hallo Wolfgang

Sub beispiel()
If WorksheetFunction.Max(Columns(17)) > 180 Then
' Dein Makro
End If
End Sub


Gruss
Chris

AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:01:00
Wolfgang
Hallo Chris,
irgendwie funktioniert das nicht; Wenn ich das im beigefügtem Code entsprechend anpasse, löscht der Code auch Zeilen mit 180 und mehr ebenfalls nicht mehr. Hättest Du evtl. noch eine Idee? - Danke schon jetzt wieder für die Rückmeldung.
Gruß - Wolfgang
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:10:00
Gerd
Hallo Wolfgang,
in welchem Blatt u. mit welcher Codezeile wird zuviel gelöscht?
Lasse mal ScreenUpdating weg u. teste mit der F8-Taste im Einzelschrittmodus um dies festzustellen.
Gruß Gerd
Anzeige
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:22:00
Wolfgang
Hallo Gerd,
Danke zunächst für die Rückmeldung; habe es so vorgenommen, wie Du beschrieben hast. Die Zeilen verschwinden ab Intersect Columns.....(läßt sich hier auszugsweise wohl leider nicht hineinkopieren - da meckert die Seite wegen HTML-Format) dann vollständig im Blatt "Grunddaten".
Solange also noch in Spalte Q eine Zahl mit höher 180 steht, läuft das alles prima. Nur bewegen sich die Zahlen auf 180 und weniger, ist alles weg. Danke schon jetzt wieder für Deine Rückmeldung.
Gruß - Wolfgang
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:11:39
Luschi
Hallo Wolgang,
mit der folgenden Funktion kann man feststellen, wieviele Zeilen durch den Autofilter sichtbar
sind:

Function anzahlFilterZeilen() As Long
Dim myFilterRows() As String, n1 As Long, n2 As Long
If ActiveSheet.FilterMode Then
myFilterRows = Split(ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible). _
Address, ",", -1, vbTextCompare)
n2 = -1
For n1 = LBound(myFilterRows) To UBound(myFilterRows)
n2 = n2 + Range(myFilterRows(n1)).Rows.Count
Next n1
anzahlFilterZeilen = n2
Else
'kein Filter gesetzt bzw. keine Werte gefiltert
anzahlFilterZeilen = -1
End If
End Function

und so kannst Du sie verwenden:
.Range("A1").Autofilter Field:=17, Criteria1:=">180"
If anzahlFilterZeilen > 0 Then
   'jetzt der Kopierbefehl
Else
   Msgbox "Keine Daten gefunden mit der Filterbedingung ..."
End If
Gruß von Luschi
aus klein-Paris
PS: Die von Chris aufgezeigte Lösung geht ins Leere, wenn in der Spalte 'Q' außerhalb des Filterbereiches
    Werte >180 stehen.

Anzeige
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:59:43
Wolfgang
Hallo Luschi,
auch Dir herzlichen Dank für die Rückmeldung; Ich habe Deinen Code eingebaut. Komisch ist, dass das über Schaltfläche nicht funktioniert, so dass der Code dann auch die Datensätze mit mehr als Zahl 180 ignoriert und nicht kopiert bzw. löscht; Nehme ich das ganz mit F8 schrittweise vor, funktioniert das sinnigerweise, mehr als 180 wird gelöscht, darunter bleibt stehen. Ich kann aber dabei noch nicht sagen, an welcher Stelle das nun weiter scheitert. Werde noch weiter testen und mich dann wieder melden.
Danke und Gruß
Wolfgang
Danke Luschi !
07.12.2008 16:14:00
Wolfgang
Hallo Luschi,
ich habe soeben vom Gerd einen Code erhalten, der einwandfrei läuft. Danken möchte ich Dir aber an dieser Stelle für Deine schnelle Rückmeldung und Deine Ausarbeitungen. Worin bei mir auch immer der Fehler noch liegt, warum der Code nicht so ganz rund läuft (?). Ich hoffe, Du bist mir nicht böse, dass ich den Code von Gerd verwende.
Herzliche Grüße
Wolfgang
Anzeige
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:58:00
Gerd
Hallo Wolfgang,
-wenn deine Analyse stimmt
-in Grunddaten,Spalte A des sichtbaren Filterbereichs (bei Zeilen mit >=180) Werte stehen
-unter dem gesamten Filterbereich in in Grunddaten Spalte A keine Werte/Formeln stehen
dann vielleicht so:

Sub FilternUndKopieren2()
Application.ScreenUpdating = False
With Sheets("Grunddaten")
.CheckBox1 = 0
.Unprotect
.Range("A1").AutoFilter Field:=17, Criteria1:=">180"
End With
With Sheets("Grunddaten")
If .Cells(.Rows.Count, 1).End(xlUp).Row > 1 Then 'xxxxxxx
Intersect(.Columns("A:R"), .Range(.Rows(2), .Rows(.Range("a1").CurrentRegion.Rows.Count))). _
Copy
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormats
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
.Range(.Rows(2), .Rows(.Range("a1").CurrentRegion.Rows.Count)).EntireRow.Delete shift:=xlUp
End If 'xxxxxxx
.Range("A1").AutoFilter
.AutoFilterMode = False
End With
Application.CutCopyMode = False
'löscht in Grunddaten und Altdaten die Leerzeilen
On Error Resume Next
Sheets("Grunddaten").UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Sheets("Altdaten").UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
Sheets("Grunddaten").CheckBox1 = 1
Application.ScreenUpdating = True
End Sub


Gruß Gerd

Anzeige
Danke Gerd, das ist es !
07.12.2008 16:10:08
Wolfgang
Hallo Gerd,
habe sofort Deinen Code eingebaut; er läuft wunderbar. Mehr als 180 wird umkopiert und gelöscht, darunter bleibt stehen. Super ! - Danke Dir recht herzlich dafür. Einen schönen Sonntag noch und nochmals allerherzlichen Dank.
Gruß - Wolfgang

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige