Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
476to480
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
476to480
476to480
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zeilen werden nicht gelöscht. Warum?

Zeilen werden nicht gelöscht. Warum?
30.08.2004 09:52:23
Ryu_Hoshi
Guten Morgen! :)
Ich habe einen Macro der u.a. z.B. alle Zeilen in einem workshett löschen soll wo das Jahr von "created date" nicht dieses Jahr ist. Ich habe schon einiges versucht aber es wird einfach nichts gelöscht. Weiss einer woran es liegt? Danke!
P.S. In Kommentaren stehen andere misglückte Versuche

Private Sub But_dieser_Jahr_Click()
Dim i As Long
Dim dtDatum As Date
Dim dtMonat As Integer
Dim dtJahr As Integer
Dim wksE As Excel.Worksheet
Dim xLastRow As Long
Set wksE = ThisWorkbook.Worksheets("excel")
xLastRow = wksE.UsedRange.SpecialCells(xlCellTypeLastCell).Row
dtJahr = 2004
'dtJahr = "2004"
'For i = wksE.Cells(xLastRow, 9) To 2 Step -1
'For i = wksE.Cells("I2") To wksE.Cells("I300")
For i = [I65536].End(xlUp).Row To 2 Step -1
'For i = 2 To 178
'dtDatum = Cells(i, 9)
dtDatum = wksE.Cells(i, 9)
'If Year(dtDatum) <> dtJahr Then
If Format(Year(dtDatum), "yyyy") <> dtJahr Then
'Rows(i, 9).Delete
Rows(i).Delete
End If
Next i
End Sub

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen werden nicht gelöscht. Warum?
30.08.2004 10:10:03
Basti
right(datum, 4) = 2004
so kann man das wohl probieren.
Steht das Datum immer in der gleich Zeile oder immer verschieden?
Wie viel Spalten/Zeilen hat die Tabelle?
Dann kann man dir leichter helfen
AW @ Bastis Beitrag
Ryu_hoshi
Hallo Basti. Das Datum was entscheident ist steht immer in der gleichen Spalte - der Spalte "I" im Format Date z.B. 17.08.04. DIe Tabelle hat 12 Spalten (A-L) und unterschiedlich viele Zeilen (Die Tabelle wird ständig aktualisiert) deswegen will ich das möglichst so machen das das für jede Tabellengrösse eignet, deswegen auch die Variable xLastRow. Was meintest du mit "right(datum, 4) = 2004" wo sollte ich das einfügen?
Anzeige
AW: Zeilen werden nicht gelöscht. Warum?
Boris
Hi,
der Hase liegt hier im Pfeffer:
Format(Year(dtDatum), "yyyy") dtJahr
Die Format-Funktion liefert dir einen String zurück - und den vergleichst du mit einem Integer-Wert (dtJahr). Das Ergebnis wird immer FALSCH sein.
Lass einfach Format weg:
If Year(dtDatum) dtJahr Then...
Grüße Boris
AW: Zeilen werden nicht gelöscht. Warum?
IngoG
Hallo,
ich nehme mal an, dass Du alle kombinationen deiner auskommentierten Varianten ausprobiert hast...
hast Du im Debugger mal den Wert von YEAR(dtDatum) ausgeben lassen? wenn nämlich stdatum ein String ist wirst Du an dieser stelle gegen die wand laufen.
ansonsten versuchs mal mit:
if Format(dtDatum, "yyyy") dtJahr then mit dtjahr="2004"
wenn das nicht zieht stellst Du am besten mal eine kleine Beipieldatei ins netzt...
Gruß Ingo
Anzeige
AW: Hier ist die Datei
30.08.2004 11:12:32
Basti
oki L is Spalte 12
dim i as integer
dim a as integer
i = 1
do while cells(i,12) "" 'es müssen alle zeilen gefüllt sein, auch oben am anfang, ansonsten i mit der start zeile.
if righ(cells(i,12),2) 04 then
for a = 1 to 12
cells(i,a) = ""
next a
i = i+1
loop
hab das nich ausprobiert, aber ich glaub, aber das mit der for schleife löschen geht net, da muss man ne andere funktion benutztn, aber ka welche, bin net so der excel experte
Anzeige
bei mir funzt es so:
IngoG
Hallo ?,
hatte ein bischen probleme mit irgendwelchen objekten, die mein rechner nicht kennt, deshalb:
habe mal dein Blatt "excel" und das macro in ein neues Blatt kopiert und die unten angeführten änderungen vorgenommen.
Damit läufts bei mir einwandfrei
Gruß Ingo

Private Sub But_dieser_Jahr_Monat_Click()
Dim i As Long
Dim dtDatum As Date
Dim dtMonat As Integer
Dim dtJahr As Integer
Dim wksE As Excel.Worksheet
Dim xLastRow As Long
Set wksE = ThisWorkbook.Worksheets("excel")
xLastRow = wksE.UsedRange.SpecialCells(xlCellTypeLastCell).Row
dtJahr = 2004
For i = wksE.[I65536].End(xlUp).Row To 2 Step -1
dtDatum = wksE.Cells(i, 9)
If Format(dtDatum, "yyyy") <> dtJahr Then
' hier year() rausnehmen, da ansonsten das Jahr von 2004 also dem 26.6.1905
' berechnet wird, und das ist 1905 ;-)
wksE.Rows(i).Delete   ' hier wksE vorsetzen, damit er im richtigen Blatt löscht
End If
Next i
End Sub

Anzeige
AW: @Ingo 'Klappt!
Ryu_Hoshi
Hi. Danke es klappt super!
Danke für die Rückmeldung oT
IngoG
.
@ingo gern geschehen! Wofür steht "oT"?
Ryu_Hoshi
WOfüR?
oT=ohne Text oT ;-)
IngoG
.
AW: Hier ist die Datei
Boris
Hi,
m.E. 2 Fehler.
Den ersten hab ich dir schon beschrieben. Der 2.:
Der Code steht im Klassenmodul der Tabelle "Analyse".
In dem Moment beziehen sich alle Zell-und Bereichsangaben auf das Blatt "Analyse" - es sei denn, es wird explizit ein anderes Blatt referenziert.
Ergo:
For i = [I65536].End(xlUp).Row To 2 Step -1
läuft ohne weitere Angabe durch Spalte I des Blattes "Analyse".
Gleiches gilt für
Rows(i).Delete
Somit setze überall "wksE" davor oder schreibe den Code in ein allgemeines Modul.
Grüße Boris
Anzeige
Nachtrag:
Boris
oder schreibe den Code in ein allgemeines Modul.
Natürlich muss auch dort zunächst mal das richtige Blatt referenziert werden - am Besten in einem With-Rahmen.
Grüße Boris
AW: Hier ist die Datei
WernerB.
Hallo RyuHoshi,
wie gefällt Dir das?

Private Sub But_dieser_Jahr_Monat_Click()
Dim wksE As Excel.Worksheet
Dim i As Long
Dim dtJahr As Integer
Application.ScreenUpdating = False
Set wksE = ThisWorkbook.Worksheets("excel")
dtJahr = 2004
With wksE
For i = .Cells(Rows.Count, 9).End(xlUp).Row To 2 Step -1
If Year(wksE.Cells(i, 9)) <> dtJahr Then
.Rows(i).Delete
End If
Next i
End With
Set wksE = Nothing
Application.ScreenUpdating = True
End Sub

