Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.01.2009, 15:16   #1
NikolayGVB
Пользователь
 
Регистрация: 12.01.2009
Сообщений: 13
Вопрос Ссылка на динамический диапазон данных

Дорогие Коллеги,

очень нужен Ваш профессиональный совет. Я пока в VBA не силен, многое не получается

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

Код:
' LastRow = номер последней ячейки в исходном файле (например, 144), _
CurrentClm = индекс выбранного столбца (например, AB), _
LastCell = соответственно, полное наименование последней ячейки выделяемого диапазона (в данном случае значение AB144)

LastCell = CurrentClm & LastRow ' значение LastCell = AB144
Range("AB1:LastCell").Select
Selection.Copy
Попытка использования Range("AB1:LastCell").Select вызывает ошибку "Method "Range" of object "_Global" failed".

Подскажите, пожалуйста, как ПРАВИЛЬНО сослаться на диапазон.

Заранее благодарен,
с уважением,
Николай
NikolayGVB вне форума
Старый 13.01.2009, 16:34   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Замените строку Range("AB1:LastCell").Select на Range("AB1:" & LastCell).Select

Но выделять диапазон ячеек для копирования совсем необязательно.

Лучше использовать что-то вроде этого:
Код:
    For i = 15 To 23
        Range(Cells(1, i), Cells(65000, i).End(xlUp)).Copy   [a5].Offset(, i - 11) 
    Next i
Этот код скопирует содержимое столбцов с 15 по 23-й (копируя диапазоны ячеек, начиная с первой, и заканчивая последней заполненной) в столбцы 1-9, начиная вставку с 5-й строки (Offset - это смещение)

Конструкция Cells(65000, i).End(xlUp) возвращает ссылку на последнюю заполненную ячейку в данном столбце (равносильно выделению ячейки в строке 65000, и последующему нажатию Ctrl + СтрелкаВверх)




А этот код произведёт копирование на другой лист, начав вставку с ячейки B3:
Код:
    For i = 11 To 23
        Range(Cells(1, i), Cells(65000, i).End(xlUp)).Copy   Worksheets("ЛистДляКопии").[b3]
    Next i
Здесь есть информация по теме.

Последний раз редактировалось EducatedFool; 13.01.2009 в 16:43.
EducatedFool вне форума
Старый 13.01.2009, 18:00   #3
NikolayGVB
Пользователь
 
Регистрация: 12.01.2009
Сообщений: 13
По умолчанию

ЗдОрово, работает! ОГРОМНОЕ спасибо за высокопрофессиональную помощь, очень Вам признателен.

С уважением,
Николай
NikolayGVB вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как просуммировать динамический диапазон abocharov Microsoft Office Excel 8 22.10.2008 18:47
Диапазон графика. Dvornick Microsoft Office Excel 4 20.09.2008 23:08
Диапазон limon Помощь студентам 5 06.09.2008 21:44
Как написать в коде чтобы диапазон А копировался как значение в диапазон В. Dorvir Microsoft Office Excel 12 23.05.2008 22:11
диапазон времени chekanoff БД в Delphi 34 02.03.2008 01:28