2012-05-30 23 views
22

Mümkün değil mi bilmiyorum, ancak Excel'de bir aralığın boş olup olmadığını kontrol etmek istiyorum.Excel Visual Basic - aralığın boş olup olmadığını algıla

Range("A38":"P38") 

VBA kodunda boş mu: Peki nasıl olursa yazıyorsunuz?

Şimdiden teşekkürler.

+0

(bu PIA, ancak VBA'DA kullanılan COM benzer olmalıdır) API bakınız o değerini çıkarmak: http://msdn.microsoft.com /en-us/library/microsoft.office.interop.excel.range_members.aspx (Count özelliği, belki de) –

+0

Ben VBA için oldukça yeni değilim, bu bana pek bir şey ifade etmiyor :) – Kano

+0

'Range ("A38: P38"). Say ', bkz. Http://msdn.microsoft.com/en-us/library/aa139976%28v=office.10%29.aspx –

cevap

38

Elde ettiğim yorumlardan bir çözüm buldum.

Sub Empty() 
    If WorksheetFunction.CountA(Range("A38:P38")) = 0 Then 
     MsgBox "Empty" 
    Else 
     MsgBox "Not Empty" 
    End If 
End Sub 
+0

Dikkat: ** "Boş()" ** geçerli bir prosedür Adı değil. @ darren-bartrup-cook, önerilen düzenlemem, gönderinin asıl amacından sapmıyor ve hedeflerini koruyor. –

3
Dim M As Range 

    Set M = Selection 

If application.CountIf(M, "<>0") < 2 Then 
    MsgBox "Nothing selected, please select first BOM or Next BOM" 
Else 

'Your code here 

End If 
deneyim Sadece yapabileceğini öğrenmiş itibaren

:

If Selection.Rows.Count < 2 
Then End If` 

Açıklama Yaklaşımı biraz daha geç sağlanacak (şu anda çalışıyorum)

+1

Cevabınız için teşekkürler, karşılaştırmanın gelecekteki ziyaretçiler için ne yaptığını biraz açıklığa kavuşturuyor musunuz? DÜZENLEME: Düzenlemenizin orijinal örneğe nasıl uyduğunu anlamak biraz da zor. – Thor

+0

@Thor, Google’daki bir soruna yönelik bir çözüm ararken, bu sayfayı alırsınız. Ancak bu sayfa bu soruna cevap vermiyor, bu yüzden bu soruna cevap verdim. Bence buradaki insanlar sadece bir şeyleri oylamazlar. Bunu zaten birkaç kişiye yardım ettiğini görebiliyorum. – DeerSpotter

+2

Hala çalışıyor musun? –

3

IsEmpty true verir değişken başlatılmamış veya açıkça Boş olarak ayarlanmış; aksi halde False değerini döndürür. İfadede birden fazla değişken varsa, false her zaman iade edilir. IsEmpty sadece varyantlar için anlamlı bilgiler verir. (https://msdn.microsoft.com/en-us/library/office/gg264227.aspx). Yani ayrı aralığında her hücreyi kontrol gerekir:

Tabii
Dim thisColumn as Byte, thisRow as Byte 

    For thisColumn = 1 To 5 
     For ThisRow = 1 To 6 
      If IsEmpty(Cells(thisRow, thisColumn)) = False Then 
       GoTo RangeIsNotEmpty 
      End If 
     Next thisRow 
    Next thisColumn 
    ........... 
    RangeIsNotEmpty: 

burada boş hücreleri değil saymak COUNTA fonksiyonu ile çözeltisinden daha kod vardır, ama en az bir değil Boş hücre tespit edilirse GoTo döngüler interupt ve Özellikle menzil büyükse ve bu durumu saptamanız gerekiyorsa kodunuzu daha hızlı yapın. Ayrıca benim için bu kod, VBA işlevi olmayan Excel CountA işlevinden daha fazlasını yapmaktan daha kolaydır.

+1

Excel makro kodu (derleme mümkün olup olmadığını bilmiyorum) çok sayıda yineleme olduğunda bir süre alır. Aralığındaki bazı hücrelerin boş olmadığını ve işlem yapmak istediğinizi belirlediyseniz, ancak bir aralığın boş olup olmadığını belirleme (örneğin kodunuz gerekliyse) daha hızlı ve belki de daha hızlı olmalıdır. kabul edilen cevabı (CountA) kullanarak çok daha hızlı.Aynı işi yapan VB döngüsüne tek bir "yerel" işlev kullanmak, daha hızlı çalışma sürelerine neden olma eğilimindedir. –

+0

bu her zaman işe yaramıyor. Örneğin, bir seçimden sonra sürekli bir seçim olmayan bir aralığa sahipseniz (aralık seçiminizin 1 hücreyi atladığını söylerse, 5 hücreyi atlar, 1 hücreye geri döner, vb.), Bu hata verir. – DeerSpotter

0

Başka bir çözüm. Boş Hücre sayımı ve hücre sayısı

Sub Emptys() 

Dim r As range 
Dim totalCells As Integer 

'My range To check' 
Set r = ActiveSheet.range("A1:B5") 

'Check for filled cells' 
totalCells = r.Count- WorksheetFunction.CountBlank(r) 


If totalCells = 0 Then 
    MsgBox "Range is empty" 
Else 
    MsgBox "Range is not empty" 
End If 

End Sub 
İlgili konular