VBA Excel:用于在另一个工作簿中查找字符串的函数

VBA Excel:用于在另一个工作簿中查找字符串的函数

我正在尝试创建一个函数,该函数在两个不同的工作簿中搜索字符串 (bom) 并返回该字符串旁边的值。我知道那些工作簿中要执行搜索的范围,然后使用偏移量获取值。但是该函数返回 #VALUE 错误。

我以前创建过搜索函数,但仅限于同一工作簿内,这是第一个使用不同工作簿的搜索函数。也许您可以帮助我找出我的逻辑错误:

Option Explicit

Function findhscode(bom As String)

Dim base1 As Workbook
Dim base2 As Workbook


base1 = Workbooks.Open("path1")
base2 = Workbooks.Open("path2")

If Not base1.Sheets("Sheet1").Range("myRange").Find(bom) Is Nothing Then
    findhscode= base1.Sheets("Sheet1").Range("myRange").Find(bom).Offset(0, -7).value
    Else
        If Not base2.Sheets("Sheet1").Range("myRange").Find(bom) Is Nothing Then
        findhscode = base2.Sheets("Sheet1").Range("myRange").Find(bom).Offset(0, 1).value
            Else
            findhscode= "Please contact Imports for assistance"
        End If
End If

End Function

答案1

我试了一下你的代码。为了让它工作,你需要——正如 week 所建议的——设置 base1 和 base2 变量。否则你会得到:

未设置对象变量或 With 块变量错误。

如果您在函数中指定了返回类型,这也会有所帮助(尽管这不会引起问题)。由于没有显式返回类型,因此默认为 Object。我能想到的唯一另一件事是您是否有 base1 和 base2 的文字路径,或者您是否使用了变量。如果是变量,则删除引号。

以下代码对我有用(带有几个 MessageBox 添加以提供一些调试信息):

Function findhscode(bom As String)

Dim base1 As Workbook
Dim base2 As Workbook


Set base1 = Workbooks.Open("c:\temp\book1.xlsx")
Set base2 = Workbooks.Open("c:\temp\book2.xlsx")

  If Not base1.Sheets("Sheet1").Range("MyRange").Find(bom) Is Nothing Then
    MsgBox "found in base1"
    findhscode = base1.Sheets("Sheet1").Range("MyRange").Find(bom).Offset(0, 1).Value
    Else
        If Not base2.Sheets("Sheet1").Range("MyRange").Find(bom) Is Nothing Then
        MsgBox "found in base2"
        findhscode = base2.Sheets("Sheet1").Range("MyRange").Find(bom).Offset(0, 1).Value
            Else
            MsgBox "not found"
            findhscode = "Please contact Imports for assistance"
        End If
End If 

我从一个简单的输入框子调用了这个:

Sub stringPrompt()
  Dim hs As String
  hs = InputBox("String to search for", vbOKOnly, "Search String")
  Range("A1") = findhscode(hs)
End Sub

注意:#Value 错误消息通常表示数据类型错误。您是否检查过您没有尝试使用文本数据进行数学计算?

另外(只是因为您提到所需值是“该字符串旁边”)。您的第一个偏移量调用是该字符串左侧的七列。

相关内容