Ich versuche, ein Arbeitsblatt, das wir täglich verwenden, neu zu erstellen und dabei schneller zu machen. Ich habe jetzt mit Bereichen gearbeitet und versucht, diese zu integrieren, aber lief ein Problem, wenn ich versuche, UsedRange
zu verwenden, um die letzte Zeile für den Bereich zu erhalten, als es zu finden.Typenkonflikt im Bereich für Schleife
Mein Code:
Sub RebuildAllFormat()
Dim SheetRNG As Range, RowDelete As Range, SOSheet As Worksheet
Set SOSheet = ThisWorkbook.Worksheets(Sheet1.Name)
Set SheetRNG = SOSheet.UsedRange.Columns(1)
For Each cell In SheetRNG
If cell.Value = "" Then
Cells(cell.Row, "P").Cut Cells(cell.Row - 1, "P")
If Not RowDelete Is Nothing Then
Set RowDelete = Union(RowDelete, cell)
Else
Set RowDelete = cell
End If
End If
Next cell
RowDelete.EntireRow.Delete
End Sub
Der obige Code gibt mir die „Type Mismatch“ Fehler auf If cell.Value = "" Then
und es scheint, dass die For-Schleife nicht mehr jede Zelle durchläuft, obwohl ich den Erwartungswert von Debug.Print SheetRNG.Address
erhalten die ist $ A $ 1: $ A $ 1736.
Wenn ich Set SheetRNG = SOSheet.UsedRange.Columns(1)
mit
lastrow = SOSheet.Cells(Rows.Count, "B").End(xlUp).Row
Set SheetRNG = SOSheet.Range(SOSheet.Range("A1"), SOSheet.Cells(lastrow, "A"))
ersetzen dann arbeitet die Schleife wie erwartet und ich bin in der Lage Werte zu überprüfen. Running Debug.Print SheetRNG.Address
nach der Verwendung der oben genannten gibt auch $ A $ 1: $ A $ 1736.
Fehle ich etwas in der UsedRange
-Code oder ist es nicht möglich, es so zu verwenden?
Ihr Kommentar „Der obige Code gibt mir die‚Type Mismatch‘Fehler auf Wenn cell.Value =‚‘Then und es scheint, dass die For-Schleife nicht mehr jede Zelle durchläuft“ verwirrt mich - Woher weißt du, dass es nicht mehr durch jede Zelle läuft, wenn die erste Zeile einen Fehler gibt? Oder ist es ein Fall der Linie gibt nur manchmal einen Fehler (z. B. wenn eine der Zellen in Spalte A hat einen Fehlerwert von irgendeiner Art)? Was ist der Wert von 'cell.Row' wenn es abstürzt? – YowE3K
Ohne etwas in der For-Schleife, es läuft nur einmal statt der erwarteten 1736-mal. Wenn ich 'cell.row' in die Schleife setze, erhalte ich die erwartete Zeile, wenn sie ausgeführt wird. Ich habe vergessen, 'Debug.Print' das erste Mal damit den Fehler zu platzieren. – tjb1
Wenn ich 'cell.address' drucke, dann bekomme ich $ A $ 1: $ A $ 1736 statt 1 Zelle. – tjb1