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

Löschen von Inhalten

Löschen von Inhalten
28.07.2014 09:34:59
Inhalten
Hallo Excel-Experten,
ich würde gern eine Ja-Nein-Abfrage per MsgBox über die gesamte Arbeitsmappe durchführen, dass, wenn Inhalte (innerhalb eines variablen Bereichs) gefunden werden, diese gelöscht werden. Heißt, der Bereich ist in jedem Arbeitsblatt gleich aufgebaut, nur die Zeilenanzahl kann variieren. Wenn egal auf welchem Arbeitsblatt ein Eintrag innerhalb dieses Bereiches gefunden wird, soll die MsgBox aufpoppen. Meine Lösung erhält immer den "Laufzeitfehler '13': Typen unverträglich" und markert mir das an dieser Stelle gelb an:
Sub ABC()
Dim WkSh As WorkSheet, Lz As Long
For Each WkSh In ThisWorkbook.Worksheets
Lz = WkSh.Cells(Rows.Count, "A").End(xlUp).Row
If WkSh.Range("B4" & ":AH" & Lz - 3).Value  "" Then
If MsgBox("In den Tabellen wurden Einträge gefunden." & Chr(13) & Chr(13) & _
"Sollen diese gelöscht werden?", vbYesNo & 32, "Einträge gefunden") = vbYes Then
With WkSh.Range("B4" & ":AH" & Lz - 3)
.ClearContents
.Interior.ColorIndex = xlNone
End With
End If
End If
Next WkSh
End Sub

Helft mir bitte auf die Sprünge ;)
Gruß Dominik

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

Betreff
Datum
Anwender
Anzeige
AW: Löschen von Inhalten
28.07.2014 09:48:09
Inhalten
Hallo,
die Value-Eigenschaft eines Bereiche gibt ein Array zurück. Ein Array kannst du nur Eintrag für Eintrag abfragen aber nicht mit "".
In dem Fall könntest du mit der WorksheetFunction.CountA abfragen ob diese 0 zurück gibt, dann ist der Bereich leer.
Gruß
Nepumuk

