1

Я пытаюсь создать функцию, которая ищет строку (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 ответ1

1

Я опробовал твой код. Для того чтобы заставить его работать, вам нужно - как предложит неделя - установить переменные base1 и base2. В противном случае вы получите:

Переменная объекта или С переменной блока не установлена ошибка.

Это также поможет (хотя это не вызывает проблемы), если вы назначите тип возврата в функции. Поскольку нет явного возвращаемого типа, по умолчанию используется 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 обычно указывает на ошибку типа данных. Вы проверили, что вы не пытаетесь сделать математический расчет с текстовыми данными?

Также (только если вы упомянули, что обязательное значение «рядом с этой строкой»). Ваш первый вызов смещения составляет семь столбцов влево от этой строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .