выделение нескольких столбцов с концом (xlDown) .End (xlUp) .Row - PullRequest
0 голосов
/ 16 мая 2018

Я делаю отладку для шаблона VBA. Макрос позволяет пользователям выбирать файл Excel для импорта, затем он проверяет каждый столбец, соответствуют ли они требованиям. Когда я пытаюсь импортировать файл, я всегда получаю сообщение об ошибке «oveeflow» со следующей строкой:

'maxRow = ws.Range(Cells(StartRow, AdditionalInfoColumns.OtherInfo).Address).End(xlDown).Row

Мой коллега говорит мне, что мне просто нужно добавить end (xlDown) .End (xlup) так:

maxRow = ws.Range(Cells(StartRow, AdditionalInfoColumns.OtherInfo).Address).End(xlDown).End(xlDown).End(xlUp).Row

И это работает! Я не знаю почему. Поэтому я пытаюсь сделать это более простым способом:

maxRow = ws.Range(Cells(StartRow, 1).Address, Cells(StartRow, 3).Address).End(xlDown).End(xlUp).Row

Это также работает. Может кто-нибудь объяснить, почему это работает? Спасибо за ваш ответ. PS: значения xlDown и xlUp составляют -4121 и -4162.

С наилучшими пожеланиями Кай

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Прежде всего End(xlDown) и End(xlUp) - это не более чем ...

  • End(xlDown) = Нажатие Ctrl + Стрелка вниз
  • End(xlUp) = Нажатие Ctrl + Стрелка вверх

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

Ошибка переполнения возникает просто потому, что если вы, например,. выделите ячейку A1 на пустом листе и выполните .End(xlDown), чтобы выбрать самую последнюю ячейку на листе. И если вы сейчас вставите что-то, то произойдет сбой, поскольку превышено максимальное количество строк в Excel.

Чтобы найти последнюю использованную строку столбца, лучше использовать End(xlUp) вместо End(xlDown), например:

LastUsedRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
'finds the last used row in column A
0 голосов
/ 16 мая 2018

Конец (xldown) имеет тот же эффект, что и нажатие кнопки управления, и стрелка вниз (и Конец (xlright) - это кнопка управления и стрелка вправо. Если вы нажмете эти клавиши в ячейке, вы увидите, что она переходит на следующее пересечение заполненнойи пустые ячейки (или край электронной таблицы, если на пути нет заполненных ячеек)

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