2011-10-24 35 views

risposta

13
On Error Resume Next 
worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
On Error GoTo 0 

La gestione degli errori aiuta a quando non ci sono celle vuote. SpecialCells(xlCellTypeBlanks) restituirà sempre un errore se non ci sono celle del genere, quindi la gestione degli errori è l'unico modo (che io sappia) di occuparsene se si desidera utilizzare SpecialCells(xlCellTypeBlanks).

+1

+1 per una risposta efficace – brettdj

+0

Spiegare cosa fanno esattamente queste righe aggiuntive sarebbe di grande aiuto :-) – Enissay

2

Lavorare bene con me. Queste dichiarazioni non genera alcun errore a me

Sheet1.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'perfect 

ho trovato questo tipo di soluzione per la vostra domanda

On Error Resume Next 
Sheet1.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
On Error GoTo 0 

Date un'occhiata a questi link

http://www.excelforum.com/excel-programming/390329-microsoft-visual-basic-run-time-error-1004-no-cells-were-found.html

http://www.mrexcel.com/forum/showthread.php?t=343744

e beh sì sì hai impostato il tuo oggetto? foglio di lavoro non ha alcun senso qui

dim wsheet as worksheets 
set wsheet = worksheets("worksheetname") or worksheets("sheet1") 
wsheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
+0

+1 per la gestione degli errori suggerimento. E sono d'accordo che "foglio di lavoro" non è il nome della variabile migliore. – brettdj

7

È necessario verificare che ci siano spazi vuoti.

If WorksheetFunction.CountBlank(Worksheet.Columns("A:A")) > 0 Then 
    Worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
End If 

Si può semplicemente utilizzare On Error Resume Next per saltare la linea se non ci sono spazi vuoti, ma è generalmente preferibile per verificare una condizione specifica, piuttosto che assumere sapere quale sarà l'errore.

Per quanto posso vedere, otterresti il ​​messaggio "Nessuna cella trovata" se ogni cella nella Colonna A ha un valore.

EDIT: Sulla base di commenti di @ brettdj, ecco un'alternativa che utilizza ancora CountBlank:

If WorksheetFunction.CountBlank(Intersect(worksheet.UsedRange, ws.Columns("A:A"))) > 0 Then 
    worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
End If 

Naturalmente UsedRange è notoriamente volubile e può essere più grande di quello che appare. Penso che sia migliore per determinare prima la gamma attuale, dove le righe devono essere cancellati e quindi controllare le SpecialCells in tale intervallo, ad esempio:

Sub DeleteRows() 
Dim ws As Excel.Worksheet 
Dim LastRow As Long 

Set ws = ActiveSheet 
LastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row 
With ws.Range("A2:A" & LastRow) 
    If WorksheetFunction.CountBlank(.Cells) > 0 Then 
     .SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
    End If 
End With 
End Sub 

Un'ultima nota - ho cambiato la variabile da "foglio di lavoro" a "ws "come" foglio di lavoro "è una parola riservata in Excel.

+0

Doug, quel codice fallirà ancora per la domanda OP come CountBlank come usato sopra a guardare tutte le celle nella colonna A - quindi il suo una certezza virtuale che questa condizione è sempre vera.Mentre SpecialCells guarda solo l'usato e non ci possono essere celle vuote, cioè _ "Per quanto posso vedere, otterresti il ​​messaggio" Nessuna cella trovata "se ogni cella nella Colonna A ha un valore" _ non è corretto – brettdj

+0

brettdj, grazie per le informazioni. Mi sono interrogato sul fatto che l'OP lo stava usando sull'intera colonna e ora capisco come possa funzionare. –

+0

Saluti Doug. SpecialCells potrebbe essere spiegato in modo più intuitivo che lo sia. – brettdj

1

altro modo:

If Range("Table2").Rows.Count > 1 Then 
    Range("Table2").EntireRow.Delete 
End If 
0
Sub delete_rows_blank() 

t = 1 
lastrow = ActiveSheet.UsedRange.Rows.Count 
Do Until t = lastrow 
If Cells(t, "A") = "" Then 
Rows(t).Delete 
End If 
t = t + 1 
Loop 

End Sub 
+0

Considera di aggiungere altro per spiegare cosa sta facendo il codice. – gms0ulman

+0

scusa: la macro scorre semplicemente attraverso la colonna "A" per le celle vuote e cancella la riga in caso affermativo. (puoi regolare lastrow o lettera colonna in base alle tue esigenze). Spero che questo ti aiuti ! :) –