2012-10-20 35 views
9

Tablo sütununda boş hücreleri seçen ve tüm satırı silen bir makroyu çalıştırmaya çalışıyorum.Excel VBA - Tablodaki boş satırları kaldır

Aşağıdaki kod, run-time error 1004 - "Delete method of Range class failed"'u isteyen silme bölümü dışındaki her şeyi yapar.

Bu sorun nasıl giderilir? Teşekkürler

cevap

7

Güzel soru! Tablo olmadan, .EntireRow.Delete her zaman çalışır, ancak bir tablo içinde olmadığı gibi görünüyor.

Bu çalışır:

Sub Test() 
    Dim Rng As Range 
    On Error Resume Next 
    Set Rng = Range("Table1[[New]]").SpecialCells(xlCellTypeBlanks) 
    On Error Goto 0 
    If Not Rng Is Nothing Then 
    Rng.Delete Shift:=xlUp 
    End If 
End Sub 
+1

Bu Tablolar için doğru çözümdür fakat hiç boş satırlar bulunur durumunda (Brettdj en Yanıt başına gibi) hata kontrolünü eklemek gerekir –

+1

tamam cevabı ve katma hatayı düzenlenebilir – fthiella

+0

'un kontrol edilmesi Bu mükemmel bir şekilde çalıştı. Teşekkür ederim. – user91240192094

1

Aslında tek bir geçişte bunu ancak ListObject nesne ve onun DataBodyRange ve ListColumns özelliklerini kullanmak gerekir edebilirsiniz:

Sub ClearBlankCellsInColumnNew() 
Dim rngBlanks As Excel.Range 

With Worksheets("Sheet1").ListObjects("Table1") 
    On Error Resume Next 
    Set rngBlanks = Intersect(.DataBodyRange, .ListColumns("New").Range).SpecialCells(xlCellTypeBlanks) 
    On Error GoTo 0 
    If Not rngBlanks Is Nothing Then 
     rngBlanks.Delete 
    End If 
End With 
End Sub 
+0

Bu yöntem hala bana Çalışma zamanı hatası 1004 verir:" İşlem izin verilmiyor. İşlem, çalışma sayfanızdaki bir hücreyi bir hücreye kaydırmaya çalışıyor. "Diyerek biraz farklı olsa da.) – user91240192094

+0

Aşağıdaki tabloda başka bir tablo var mı? Konuştuğumuz kişi? Eğer öyleyse, tasarımın birbirinin üzerine yığılmış masaları olmaması için değiştirmeyi düşünmelisiniz. Eğer VBA olmadan, Excel'de bunu yaparsanız aynı mesajı almanızı beklerim. Ayrıca, eğer öyleyse, lütfen yukarıdaki veya altındaki başka bir tablo bulunmayan bir tabloyu deneyin. Aksi takdirde, güdük olabilir :). –

+0

Hey Doug - çalışma sayfasındaki tek bir tablo. – user91240192094

1

1. Adım: bir yardımcı olun Bu satırdaki boş alanları kontrol ettiğiniz tablodaki sütun. Örneğin, tablonuzda 3 sütun varsa: A (Fiyat), B (Miktar) ve C (Maliyet), dördüncü bir sütun D ekler ve "Herhangi Bir Boşluk" etiketini eklersiniz. Denklem, tüm boşlukları görüntülemek için süzülecek bir sütun verecektir.

Adım 2: Daha sonra yapacağını VBA aşağıdaki: Bu aslında tablodaki tüm görülebilen veri seçerek sen yardımcı sütunu kullanılarak tabloda silmek istediğiniz satır için filtrelediğini

Range("MyTableNameHere").AutoFilter Field:=Range("MyTableNameHere[Any Blanks?]").Column, Criteria1:="Yes" 
Application.DisplayAlerts = False 
Range("MyTableNameHere").ListObject.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete 
Application.DisplayAlerts = True 
Range("MyTableNameHere").AutoFilter Field:=Range("MyTableNameHere[Any Blanks?]").Column 

ve masayı kaldırmadan. Tablodaki tüm görünür satırları nasıl sileceğimi araştırıyordum ve bunun işe yarayacağını anlayana kadar bunu buldum. Bunu alarak ve tüm satırları herhangi bir boşluk ile seçmek için bir yardımcı sütun ile birleştirmek de istediğiniz gibi görünüyor.

0

uyarlanması önceki cevaplar:

On Error Resume Next 
Set Rng = ListObjects(1).DataBodyRange.SpecialCells(xlCellTypeBlanks) 
On Error GoTo 0 
If Not Rng Is Nothing Then 
Rng.Delete Shift:=xlUp 
End If