我想使用If语句,其中如果单元格的值不存在于某个范围内,则If语句为true,并执行将单元格复制到不同工作表的操作。我遇到问题的代码部分是 -
If (Value < Date And CompletedValue = "") And (Cells(Examrow, 1).Value <> SummarySheet.Range(Cells(3, 1), Cells(100, 1)).Value) Then
没有And Cells(Examrow, 1).Value <> SummarySheet.Range(Cells(3, 1), Cells(100, 1)).Value) Then
部分,代码工作正常,所以我认为这是我出错的地方。
它应该查看单元格(Examrow,1),获取值,然后将其与工作表SummarySheet中范围A3:A:100中的所有单元格进行比较。如果该值尚未在指定的范围内,则if语句应该执行其操作。
任何想法?
编辑:
我得到的错误信息是: Error Message
答案 0 :(得分:0)
编辑:
someWorksheet.Range
方法以范围的形式接受两个参数。这些范围必须位于工作表someWorksheet
上。如果您使用Cells(3, 1)
,则不会告诉VBA单元格在哪张表上,因此它猜测您的意思是ActiveSheet
。如果ActiveSheet
不是someWorksheet
,您将收到错误,因为Range
someWorksheet
方法无法处理来自其他工作表的范围。答案显然是指定Cells(3, 1)
和Cells(100, 1)
:
SummarySheet.Range(SummarySheet.Cells(3, 1), SummarySheet.Cells(100, 1))
无论如何你都要硬编码,你也可以使用
SummarySheet.Range("A3:A100")
这显然也适用于您的其他细胞参考。
但是之后您将收到一个新错误,因为您无法将单个值与数组进行比较。您必须遍历范围的所有单元格或使用内置的.Find
方法:
someRange.Find(someValue)
将返回首次找到someValue
的单元格,如果找不到,则返回Nothing
。所以你只需要检查上面的Is Nothing
:
If SummarySheet.Range("A3:A100").Find(Cells(Examrow, 1).Value) Is Nothing Then
您应该设置另一个options以满足您的需求,因为它们可以从之前的搜索中保存。
这看起来像这样:
Dim foundCell As Range 'to keep the If condition readable
Set foundCell = SummarySheet.Range("A3:A100").Find( _
What:=yourValue, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
MatchCase:=True)
If (.....) And foundCell Is Nothing Then