2016-03-21 5 views
0

Nachfolgend ist das Code-Snippet, das hilft, den Kontext des Problems zu verstehen. Wenn nicht (r ist nichts) Bedingung ist, dann bekomme ich 1004 Fehler. Das Besondere ist, wenn ich den Code im Debug-Modus Schritt für Schritt ausführen, dann tritt der Fehler jedes Mal auf, wenn die Bedingung erfüllt ist. Bitte helfen Sie mir, diesen Fehler zu beheben. Vielen Dank.1004 Anwendung definiert oder objektdefinierter Fehler bei Verwendung der Eigenschaft specialcells

With wb.Sheets(csht) 
    lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
    firstCol = 1 
    'If IsEmpty(.Cells(1, 1).Value) Then firstCol = .Cells(1, 1).End(xlToRight).Column 
End With 

'countCol = lastCol - firstCol + 1 
On Error Resume Next 
If firstCol < lastCol Then 
    Set r = wb.Sheets(csht).Range(wb.Sheets(csht).Cells(1, firstCol), wb.Sheets(csht).Cells(1, lastCol)).SpecialCells(xlCellTypeBlanks) 
Else 
    Set r = wb.Sheets(csht).Range(wb.Sheets(csht).Cells(1, firstCol), wb.Sheets(csht).Cells(1, firstCol)).SpecialCells(xlCellTypeBlanks) 
End If 
Err.Clear 
On Error GoTo 0 

If Not (r Is Nothing) Then 
    'On Error Resume Next 
    With wb.Sheets(csht) 
     If firstCol < lastCol Then 
      .Range(.Cells(1, firstCol), .Cells(1, lastCol)).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete 
     Else 
      .Range(.Cells(1, firstCol), .Cells(1, firstCol)).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete 
     End If 
    End With 
'Err.Clear 
'On Error GoTo 0 
End If 
+0

Das sieht nicht rechts: '.Range (.Cells (1, FirstCol), .Cells (1, FirstCol)) 'Sollte nicht einer von ihnen' lastCol' sein? – Rory

+0

Diese Anweisung wird ausgeführt, wenn firstCol = lastCol. Ich bekam einen Bereich Überlappungsfehler in dieser Situation. Sonst ist Bedingung eingefügt. Der Code dort ist tatsächlich '.Cells (1, firstCol)' (ein Fehler im Code gebucht). Bitte ignorieren Sie es als die meiste Zeit firstCol < LastCol in diesem Zusammenhang. – sadhana

+0

Wenn Sie 'SpecialCells' in einem Ein-Zellen-Bereich verwenden, gilt es tatsächlich für das gesamte Arbeitsblatt - ich glaube nicht, dass Sie das wollen! – Rory

Antwort

0

Ich glaube nicht, dass Sie das .SpecialCells(xlCellTypeBlanks) Stück brauchen überhaupt. Da Sie nur die gesamte Spalte zu löschen sind, könnten Sie den Code dies ändern:

With wb.Sheets(csht) 
If firstCol < lastCol Then 
     .Range(.Cells(1, firstCol), .Cells(1, lastCol)).EntireColumn.Delete 
    Else 
     .Range(.Cells(1, firstCol), .Cells(1, firstCol)).EntireColumn.Delete 
    End If 
End With 
+0

Ich lösche Spalten mit leeren Headern. Bitte gehen Sie meinen Code sorgfältig durch. – sadhana

Verwandte Themen