Viel Erfolg wünscht
WernerB.
P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !
Anzeige
AW: Hier ist die Datei
Boris
Hi Werner,
wie gefällt Dir das?
Wahrscheinlich gefällt es ihm ausgezeichnet - denn du hast ihm ja die Arbeit abgenommen, die bereits erwähnten Fehler selbst in den Code einbauen zu müssen...
Dieses Forum lebt auch von den Rückmeldungen der Antworter an die Antworter ! ;-)
In diesem Sinne
Grüße Boris
@Boris
Ryu_Hoshi
Ja da hast du recht. Es gefällt mir prima. Ich weiss noch nicht ob ich den code von ingo oder von werner mitnehmen ich´muss sie erst beide vergleichen. mach ich mal nach der mittagspause. Danke schön an alle und Sorry falls ich was falsch gemacht habe. Ich lerne erst... Bin für Kritik immer offen
Anzeige
AW: @Ryu_Hoshi
Boris
Hi,
du hast doch gar nix falsch gemacht - insofern brauchst du dich nicht zu entschuldigen.
Stellt sich nur die Frage nach dem Lerneffekt.
Grüße Boris
: @Boris
Ryu_Hoshi
Ich habe schon häufiger hier geschrieben und und dachte ich nerve die Leute vielleicht.
Ich hatte auch mal kommenatere "crossposting". Ich hatte da in mehreren vba foren dieselbe frage gestellt =Grössere chance das mir geholfen wird. Ist so etwas verboten oder was hatte man (nighty) damit gemeint? Seitdem stelle ich die fragen nur noch in 2 foren. Was daraus lernen werde ich sicherlich. Da ich den code verstehe und so sehe wo der Fehler ist, lerne ich daraus. Dies muss ich dann umsetzten, da ich nicht nur den Zeitraum dieses Jahr untersuche, sondern letztes jahr, letzten monat, quartal usw. Es könnte bei quartal schwierig werden, mal schauen. Wenn ich mit dieser Aufgabe endlich fertig bin, juhu nach über 3 Wochen, dann möchte ich mal auch versuchen den anderen zu helfen, als kleines danke schön :)OK davor hatte ich nie was mit vba an Hut. Ich hab mal in der Schule delphi und java ein Jahr gemacht. Das hatte mir bei vba gut geholfen. Das ist dann wie einere andere SParache lernen. Man merkt die ähnlichkeiten, es ist einfacher da man eine vorstellung hat wie sowas laufen könnte und aknn durch ausprobieren einiges erreichen. Wenn man so sieht dann ahbe ich in diesen 3 Wochen sehr viel gelernt. Bin aber trotzdem noch ein Anfänger :)
Anzeige
AW: : @Boris
Boris
Hi Ryu_Hoshi,
nochmals: Das war keine Kritik an deiner Person.
Nur fehlt mir das Verständnis dafür, dass Lösungshinweise von anderen Antwortern mustergültig in einen Code gepackt werden, zumal du ja zu diesem Zeitpunkt auf die 2 Hinweise noch gar nicht reagiert hattest nach dem Motto: "Ich hab´s versucht - aber ich krieg´s nicht hin".
Und du schreibst es ja selbst:
...und kann durch ausprobieren einiges erreichen.
So - jetzt aber genug der Worte. ;-)
Grüße Boris
AW: @Werner
Ryu_Hoshi
Hi!
Danke es klappt prima, genau wie mit dem Code von Ingo, jetzt muss ich die eigentliche Analyse nach diesem Code hinzufügen. Ich war langsam schon am verzweifeln. Aber das war der leichtere Teil, mal schauen ob ich mit dem quartalsweise untersuchen hinkriege. Falls was melde ich mich schon wieder. Ihr Armen habt soviel zu tun in letzter Zeit wegen mir.
"P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter"&lt-------Ich bin davon ausgegangen dass es ersichtlich ist dass besher ausser deinem code und von ingo nichts ersichtlich ist. ich sage schon bescheid wenn problem gelöst ist ;) Sorry an alle! Ich gelobe Besserung :)
Anzeige
@Werner Wozu diese Zeile?
Ryu_Hoshi
Set wksE = Nothing
AW: @Werner Wozu diese Zeile?
WernerB.
Hallo Ryu_Hoshi,
wenn man eine Set-Anweisung erstellt, so sollte man diese auch wieder aufheben.
Genau dies geschieht mit der Anweisung "Set wksE = Nothing".
Gruß
WernerB.

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige