2016-11-04 76 views
1

我需要一個MsgBox出現一次如果範圍內的任何單元格(此例中的列F)都在數字範圍(46和80)內。下面是我認爲會起作用的代碼,但它沒有做任何事情。我很確定我的If語句是錯誤的,但我不知道它需要什麼。VBA Excel - 如果範圍內有任何單元格

Sub CheckNumber() 
Dim Lastrow As Integer 
Dim srchRng As Range 

Lastrow = Cells(Rows.Count, 1).End(xlUp).Row 
Set srchRng = Range(Cells(84, 6), Cells(Lastrow, 6)) 

Dim InputValue As String 

If WorksheetFunction.CountA(srchRng) > 46 And WorksheetFunction.CountA(srchRng) < 80 Then 
frmCMCapsHS.Show 
End If 
End Sub 
+0

你的意思是,如果在範圍內的任何單元格包含46和80之間的數字? CountA計算非空單元的數量。 – SJR

回答

1

我想你會需要循環是這樣的:

dim c as range  
For Each c In srchRng 
     If c.Value > 46 And c.Value < 80 Then 
      frmCMCapsHS.Show 
      Exit For 
     End If 
    Next 
+0

「c.value <80」處的If語句中的拼寫錯誤,但由於修復的長度而無法編輯。 – tjb1

+0

謝謝@ tjb1,我現在修復了它 – maxhob17

0

有可能是一個更優雅的方式來做到這一點,但你可以在一個函數把這個包,並讓它循環每個單元:

Function RangeContains(InputRange As Range, FromVal As Integer, _ 
    ToVal As Integer) As Boolean 

    Dim r As Range 
    Dim result As Boolean 

    result = False 

    For Each r In InputRange 
    If r.Value2 >= FromVal And r.Value2 <= ToVal Then 
     result = True 
     Exit For 
    End If 
    Next r 

    RangeContains = result 

End Function 

然後調用它,如下所示:

If RangeContains(Range("F:F"), 46, 80) Then 
    frmCMCapsHS.Show 
End If 
4

變化

If WorksheetFunction.CountA(srchRng) > 46 And WorksheetFunction.CountA(srchRng) < 80 Then 
frmCMCapsHS.Show 
End If 

If WorksheetFunction.CountIfs(srchRng, ">46", srchRng, "<80") > 0 Then 
frmCMCapsHS.Show 
End If 
相關問題