簡體   English   中英

用戶創建的 VBA 函數返回 #VALUE

[英]User-created VBA function returns #VALUE

我正處於創建 vba 函數的早期階段,該函數將從單元格中提取電子郵件地址,然后對唯一 ID 進行 vlookup。

我將在其上使用該函數的單元格說明如下:

“此消息由 SOB 於 7 月 31 日發送至 email@email.com”或“消息由 SOB 7/31 發送至 email@email.com”

我想做的第一件事是擦除電子郵件地址之后的任何內容。 為此,該函數將搜索“by SOB on July 31st”或“by SOB 7/31”並將其替換為空。

我編寫了以下代碼來嘗試完成此操作,但在工作簿中使用它時收到一條錯誤消息:

Function ExtractEmail(extractStr As String) As String

Dim DateText As String
Dim DateNum As String

DateText = "by SOB on July 31st"
DateNum = "by SOB 7/31"

If InStr(extractStr, DateText ) Then
    Left(extractStr, InStr(extractStr, DateText )) = extractStr
        ElseIf InStr(extractStr, DateNum ) Then
            Left(extractStr, InStr(extractStr, DateNum )) = extractStr
        Else
            extractStr = "Nothing Found"

End If




End Function

所以這:

此郵件於 7 月 31 日由 SOB 發送至 email@email.com

應該返回:

此消息已發送至 email@email.com

知道為什么我會收到錯誤#Value!?

謝謝你的幫助!

您正在以錯誤的方式分配事物,並且您需要使用 UDF 的名稱從函數中實際返回一個值。 我認為這就是你所追求的:

Function ExtractEmail(extractStr As String) As String

Dim DateText As String
Dim DateNum As String

DateText = "by SOB on July 31st"
DateNum = "by SOB 7/31"

If InStr(extractStr, DateText ) Then
    extractStr = Left(extractStr, InStr(extractStr, DateText ))
ElseIf InStr(extractStr, DateNum ) Then
    extractStr = Left(extractStr, InStr(extractStr, DateNum ))
Else
    extractStr = "Nothing Found"
End If

ExtractEmail = extractStr

End Function

如果您只想刪除“ by SOB ”之后的任何內容,那么:

Function ExtractEmail(extractStr As String) As String

    ExtractEmail = Split(extractStr, " by SOB ")(0)

End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM