Проблемы с VLOOKUP в VBA - PullRequest
       12

Проблемы с VLOOKUP в VBA

0 голосов
/ 21 августа 2009

All

Я пытаюсь использовать vlookup в простой функции VBA, но она постоянно возвращает #VALUE!

Вот код:

Public Function getAreaName(UBR As Integer) As String

  Dim result As String
  Dim sheet As Worksheet
  Set sheet = ActiveWorkbook.Sheets("UBR Report")
  ' check level 3 then 2 then 4 then 5
  result = Application.WorksheetFunction.VLookup(UBR, sheet.Range("UBRLookup"), Application.WorksheetFunction.Column(sheet.Range("UBRLookup[Level 3]")), False)
  getAreaName = result

End Function

Есть мысли?

Ответы [ 4 ]

2 голосов
/ 21 августа 2009

Я не совсем уверен, что вы пытаетесь сделать с помощью ссылки "UBRLookup [Level 3]", но, как указал Джозеф, это то, что вы делаете неправильно.

[ не является допустимым символом для именованного диапазона в Excel.

Столбец, на который вы ссылаетесь, должен быть числовым значением, смещение от начала массива таблицы, которое вы определили как именованный диапазон.

Следующее должно работать, если столбец, который вы хотите извлечь, является вторым столбцом в вашем именованном диапазоне (например, то, что вы называете [уровень 3], находится во втором столбце).

Public Function getAreaName(UBR As Integer) As String

  Dim result As String
  Dim sheet As Worksheet
  Set sheet = ActiveWorkbook.Sheets("UBR Report")
  result = Application.WorksheetFunction.VLookup(UBR, sheet.Range("UBRLookup"), 2, False)
  getAreaName = result

End Function

Обновление:
Я посмотрел на Excel 2007, и из того, что я вижу, функция столбца не представлена ​​как Application.WorksheetFunction. Вы можете использовать его на листе с =Column(D4), но при попытке автозаполнения в редакторе vba функция отсутствует. Это может быть связано с разницей в версиях, поэтому я пока проигнорирую это.

Все равно определенно кажется, что вы неправильно используете третий аргумент. Если вы действительно не хотите использовать ссылку на номер, нам нужно выяснить, где происходит сбой функции.

Несколько тестов по линии

Debug.Print Application.WorksheetFunction.Column(D4)
Debug.Print sheet.Range("UBRLookup[Level 3]")

должен, надеюсь, помочь вам показать, где именно происходит ошибка - я считаю, что она будет возражать против обоих вышеперечисленных, но если она выдаст некоторую полезную информацию, то мы можем стать на шаг ближе к вашему решению.

1 голос
/ 21 августа 2009

меня беспокоит
Dim column as Column =<br> Application.WorksheetFunction.Column(sheet.Range("UBRLookup[Level 3]"))

Думаю, вы должны использовать столбец Dim как можно дольше и, возможно, использовать имя переменной, которое не следует путать со свойством, например lngCol.

1 голос
/ 21 августа 2009

Разбейте вас на несколько частей. Затем отладьте его и убедитесь, что все компоненты настроены так, как вы ожидаете.

Пример:

Public Function getAreaName(UBR As Integer) As String
    Dim result As String
    Dim sheet As Worksheet
    Set sheet = ActiveWorkbook.Sheets("UBR Report")
    Dim range as Range = sheet.Range("UBRLookup")
    Dim column as Column = Application.WorksheetFunction
            .Column(sheet.Range("UBRLookup[Level 3]"))
    result = Application.WorksheetFunction.VLookup(UBR, range, column, False)
    getAreaName = result
End Function

На самом деле, просто делая это, я заметил что-то странное. Вы используете диапазон в двух разных местах, но в одном месте вы ищете UBRLookup, а в другом вы ищете UBRLookup [Уровень 3], это правильно?

0 голосов
/ 21 августа 2009

Эта часть: sheet.Range ("UBRLookup [Уровень 3]") подозрительно, поскольку "UBRLookup [Уровень 3]" не является допустимым именем диапазона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...