在excel vba中使用Find方法找不到电子邮件string

我正在尝试查找包含特定电子邮件地址的单元格的地址。 这是我的代码:

Function find_email(range_input As Range) As String Dim item_input As String item_input = "test@test.com" Dim found_range As Range With Worksheets("test_sheet").range_input Set found_range = .Find(What:=item_input, LookIn:=xlValues, LookAt:=xlPart) End With find_email = found_range.Address End Function 

编辑post回答1

我已经采取了答案#1中的build议,并更改为代码为:

 Public Function find_email(range_input As Range, string_input As String, collumn_offsett As Integer) As String Dim found_range As Range With Worksheets("test_sheet").Range(range_input.Address) Set found_range = .Find(What:=string_input, LookIn:=xlValues, LookAt:=xlPart) End With Dim output_range As Range Set output_range = found_range.Offset(0, collumn_offsett) find_email = output_range End Function Sub test_email_find_code() Debug.Print find_email(Range("f1:f7"), "test@test.com", -3) End Sub 

test_email_find_code很好。 当我尝试在单元格中使用函数find_email时,它不起作用。 我真的不明白如何研究这个。 我是否必须以某种方式调整范围input?

为了使它像你写的一样工作,你需要改变这样的行:

 With Worksheets("test_sheet").Range(range_input.Address) 

这是您的完整代码位于一个单独的模块:

 Public Function find_email(range_input As Range) As String Dim item_input As String item_input = "test@test.com" Dim found_range As Range With Worksheets("test_sheet").Range(range_input.Address) Set found_range = .Find(What:=item_input, LookIn:=xlValues, LookAt:=xlPart) End With find_email = found_range.Address End Function 

你可以用另一个子testing它:

 Sub findEmail() Debug.Print find_email(Range("A1:D100")) End Sub 

或者使用这样的内嵌函数:

 =find_email(A1:D100) 

结果取决于答案,我使用单元格C4,结果是$C$4