我正在尝试使用下面的VBA代码搜索Excel(列K)中的特定列,但是当我运行宏时,它会搜索整个工作表而不是指定的列。
问题是它首先在早期的列中找到'mycell1',即在C列而不是列K中,我不希望它这样做。
我也试过在'Searchorder'中使用'xlByRows',它有同样的问题。
非常感谢任何帮助
由于
Range("K:K").Select
Set foundcell1a = Selection.Cells.Find(What:=mycell1, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
Set foundcell1a = Cells.FindNext
If Not foundcell1a Is Nothing Then
foundcell1a.Activate
End If
答案 0 :(得分:2)
如果您可以避免使用.Select
,请不要使用With...End With
,大部分时间都可以使用Sub SearchK()
Dim mycell1
Dim foundcell1a As Range
mycell1 = 1
With ActiveWorkbook.Worksheets("Sheet1").Range("K:K")
Set foundcell1a = .Find(mycell1, .Cells(.Rows.Count, 1))
Set foundcell1a = .FindNext(foundcell1a)
If Not foundcell1a Is Nothing Then
foundcell1a.Activate
End If
End With
End Sub
。
请尝试使用With...End With
构造。与您想要操作的对象一样具体。
Set foundcell1a = .Find(mycell1, .Cells(.Rows.Count, 1))
如果没有Set foundcell1a = ActiveWorkbook.Worksheets("Sheet1").Range("K:K").Find(mycell1, .Cells(.Rows.Count, 1))
,则必须重复所有对象标识符:
ActiveWorkbook.Worksheets("Sheet1").Range("K:K")
必须表达为:
Set foundcell1a = .Find(mycell1, .Cells(.Rows.Count, 1))
当VBA评估命令时,它需要在每次遇到它时评估句点(。)之前的每个属性。使用mycell1
可以删除4个句点,因此它也可以更快地运行。
object
在K列中最后一次使用的单元格后面找string
,因此无论活动单元格如何,它都会循环返回以查找K列中的第一个实例。
答案 1 :(得分:1)
试试这个:
With Range("K:K")
Set LastCell = .Cells(.Cells.Count)
End With
Set FoundCell1a = Range("K:K").Find(mycell1, LastCell)
If Not FoundCell1a Is Nothing Then
FirstAddr = FoundCell1a.Address
Range(FirstAddr).Activate
End If
希望这有帮助!