2012-05-30 31 views
22

我不知道是否有可能,但我想檢查Excel中的範圍是否爲空。所以如何寫:Excel Visual Basic - 檢測範圍是否爲空

Range("A38":"P38") 

在VBA代碼中是否爲空?

在此先感謝。

+0

請教API(這是PIA,但其在VBA使用的COM應該是相似的)減去該值:http://msdn.microsoft.com /en-us/library/microsoft.office.interop.excel.range_members.aspx(計數屬性,也許) – 2012-05-30 06:46:36

+0

我很新的VBA,所以這不會對我很有意義:) – Kano

+0

'範圍(「A38:P38」)。Count',請參閱http://msdn.microsoft.com/en-us/library/aa139976%28v=office.10%29.aspx – 2012-05-30 07:05:40

回答

38

從我得到的評論中找到解決方案。

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

注意: **「空()」**不是有效的程序名稱。 @ darren-bartrup-cook,我提議的編輯並沒有偏離這個職位的原意並保留其目標。 –

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 

從以往的經驗我剛剛得知你可以這樣做:

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

澄清要在稍後提供的(現在我的工作)

+1

感謝您的回答,您是否也可以澄清一下這種比較對未來訪問者的影響?編輯:也有點棘手瞭解如何編輯符合最初的例子。 – Thor

+0

@Thor當您在Google上搜索問題的解決方案時,您會看到此頁面。但是這個頁面並沒有回答這個問題,這就是爲什麼我回答了這個問題。我相信這裏的人不只是投票。我可以看到這已經幫助了一些人。 – DeerSpotter

+2

你還在工作嗎? –

3

的IsEmpty返回True如果變量未初始化,或明確設置爲空;否則,它返回False。如果表達式包含多個變量,則總是返回False。 IsEmpty僅爲變體返回有意義的信息。 (https://msdn.microsoft.com/en-us/library/office/gg264227.aspx)。所以,你必須單獨檢查每個單元格範圍:

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: 

當然這裏不是與COUNTA函數解決方案的更多代碼,可憑此空白單元格,但如果至少有一個不爲空單元格中發現goto語句interupt循環和特別是如果範圍很大並且您需要檢測此情況,請更快地執行您的代碼。對於我來說,這個代碼比使用不是VBA函數的Excel CountA函數更容易理解它在做什麼。

+1

當您有大量迭代時,Excel宏代碼(不知道編譯是否可能)需要一段時間。如果您已經確定該範圍內的某個單元格不是空的並且您想要處理該單元格,則需要您的解決方案,但是確定範圍是否爲空(即,如果您的代碼甚至必要)的檢查應該更快,也許可能更快使用接受的答案(CountA)要快得多。對一個VB循環使用單一的「本地」函數可以實現更快的運行時間。 –

+0

這並不總是有效。例如,如果你在選擇後有一個不是連續選擇的範圍(假設你的範圍選擇跳過1個單元格然後跳過5個單元格,返回到1個單元格等),那麼這將會出錯。 – DeerSpotter

0

另一種可能的解決方案。計數空細胞,並從細胞的總數

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