can';无法在excel vba中使用find方法查找电子邮件字符串

can';无法在excel vba中使用find方法查找电子邮件字符串,vba,excel,Vba,Excel,我正在尝试查找包含特定电子邮件地址的手机地址。这是我的密码: 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 =

我正在尝试查找包含特定电子邮件地址的手机地址。这是我的密码:

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
编辑帖子答案1

我采纳了答案1中的建议,并将代码改为:

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

sub
test\u email\u find\u code
非常有效。但是,当我尝试在单元格中使用“查找电子邮件”功能时,它不起作用。我真的不明白如何研究这个。我是否必须以某种方式调整范围输入?

要使其像您所写的那样工作,您需要像这样更改行:

With Worksheets("test_sheet").Range(range_input.Address)
Sub findEmail()
    Debug.Print find_email(Range("A1:D100"))
End Sub
=find_email(A1:D100)

以下是单独模块中的完整代码:

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

您可以使用另一个子系统进行测试,如下所示:

With Worksheets("test_sheet").Range(range_input.Address)
Sub findEmail()
    Debug.Print find_email(Range("A1:D100"))
End Sub
=find_email(A1:D100)

或者使用如下单元内函数:

With Worksheets("test_sheet").Range(range_input.Address)
Sub findEmail()
    Debug.Print find_email(Range("A1:D100"))
End Sub
=find_email(A1:D100)


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

它在即时窗口中打印答案,但不在单元格中。是的,debug.print只是为了测试函数,因为我不知道你对结果做了什么。这就是为什么我也加入了一个细胞内的例子。希望能有帮助。我非常感谢你的回答,它似乎在一个案例中起作用,但我无法让它在我的电子表格中作为一个函数工作。我在我的问题中添加了一个编辑,试图让问题更清楚。编辑中的代码看起来不错。我在单元格A1中输入了这个公式:
=find_email(F1:F7,“test@test.com“,-3)
并获得了正确的结果,即F列中匹配电子邮件行C列的值。您的代码应位于单独的模块中,而不是在后面的工作表中。如果这不起作用,请在函数的开头放一个断点,然后在单元格中按enter键,输入公式。这将允许您单步执行代码并查看遇到的错误。为什么它不起作用?当我测试它时,它工作了。是否确实引用了正确的对象?(例如工作表名称)