AW: Löschen von Inhalten
28.07.2014 15:24:29
Inhalten
Hallo Nepumuk,
danke für die Antwort, funktioniert jetzt :D
Hab das so realisiert:
Sub ABC()
Dim WkSh As WorkSheet, Lz As Long
For Each WkSh In ThisWorkbook.Worksheets
Lz = WkSh.Cells(Rows.Count, "A").End(xlUp).Row
Set Rn = WkSh.Range("B4" & ":AH" & Lz - 3)
If Application.WorksheetFunction.CountA(Rn) > 0 Then
If MsgBox("In den Tabellen wurde(n) " & Application.WorksheetFunction.CountA(Rn) & _
" Einträge gefunden." & Chr(13) & Chr(13) & "Sollen diese _
gelöscht werden?", 52, "Einträge gefunden") = vbYes Then
With Rn
.ClearContents
.Interior.ColorIndex = xlNone
End With
End If
End If
Set Rn = Nothing
Next WkSh
End Sub
Aber eine Frage noch, wie kann ich erreichen, dass statt einer MsgBox pro Sheet nur eine einzige MsgBox als Sammelmeldung kommt und bei positiver Antwort auch alle gleichzeitig formatiert?
Gruß Dominik

Anzeige
AW: Löschen von Inhalten
28.07.2014 16:07:58
Inhalten
Hallo,
Sub ABC()
Dim WkSh As Worksheet, Lz As Long, Rn As Range
Dim oRange As Object, oItem As Object, lCount As Long
Set oRange = CreateObject("Scripting.Dictionary")
For Each WkSh In ThisWorkbook.Worksheets
With WkSh
Lz = .Cells(Rows.Count, "A").End(xlUp).Row
Set Rn = .Range(.Cells(4, 2), .Cells(Lz - 3, 34))
End With
If Application.WorksheetFunction.CountA(Rn) > 0 Then
oRange(Rn) = 0
lCount = lCount + Application.WorksheetFunction.CountA(Rn)
End If
Set Rn = Nothing
Next
If oRange.Count Then
If MsgBox("In den Tabellen wurde(n) " & lCount & _
" Einträge gefunden." & Chr(13) & Chr(13) _
& "Sollen diese gelöscht werden?", 52, "Einträge gefunden") = vbYes Then
For Each oItem In oRange
With oItem
.ClearContents
.Interior.ColorIndex = xlNone
End With
Next oItem
End If
End If
End Sub

Gruß
Rudi

Anzeige
AW: Löschen von Inhalten
28.07.2014 17:58:37
Inhalten
Hi Rudi,
riesiges Dankeschön! Läuft einwandfrei, bin sehr zufrieden :D
Gruß Dominik

AW: Löschen von Inhalten
29.07.2014 11:59:07
Inhalten
Hallo nochmal,
ich hab noch eine Sache, von der ich nicht erwartet habe, dass es so große Probleme bereiten würde. Es geht darum, dass wenn im genannten Bereich eine Zelle farbig markiert wurde (von Hand), das diese ebenfalls gelöscht werden, auch wenn kein Inhalt existiert. Die Sache ist nämlich, das nicht immer Text in den Tabellenblättern steht. Ein weiterer Knackpunkt ist, das die Farbe egal ist, dadurch fehlt mir mit meinem Minimalisten-Wissen ein Farbindex (bei "(größer-zeichen) 0" liefert er mir etwas Falsches). Ich bekomme es jedenfalls nicht mal hin, das Makro für 1 Tabellenblatt zum laufen zu bekommen...
Gruß Dominik

Anzeige
AW: Löschen von Inhalten
29.07.2014 15:02:21
Inhalten
Hallo,
sind die Inhalte feste Werte (keine Formeln)?
        With oItem.Specialcells(xlCellTypeConstants)
.ClearContents
.Interior.ColorIndex = xlNone
End With

Gruß
Rudi

AW: Löschen von Inhalten
29.07.2014 16:29:59
Inhalten
Hi Rudi,
Danke für die Antwort, aber das hab ich nicht gemeint. Es ging mir darum, dass es unter Umständen im gesamten Bereich keinen Wert in einer Zelle gibt (weder Konstante noch Formel), aber einige Zellen farbig markiert wurden. Das wollte ich im selben Zug überprüfen und in der MsgBox mit anzeigen lassen. So in der Richtung:
Dim cell As Range, Rn As Range
Dim i As Integer
i = 0
For Each cell In Rn
If cell.Interior.ColorIndex > 0 Then i = i + 1
Next cell
If MsgBox("In den Tabellen wurde(n) " & lCount + i & " Einträge gefunden." _
& Chr(13) & Chr(13) & "Sollen diese unwiderruflich gelöscht werden?", _
52, "Einträge gefunden") = vbYes Then
With Rn
.Interior.ColorIndex = xlNone
End With
End if
Sowas in der Richtung für jedes Arbeitsblatt. Diese "(größer) 0"-Abfrage funktioniert übrigens auch nicht. Geht nur wenn ich einen festen Farbindex vorgebe.
Gruß Dominik

Anzeige
AW: Löschen von Inhalten
29.07.2014 17:12:39
Inhalten
Hallo,
If cell.Interior.ColorIndex xlNone Then
Gruß
Rudi

AW: Löschen von Inhalten
30.07.2014 11:40:17
Inhalten
Hallo Rudi,
für ein Tabellenblatt bekomm ichs jetzt hin, aber nur wenn ich die MsgBox nach der Abfrage "cell.Interior.ColorIndex xlNone" aufrufe. Dass die MsgBox nur aufpoppt WENN er was findet klappt nicht, zumindest nicht so:
Dim Farbe As Range
Dim n As Integer
n = 0
For Each Farbe In Rn
If Farbe.Interior.ColorIndex  xlNone Then n = n + 1
If MsgBox("In den Tabellen wurde(n) " & n & " Einträge gefunden." & _
Chr(13) & Chr(13) & "Sollen diese _gelöscht werden?", _
52, "Einträge gefunden") = vbYes Then
With Rn
.Interior.ColorIndex = xlNone
End With
End If
End If
Next Farbe

Ich bin außerdem überfragt wie ich diesen Code in den bestehenden einfügen kann, um wie gesagt Zellinhalt-Abfrage und Hintergrundfarbe-Abfrage in einer MsgBox zu kombinieren. Wenn ich im folgenden Code einfach per "Or" eine weitere Bedingung einfüge klappts jedenfalls nicht.
Set oRange = CreateObject("Scripting.Dictionary")
For Each WkSh In ThisWorkbook.Worksheets
With WkSh
Ez = 4
Lz = .Cells(Rows.Count, "A").End(xlUp).Row
Set Rn = .Range("B" & Ez & ":AH" & Lz - 3)
End With
If Application.WorksheetFunction.CountA(Rn) > 0 Then
oRange(Rn) = 0
lCount = lCount + Application.WorksheetFunction.CountA(Rn)
End If
Set Rn = Nothing
Next WkSh
If oRange.Count = 1 Then
If MsgBox("In den Tabellen wurde " & lCount & " Eintrag gefunden." & Chr(13) & Chr(13) & _
"Soll dieser unwiderruflich gelöscht werden?", 52, "Einträge gefunden") = vbYes
Then
For Each oItem In oRange
With oItem.Cells
.ClearContents
.Interior.ColorIndex = xlNone
End With
Next oItem
End If
ElseIf oRange.Count > 1 Then
If MsgBox("In den Tabellen wurden " & lCount & " Einträge gefunden." & Chr(13) & Chr(13) _
& "Sollen diese unwiderruflich gelöscht werden?", 52, "Einträge gefunden") _
= vbYes Then
For Each oItem In oRange
With oItem.Cells
.ClearContents
.Interior.ColorIndex = xlNone
End With
Next oItem
End If
End If

Und Danke nochmal für deine Hilfe
Gruß Dominik
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige