В качестве дополнительного ответа на вопрос, который я отправил here Хотелось бы знать, почему следующее сообщение об ошибке не является ошибкой, возможно ли это в VBA?Свойство Диапазон по умолчанию дает неожиданные результаты
Возьмите следующие данные:
Если мы используем следующий VBA код, мы получим сообщение об ошибке, потому что мы должны использовать числовое значение даты, чтобы соответствовать:
'//Produces error
Debug.Print WorksheetFunction.Match(Range("C3").Value, Range("A1:A14"), 0)
и поэтому любой из этих утверждений будет работа:
'// Cast to Long
Debug.Print WorksheetFunction.Match(CLng(Range("C3").Value), Range("A1:A14"), 0)
'// Access .Value2 property directly
Debug.Print WorksheetFunction.Match(Range("C3").Value2, Range("A1:A14"), 0)
Однако, как указывал Jean-François Corbett, если мы не указываем свойство также работает:
Debug.Print WorksheetFunction.Match(Range("C3"), Range("A1:A14"), 0)
Так что если .Value
не работает, и это свойство по умолчанию Range
объекта - почему это работает в приведенном выше примере?
Это может быть ошибка? Или существует какой-то уровень оценки, который противодействует этому?
https://msdn.microsoft.com/en-gb/library/office/ff835873.aspx - Lookup_value может быть значением (числом, текстом или логическим значением) или ссылкой на номер, текст или логическое значение. Поэтому в этом случае 'WorksheetFunction.Match (Range (« C3 »), Range (« A1: A14 »), 0)' не будет использовать метод по умолчанию для объекта «Range», кроме самого объекта Range. –
Даже в этом сценарии «Диапазон (« C3 »). Значение« и »Диапазон (« C3 »)' будет оцениваться и возвращать то же значение «dd/mm/yyyy», которое будет использоваться в функции вместо числовое значение - значит, все равно ошибка? –
Конечно ;-)? Вы точно знаете, как работает WorksheetFunction.Match? Я не знаю, потому что это не с открытым исходным кодом. –