столкнулся неожиданно. простой код (в приложенном файле)
Код
Sub test()
Dim arr()
With ActiveSheet
arr = .[a1:a3].Value
arr = .[b1:b2].Value
arr = .[b1:b3].Value
End With
End Sub
третье присвоение приводит к ошибке времени выполнения Run-time error 6 (Overflow) причина простая: в одной из ячеек (точнее - в B3) с большим числовым значением ошибочно установлен числовой формат Дата в A1:A3 точно такие же значения, но формат Общий. обрабатываются без проблем.
вопрос: как избежать такую ошибку, не прибегая к циклам, приведениям типов и т.п.? файл приложен.
Сам написал, сам же ответил. На всякий случай напишу, что думаю на сей счет. Вдруг кто-то зайдет на эту ветку форума и захочет узнать как же обойтись в такой ситуации?
По поводу использования Value против Value2: Вариант без цифры автоматически конвертирует значения в формат данных совпадающий с форматом ячейки. То есть, если формат ячейки - дата, то и формат данных в VBA будет Date, даже несмотря на то, что "внутри сидит" по сути числовое значение. Этого поведения лишен вариант с цифрой (.value2). Соответственно благодаря отсутствию этого поведения value2 работает быстрее, чем просто value при работе с числовыми значениями. Нет необходимости конвертировать значения из одного типа данных в другой, соответственно и скорость работы в таком случае повышается. Таким образом, если нет ограничений по памяти лучше всего использовать массив c variant.
Давайте проверим работу этих свойств с помощью консоли ВБА. Для этого отформатируем число в виде даты. Например, возьмем число 40000. Наберем его в активной ячейке, а потом отформатируем как "Краткий формат даты". Далее напишем в консоли следующее: