2016-11-29 2 views
0

Я разрабатываю приложение, которое использует коды спецификации для просмотра этих кодов в другой электронной таблице и возвращает номера поставщиков со второй таблицы в первую очередь, перечисляя их в тот же столбец с кодом спецификации.Excel 2013 на W10: VBA Vlookup на другом листе создает ошибку 1004

ActiveCell.FormulaR1C1 = Application.WorksheetFunction.VLookup(specsec, [Vendorspec.xlsx!vid], 4) 

в приведенной выше строке кода:

  • specsec является кодом спецификации, в форме XX XX XX.XX
  • Имя целевого файла ВПР "VendorSpec.xlsx". На этом листе каждый код является уникальной записью в столбце 1 с первым из нескольких номеров поставщиков в столбце 4. Будущий код будет циклически проходить через столбцы, возвращая все последующие идентификаторы поставщиков для текущего кода.

В строке кода возникает ошибка «Ошибка времени выполнения« 1004 »: невозможно получить свойство vlookup класса функции рабочего листа».

Может ли кто-нибудь предложить исправить?

спасибо.

+1

ваш код работает для меня _provided_ 'Vendorspec.xlsx' рабочая книга открыта _and_' vid' является допустимым диапазоном именованного диапазона рабочей книги в этой книге _and_ значение 'specsec' существует в первом столбце диапазона' vid' _and_ ' vid' имеет ширину не менее четырех столбцов –

+0

Можете ли вы попробовать без usind '.FormulaR1C1', только с' ActiveCell = Application ... '? – Vityata

+0

Я не думаю, что вы можете назначить такую ​​функцию для FormulaR1C1, поскольку она будет вычислять функцию WorksheetFunction и просто нажать результат. Если вы хотите, чтобы формула оставалась в ячейке, вам нужно нажать формулу в виде строки. Если вы просто хотите, чтобы результаты формулы оставались в ячейке, чем использовать «ActiveCell.Value2». – nbayly

ответ

1

Ваш поиск просто не работает, и сообщение об ошибке вводит в заблуждение.

Это не значит, что VBA не смог найти участника WorksheetFunction.VLookup, это просто, что ваш VLookup поднял ошибку.

Вам нужно либо:

  • Обрабатывать эту ошибку во время выполнения с On Error GoTo заявления

Или

  • Используйте поздно переплете версии Application.VLookup, которая не дает вам IntelliSense, но вместо того, чтобы бросать ошибку времени выполнения при неудачном поиске, он будет ret urn «Ошибка 2042», и вы можете проверить, не удалось ли выполнить поиск или нет, обернув его в IsError.

Тип 42 в ячейке A1 активного листа.Затем в непосредственной панели:

?iserror(application.VLookup(42,Range("A:B"),1,false)) 

возвращается False

?iserror(application.VLookup(43,Range("A:B"),1,false)) 

возвращает True

?application.WorksheetFunction.VLookup(42,Range("A:B"),1,false) 

возвращается 42

?application.WorksheetFunction.VLookup(43,Range("A:B"),1,false) 

вызывает ошибку во время выполнения:

Unable to get the VLookup property of the WorksheetFunction class

Это сообщение было бы лучше сформулировать как «функции ВПР не удалось найти заданное значение поиска в заданном диапазоне поиска», или что-то в этом роде.


Причина ваш поиск не удается одно и то же любое ВПР может произойти сбой для: проверить ваш lookup_value на самом деле существует в lookup_range. Следите за ведущими и/или конечными пробелами и столбцами с текстовым форматированием. Другими словами, если вы хотите, чтобы сбросить ошибку времени выполнения при сбое поиска, это проблема с данными, а не проблема с кодом.