以下代码给出了类型不匹配错误。有人可以请更正此代码。我必须在我的Excel工作表的第一列中找到一个字符串值。
index.html
答案 0 :(得分:2)
这个函数实际上并没有比Find
函数做的更多,所以如果你真的需要这个函数,也许值得考虑。
除此之外,您的功能可以简化 - 见下文。您的问题可能是因为Activecell
部分 - 正如我在评论中提到的那样。
Private Function FindHeader(ByVal SheetName As String, ByVal HeaderName As String) As Range Set FindHeader = ThisWorkbook.Worksheets(SheetName).Range("A1").Resize(1,1000).Find(HeaderName, lookat:=xlWhole) End Function
请注意,如果找不到具有该名称的标头,则您的函数将返回Nothing
。所以当你调用函数时检查Is Nothing
。例如:
Public Sub Test()
Dim header As Range
Set header = FindHeader("Sheet1", "TestHeader")
If Not header Is Nothing Then
MsgBox "Header is in " & header.Address
End If
End Sub
答案 1 :(得分:0)
以下按预期工作,我更换了ActiveCell部分并更改了范围,以便它查看第1列而不是A1:A1000:
Private Function find_RuleId_Column(page As String, strFind As String) As Range
Dim Gcell As Range
Set Gcell = Sheets(page).Columns(1).Find(What:=strFind, LookIn:=xlFormulas, Lookat _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False)
Set find_RuleId_Column = Gcell
End Function
Sub foo()
If Not find_RuleId_Column("Sheet1", "SearchItem") Is Nothing Then MsgBox find_RuleId_Column("Sheet1", "SearchItem").Address
End Sub
答案 2 :(得分:0)
您可以使用公式
=MATCH(B1,INDIRECT(CONCATENATE(A1,"!A1:A1000")),0)
其中B1
包含您要搜索的字符串,A1
包含工作表的名称。
答案 3 :(得分:0)
当ActiveCell不在A1:ALL1范围内时,会发生错误。但是,如果找不到strFind
,则会出现另一个错误。如果搜索不成功,范围Gcell将无效。你应该测试一下。但是,你似乎并不想要这个范围。下面的代码将返回列号,正如函数的名称所示。如果未找到strFind
,则会发生代码忽略的错误。如果未找到匹配项,该函数将返回0(零)。
Private Function find_RuleId_Column(page As String, strFind As String) As Long
Dim Gcell As Range
With Sheets(page)
Set Gcell = .Range(.Cells(1, 1), .Cells(1, 1000))
On Error Resume Next
find_RuleId_Column = Gcell.Find(What:=strFind, _
After:=.Cells(1, 1000), _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False).Column
End With
End Function