PDA

Vollständige Version anzeigen : Löschen von Zeilen


MHC2004
19.02.2008, 15:42
Hallo,

hab da doch gleich noch ein Problem.
Bekomme den Code...

For i = 50 To 1 Step -1
If Range("D" & i).Value = "" Then
Rows(i).Delete
End If
Next i

einfach nicht so geschrieben das er es auf alle geöffneten Worksheets anwendet.
Hab es so versucht:

For Each oWs In ThisWorkbook.Worksheets
For i = 50 To 1 Step -1
If Range("D" & i).Value = "" Then
Rows(i).Delete
End If
Next i
Next oWs

Angewand wird es immer nur beim ersten Worksheet.
Alle anderen bleiben unberühert, warum?

Was mach ich da falsch?

Grüße

jinx
19.02.2008, 15:48
<font size="2" face="Century Gothic">Moin, MHC2004,

der Bezug zu den anderen Tabellen fehlt - dann ist immer nur die aktive Tabelle betroffen...

For Each oWs In ThisWorkbook.Worksheets
For i = 50 To 1 Step -1
If oWs.Range("D" & i).Value = "" Then
oWs.Rows(i).Delete
End If
Next i
Next oWs</font>

MHC2004
19.02.2008, 15:54
Vielen Dank Jinx.
Mir ist kurz nachdem ich gepostet habe dies hier eingefallen:

For Each oWs In ThisWorkbook.Worksheets
With oWs
For i = 50 To 1 Step -1
If .Range("D" & i).Value = "" Then
.Rows(i).Delete
End If
Next i
End With
Next

Ist sicher umständlicher aber funktioniert.
Gibt es bei den beiden Varianten Unterschiede oder gehen nur beide?

jinx
19.02.2008, 16:00
<font size="2" face="Century Gothic">Moin, MHC2004,

bei Verwendung einer With-Anweisung wird nur ein Teil der Ansprache im Ablaufmodell durchlaufen, der per With festgelegte Teil bleibt erhalten (ein Startpunkt im Objekt, von dem aus operiert wird), im anderen Fall wird sich immer wieder vom Anfang aus zum Ziel durchgehangelt.

Von daher ist gerade bei größeren Ansprachen über Mappen und Tabellen die With-Variante (noch besser: das Setzen von Objekten) zu bervorzugen...</font>

MHC2004
19.02.2008, 16:12
Danke für die prompte Erklärung dazu.
:)


Grüße