Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1584to1588
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

Zellen löschen in unterschiedlichen Tabs

Zellen löschen in unterschiedlichen Tabs
03.10.2017 12:53:28
Ben
Hallo zusammen,
ich habe ein Problem mit einem Makro, aber ich komme irgendwie nicht dahinter woran es liegt.
Das Ziel ist es in mehreren Tabs Werte in den letzten vier beschrifteten Spalten zu löschen, wenn es keine Zahlenwerte sind. Aber irgendwie klappt es nur in einem Tab. Bim Sprung ins zweite Tab, kommt folgender Fehler: "Laufzeitfehler 1004 - Anwendungs- oder objektdefinierter Fehler"
Der Code den ich benutze ist:

Sub Löschen()
Dim Blatt1 As Long
Dim Zeile1 As Long
Dim Spalte As Long
For Blatt1 = 1 To Sheets.Count
If Sheets(Blatt1).Name = "Cockpit" Or Sheets(Blatt1).Name = "ABC_Summary" Then
Else
For Zeile1 = 1 To Sheets(Blatt1).Cells(Rows.Count, "B").End(xlUp).Row
For Spalte = -3 To 0
If IsNumeric(Sheets(Blatt1).Cells(Zeile1 + 29, Columns.Count).End(xlToLeft).Offset(0, Spalte).  _
_
Value) = False Then
Sheets(Blatt1).Cells(Zeile1 + 29, Columns.Count).End(xlToLeft).Offset(0, Spalte).ClearContents
End If
Next Spalte
Next Zeile1
End If
Next Blatt1
End Sub

Die Schleife mit "Blatt1" habe ich schon in anderen Anwendungen so genutzt und da hat es einwandfrei funktioniert, deswegen stehe ich jetzt etwas auf dem Schlauch...
Vielen Dank schon einmal für die Hilfe!
beste Grüße
Ben

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen löschen in unterschiedlichen Tabs
03.10.2017 13:03:56
Hajo_Zi
Hallo Ben,
nur wenige schauen auf Deinen Rechner und sehen die Datei.
Ich möchte gerne den Fehler im Original sehen.
Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.
Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten anonymisieren bzw. pseudonymisieren.
Vielleicht
For Blatt1 = 1 To Worksheets.Count

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung. o.w.T."
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
Anzeige
diese Antworten-schrecklich !Hör endlich auf damit
03.10.2017 13:08:44
robert
Warum keine Antwort..
03.10.2017 13:14:56
Hajo_Zi
wenn Du die Datei siehst?
Gruß Hajo
...ist doch eine Antwort an Dich :-))
03.10.2017 13:38:25
robert
AW: Zellen löschen in unterschiedlichen Tabs
03.10.2017 13:44:53
Daniel
Hi
das Problem dürfte das "Zeile1 + 29" sein.
damit springst du ja 29 Zeilen weiter nach unten und landest u.U. in eine Zeile, die Leer ist.
in einer Leerzeile springt das End(xltoLeft) in die Spalte 1 und in der Spalte 1 kann kein .Offset(0, -3) mehr ausgeführt werden, weil du damit in einer Zelle landen würdest, die nicht vorhanden ist. (Negative Spaltennummern gibt es nicht)
damit deine Code funktioniert (wenn das überhaupt sinnvoll ist was du da machst) müsste die konstellation so sein:
- Spalte B ist bis Zeile 100 befüllt (beispielsweise)
- alle anderen Spalten müssen bis Zeile 129 befüllt sein.
Um dir zu helfen, müsste man wissen, warum du das "+29" überhaupt eingebaut hast.
weiter ist die Frage, ob es sinnvoll ist, die letzte befüllte Spalte in jeder Zeile neu zu ermitteln oder ob du diese nicht analog der letzen Zeile in einer fixen Spalte (Überschrift) ermittelst und diesen Wert dann in einer Variablen ablegst
Gruß Daniel
Anzeige
AW: Zellen löschen in unterschiedlichen Tabs
03.10.2017 14:39:51
Werner
Hallo Ben,
teste mal, ob das so passt.
Option Explicit
Public Sub Zahlen_löschen()
Dim loZeile As Long, loStartSpalte As Long, loEndSpalte As Long
Dim raBereich As Range, raZelle As Range
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case "Cockpit", "ABC_Summary"
Case Else
With ws
'Ermitteln der letzten Spalte in Zeile 1 (Überschriften?)
loEndSpalte = .Cells(1, .Columns.Count).End(xlToLeft).Column
'erste Spalte = letzte Spalte -3
loStartSpalte = loEndSpalte - 3
'Ermitteln der letzten Zeile in der letzten Spalte
loZeile = .Cells(.Rows.Count, loEndSpalte).End(xlUp).Row
'Bereich über die letzten 4 Spalten bis letzte Zeile definieren
Set raBereich = .Range(.Cells(1, loStartSpalte), .Cells(loZeile, loEndSpalte))
'Schleife über diesen Bereich
For Each raZelle In raBereich
If IsNumeric(raZelle) Then raZelle.ClearContents
Next raZelle
End With
End Select
Next ws
Set raBereich = Nothing
End Sub
Wenn nicht, wäre eine Beispielmappe mit ein paar Testdaten schön.
Gruß Werner
Anzeige
AW: Zellen löschen in unterschiedlichen Tabs
04.10.2017 23:02:17
Ben
Hey,
vielen herzlichen Dank an Werner und Daniel. Ihr habt mir wirklich sehr geholfen. Ich glaube das Problem war in der Tat wie von Daniel beschrieben, dass es in den Spalten "letzte Zeile +29" etwas löschen wollte, dass nicht mehr im Spaltenbereich von Excel lag (Es gibt keine negativen Spalten, ja :)). Die Formel von Werner hat mir ein paar Anpassungen gut funktioniert. Mir war nicht bekannt, dass man in VBA so einen Bereich definieren kann.
Nur zur Info, dass +29 habe ich eingefügt, weil ich das Excel erst ab Zeile 30 bearbeiten wollte. Was darüber steht ist eine Art Cockpit und sollte nicht verändert werden.
Vielen Dank und auf jeden Fall, ihr habt mir sehr geholfen.
Beste Grüße
Ben
Anzeige
AW: Zellen löschen in unterschiedlichen Tabs
04.10.2017 23:17:30
Daniel
dann wäre es aber sinnvoller die Schleife erst bei 30 anfangen zu lassen: For i = 30 to ...
dann brauchst du nichts hinzuzuaddieren.
Gruß Daniel
Gerne u. Danke für die Rückmeldung. o.w.T.
04.10.2017 23:22:46
Werner
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
08.10.2017 18:36:50
Ben
Hi Werner,
sorry dieses Thema nochmals aufzumachen.
Nachdem die Anwendung in meiner Beispieldatei bestens funktioniert hat, habe ich sie jetzt in das eigentliche File, in dem ich die Funktion ausführen will transferiert.
Allerdings bekomme ich hier bei der Zeile:
Set raBereich = .Range(.Cells(30, loStartSpalte), .Cells(loZeile, loEndSpalte))
Immer die Fehlermeldung: "Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler"
Ich kann mir das nicht ganz erklären, da die Datei genauso aufgebaut ist, wie meine Beispieldatei.
Hast du eine Idee woran es liegen könnte oder ist es schwierig zu sagen ohne die Datei selbst zu sehen?
VG
Ben
Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
09.10.2017 17:03:04
Werner
Hallo Ben,
ohne die Datei zu sehen eher schwierig bis nicht möglich was dazu zu sagen. Welche Werte haben denn die Variablen loStartSpalte, loEndSpalte und loZeile zu diesem Zeitpunkt.
Gruß Werner

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige