Vlookup, Excel, ошибка 438 "объект не поддерживает это свойство или метод" - PullRequest
4 голосов
/ 12 февраля 2012

У меня есть следующий код:

  • Предполагается, что он перейдет на лист с именем «Flash» и получит двузначное числовое значение i-го числа и получит значение в смещении столбца 4 справа от Activecell.
  • Затем переключитесь на лист с именем «Лист1» в той же книге и используйте функцию вертикального поиска, чтобы найти найденное значение и вернуть столбцы значений 4 справа от этой ячейки.

Однако, когда я запускаю скрипт ниже, он перестает работать при:

MsgBox (ActiveSheet.VLookup(LookFor, "A:A", 4, True))

и броски VBA error 438 object doesn't support this property or method

Кто-нибудь знает, почему есть исключение?

' Begin lookup :
Dim i As Integer, designator As String, LookFor As String
Flash.Activate
ActiveSheet.Range("C3").Select
For i = 3 To lastUsedCellInRow("C")
    designator = "C" + CStr(i)
    Dim cellVal As String
    cellVal = ActiveSheet.Range(designator).Value()
    If (Len(cellVal) <= 2 And IsNumeric(cellVal)) Then
        LookFor = ActiveSheet.Range(designator).Offset(0, 4).Value()
        RawData.Activate
        MsgBox (ActiveSheet.VLookup(LookFor, "A:A", 4, True))
    End If
Next i

1 Ответ

4 голосов
/ 12 февраля 2012

У вас есть несколько вопросов

  1. Вы должны ссылаться на диапазон как Range("A:A"), а не "A:A"
  2. Если вы используете VLOOKUP вместо LOOKUP, то, как указано, вы должны ссылаться на диапазон из четырех столбцов, Range("A:D")
  3. Вам нужно обработать тестовое значение, которое не найдено в A

Пример кода ниже для адаптации

Dim strLookfor as String
Dim strOut
strLookfor = "test"
strOut = Application.VLookup(strLookfor, Range("A:D"), 4, True)
If IsError(strOut) Then
    MsgBox "value not found"
Else
'return column D value as string
    MsgBox CStr(strOut)
End If

Последующий

Да, вы можете использовать

`strOut = Application.VLookup(strLookfor & "*", Range("A:D"), 4, True)`

для этого матча

бу я думаю Find чище, т.е.

Dim strLookfor As String
strLookfor = "F71"
Dim rng1 As Range
Set rng1 = Sheets("Sheet1").Columns("A").Find(strfolder & "*", , xlValues, xlPart)
If Not rng1 Is Nothing Then
    MsgBox "Match in " & rng1.Offset(0, 3)
Else
    MsgBox strfolder & "*" & vbNewLine & "not found"
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...