我一直在尝试几种不同的方法来查找bingo
的行号(用星号列出并分隔),但似乎无济于事。我究竟做错了什么?在所有情况下,我都尝试同时寻找Bingo和“Bingo”。
Sub Find_Bingo()
Dim wb As Workbook
Dim ws As Worksheet
Dim FoundCell As Range
Set wb = ActiveWorkbook
Set ws = ActiveSheet
Const WHAT_TO_FIND As String = "Bingo"
Set FoundCell = ws.Range("A").Find(What:=WHAT_TO_FIND)
If Not FoundCell Is Nothing Then
MsgBox (WHAT_TO_FIND & " found in row: " & FoundCell.Row)
Else
MsgBox (WHAT_TO_FIND & " not found")
End If
'************
With Sheet1
Set FoundCell = Cells.Find(What:=Bingo, After:=.Cells(1, 1), _
LookIn:=xlValues, lookat:= xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
End With
'************
Set FoundCell = Sheets("Sheet1").Columns("E").Find(Bingo, _
ActiveSheet.Cells(2, 2), LookIn:=xlValue, lookat:=xlWhole)
'************
FoundCell = Range("A:M").Find(Bingo)
'************
FoundCell = Application.WorksheetFunction.Match(Bingo, Range("A1:A200"), 0)
'************
FoundCell = Worksheets("Sheet1").Columns(1).Find(Bingo).Row
'************
Range("A:A").Find(Bingo, Range("A1")).Row
'************
ActiveWorkbook.Worksheets("Sheet1").Columns(1).Find(Bingo).Select
'************
End Sub
最佳答案
对于第一种方法,将ws.Range("A")
更改为ws.Range("A:A")
,它将搜索整个a列,如下所示:
Sub Find_Bingo()
Dim wb As Workbook
Dim ws As Worksheet
Dim FoundCell As Range
Set wb = ActiveWorkbook
Set ws = ActiveSheet
Const WHAT_TO_FIND As String = "Bingo"
Set FoundCell = ws.Range("A:A").Find(What:=WHAT_TO_FIND)
If Not FoundCell Is Nothing Then
MsgBox (WHAT_TO_FIND & " found in row: " & FoundCell.Row)
Else
MsgBox (WHAT_TO_FIND & " not found")
End If
End Sub
对于第二种方法,您将
Bingo
用作变量而不是字符串文字。这是一个很好的示例,说明了为什么我将Option Explicit
添加到所有代码模块的顶部,因为当您尝试运行代码时,它将把您定向到该“变量”,该“变量”是未定义的,根本不打算用作变量。另外,当您使用
With...End With
时,在引用.
之前需要一个句点Cells
,因此Cells
应该是.Cells
。这模仿了正常的排位行为(即Sheet1.Cells.Find ..)将
Bingo
更改为"Bingo"
,并将Cells
更改为.Cells
With Sheet1
Set FoundCell = .Cells.Find(What:="Bingo", After:=.Cells(1, 1), _
LookIn:=xlValues, lookat:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
End With
If Not FoundCell Is Nothing Then
MsgBox ("""Bingo"" found in row " & FoundCell.Row)
Else
MsgBox ("Bingo not found")
End If
更新
在我的
With Sheet1
.....
End With
Sheet1
引用工作表的代码名称,而不是工作表本身的名称。例如,说我打开一个新的空白Excel工作簿。默认工作表仅为Sheet1
。我可以在代码中使用Sheet1
的名称来引用它,也可以使用Sheets("Sheet1")
的索引来引用它。使用代号的优点是,如果您更改工作表的名称,它不会更改。继续这个示例,假设我将
Sheet1
重命名为Data
。使用Sheet1
可以继续工作,因为代码名称不会更改,但是现在使用Sheets("Sheet1")
会返回错误,并且语法必须更新为工作表的新名称,因此它必须是Sheets("Data")
。在VB编辑器中,您将看到以下内容:
请注意,即使我将名称更改为
Data
,左侧也仍然有一个Sheet1
。这就是我的代号意思。Data
工作表可以通过两种方式引用:Debug.Print Sheet1.Name
Debug.Print Sheets("Data").Name
两者都应返回
Data
可以在here上找到有关工作表代码名称的更多讨论。
关于excel - 查找匹配值的行号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32190029/