Вопрос № 86103: Здравствуйте! У меня такая проблема. Есть таблица в Excel. Строки 5-14 -заполнены. 15-25- пустые. Когда становится данный лист активным, курсор должен находится в первой пустой строке таблицы. В таблицу будут постоянно вносится новые данные. Я пробов...
Вопрос № 86.103
Здравствуйте! У меня такая проблема. Есть таблица в Excel. Строки 5-14 -заполнены. 15-25- пустые. Когда становится данный лист активным, курсор должен находится в первой пустой строке таблицы. В таблицу будут постоянно вносится новые данные. Я пробовала двумя путями написать макрос, но в обоих случаях возникают ошибки.
1способ: Над таблицей в ячейке "B3" содержится формула, которая определяет номер первой пустой строки в моей таблице. Пробовала создать макрос, на переход в ячейку со следующим адресом: столбец = B, строка = значению в ячейке "B3". Не получается определить меняющийся адрес ячейки.
2способ: Задавала проверку ячеек, начиная с "B5" на содержимое. Если "не пусто", то переход на следующую строку. Если "пусто", то ничего не делать. Если писала макрос с оператором For ....Next, то при разовой проверки все получается. Т.е, если в макросе я задаю начало проверки с заполненной ячейки, то активной становится ячейка на следующей строке. Если задаю начальной ячейку на пустой строке, то переход на следующую строку не происходит.
Но как только я применяю оператор Do... Loop (разные варианты), то программа не останавливается на первой пустой ячейке, а "скачет" дальше. А так как ВСЕ строки под таблицей скрыты, то на последней строке Excel зависает.
Подскажите пожалуйста, как правильно написать макросы в обоих случаях. (С запуском макроса при активации листа проблем нет.) Заранее спасибо.
Отправлен: 09.05.2007, 03:20
Вопрос задала: Lanna (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Тесленко Евгений Алексеевич
Здравствуйте, Lanna!
Поупражняйтесь с приложенным кодом.
Удачи.
Евгений.
Отвечает: HookEst
Здравствуйте, Lanna!
Для поиска первой не пустой ячейки, без перебора всех ячеек, удобно использовать метод Range.End
Он находит границы региона , содержащего Range. Работает также как нажатие Ctrl+Стрелка.
Например если у Вас ячейки B5:B15 имеют значения, а B16 - нет, и Вы выделив ячейку B5 нажмете Ctrl+СтрелкаВниз, активной станет ячейка B15(т.е. самая нижняя ячейка из региона B5:B15, содержащая значение), остается только сместиться еще вниз на одну строку(можно использовать Offset) и мы получим искомую - первую пустую ячейку:
Private Sub Worksheet_Activate()
Range("B5").End(xlDown).Offset(1).Activate
End Sub
Можно наоборот, начинать с самой нижней пустой ячейки, например B25(заведомо пустая), нажав Ctrl+СтрелкаВверх, активной станет также B15 (т.е. первая от B25 снизу ячейка, содержащая значение)
или макросом:
Private Sub Worksheet_Activate()
Range("B25").End(xlUp).Offset(1).Activate
End Sub
Главное что-бы был заведомо определен порядок пустых и не пустых регионов.
Непонятно, как должен вести себя Ваш макрос когда все строки, вплоть до 25 будут заполнены, но всегда можно вставить дополнительную проверку.
Будут вопросы, пишите.
Успехов.
Ответ отправил: HookEst (статус: Студент)
Ответ отправлен: 10.05.2007, 06:07