#excel #vba #range
#excel #vba #диапазон
Вопрос:
Я получил следующий код, теперь, когда я фильтрую свои результаты следующим образом, и он не возвращает результатов, я получаю ошибку переполнения. Но я не понимаю, почему. Я подумал, что это будет тот факт, что я пытаюсь выбрать неверный диапазон. Итак, я попытался проверить, является ли первая ячейка со значением пустой или нет. Но, похоже, на данный момент это не помогает.
If Range("A2") <> "" Then
iCtr = Range("A2", Range("A2").End(xlDown)).Count 1
ActiveSheet.Range("$A$1:$AB" amp; iCtr).AutoFilter Field:=8, Criteria1:="=1100" _
, Operator:=xlOr, Criteria2:="=1110"
End If
Итак, у кого-нибудь есть идеи, как это решить или в чем проблема?
Комментарии:
1. Ошибка в первом операторе или во втором?
2. Я получаю ошибку в следующей строке
iCtr = Range("A2", Range("A2").End(xlDown)).Count 1
3. Что такое
iCtr
? этоInteger
илиLong
?Dim iCtr AS Long
может позаботиться об этом, если количество строк больше, чем ~ 32 тыс.4. В настоящее время у меня есть iCtr как целое число, однако это может показаться странным, поскольку нет никаких строк для выбора. Но я попробую и посмотрю, что это даст.
5. Я попробовал код с некоторыми такими же данными на своем конце, и он работает нормально, поэтому проблема может быть специфичной для рабочего листа.
Ответ №1:
Определить
Dim iCtr AS Long
поскольку это безопасно позволило бы ему принимать диапазоны RowCount
любого размера.
Комментарии:
1. технически говоря,
any
фактически ограничено от-2,147,483,648
до2,147,483,647
2. Верно, но поскольку (по крайней мере, начиная с Excel 2013) максимум
Rowcount
может составлять только ~ 1 миллион, любой действительный возврат изRowCount
может быть безопасно принят вLong
. Но правильная точка об ограничениях размера для 32 битLong
, так что 1.3. 1 при длительном. Что быстрее, чем целое число, независимо.
Ответ №2:
Из приведенной выше информации весьма подозрительно, что проблема вызвана iCtr как Integer. Максимальное целое число равно 32767, поэтому оно не может содержать большое число. Вы можете определить его как можно дольше, чтобы избежать проблемы переполнения.
Dim iCtr As Long
В качестве Long максимальное значение будет равно 2147483647.