我正在使用VBA Find()
功能,但无法使查找功能仅在特定范围内搜索。有人可以帮我这个吗?
我在y = Sheets(i).Range(Cells(10, 1), Cells(frow, k)).Find(ID).Offset(0, 6).Value 'full soln max
上收到运行时错误'1004'应用程序定义或对象定义错误
我正在尝试定义我的find函数之间的搜索范围。它从第10行到“GLOBAL GROUP PURCHASES”文本所在的任何行。
以下是代码:
Sub highlightcases()
Application.ScreenUpdating = False
For i = 2 To Worksheets.Count
k = 2 * i - 1
For j = 13 To Sheets(1).Cells.Find("GLOBAL GROUP PURCHASES").Offset(-2, 0).Row
ID = Sheets(1).Cells(j, 1).Value 'case comparison stream name
frow = Cells.Find("GLOBAL GROUP PURCHASES").Row
x = Sheets(1).Cells(j, 1).Offset(0, 2).Value 'case comparison sheet activity
y = Sheets(i).Range(Cells(10, 1), Cells(frow, 1)).Find(ID).Offset(0, 6).Value 'full soln max
Z = Sheets(i).Range(Cells(10, 1), Cells(frow, 1)).Find(ID).Offset(0, 5).Value ' full soln min
If x = y And x <> 0 And y <> Z Then 'check max
Sheets(1).Cells(j, k).Interior.ColorIndex = 35
ElseIf x = Z And x <> 0 And y <> Z Then 'check min
Sheets(1).Cells(j, k).Interior.ColorIndex = 22
ElseIf y = Z And y <> 0 Then 'check fixed
Sheets(1).Cells(j, k).Interior.ColorIndex = 19
End If
If Sheets(1).Cells(j, k).Value <> 0 Then
Sheets(1).Hyperlinks.Add Anchor:=Sheets(1).Cells(j, k), Address:="", SubAddress:= _
"'" & Sheets(i).Name & "'!" & Sheets(i).Range(Cells(10, 1), Cells(frow, 1)).Find(ID).Offset(0, 3).Address, TextToDisplay:=Sheets(1).Cells(j, k).Text
Else
Sheets(1).Hyperlinks.Add Anchor:=Sheets(1).Cells(j, k), Address:="", SubAddress:= _
"'" & Sheets(i).Name & "'!" & Sheets(i).Range(Cells(10, 1), Cells(Cells.Find("GLOBAL GROUP PURCHASES").Row, 1)).Find(ID).Offset(0, 3).Address, TextToDisplay:="0"
End If
Next j
Next i
With Sheets(1).Cells
.Font.Color = vbBlack
.Font.Size = 8
.Font = Arial
End With
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:1)
y = Sheets(i).Range(Cells(10, 1), Cells(frow, 1)).Find(ID).Offset(0, 6).Value
这是你的问题:Cells(10, 1)
显然是指单元格A10。但在哪张纸上?因为您没有指定它,所以它需要当前活动的工作表,因此它与ActiveSheet.Cells(10,1)
基本相同。
您确实正确指定了.Range
的工作表,但稍后您没有为Cells
指定该工作表,因此,如果,假设Sheet(1)
是活动工作表,i = 2 ,你的行与
y = Sheets(2).Range(Sheets(1).Cells(10, 1), Sheets(1).Cells(frow, 1)).Find(ID).Offset(0, 6).Value
并且您不能在一张纸上指定一个范围与另一张纸的单元格。当然,解决方案是始终指定纸张。 <{1}}块可以使这更容易
With
无论何时在with块中使用With Sheets(i)
y = .Range(.Cells(10, 1), .Cells(frow, 1)).Find(ID).Offset(0, 6).Value
End With
,它都会在with block变量上使用.Something
。当然你会在内部放置多行,可能是内部for循环中的所有内容。
答案 1 :(得分:0)
不是在单元格对象上调用Find
,而是在要搜索的特定范围内调用它。因此,如果您想搜索第一列,请致电Sheets(1).Range("A:A").Find("GLOBAL GROUP PURCHASES").Offset(-2, 0).Row
甚至Sheets(1).Columns(1).Find("GLOBAL GROUP PURCHASES").Offset(-2, 0).Row
。对于由变量定义的命名范围,请使用Sheets(1).Range(YourRangeVariableName).Find("GLOBAL GROUP PURCHASES").Offset(-2, 0).Row
可以对任何形状或大小的任何范围进行此操作
在回答所引发的错误时,当使用工作表和范围调用时,您需要再次为单元格指定工作表,因此您需要调用y = Sheets(i).Range(Cells(10, 1), Cells(frow, k)).Find(ID).Offset(0, 6).Value
而不是y = Sheets(i).Range(Sheets(i).Cells(10, 1), Sheets(i).Cells(frow, k)).Find(ID).Offset(0, 6).Value
。发生这种情况是因为在没有指定工作表的情况下调用的任何单元格或范围将从活动工作表调用,因此如果Sheets(i)
不是活动工作表,您将获得不能在Sheets(i).Range()