2016-11-04 78 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 
相关问题