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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2014, 10:43   #1
maxvip
Форумчанин
 
Регистрация: 11.05.2009
Сообщений: 139
По умолчанию ...вставить диапазон из другого листа...

Здравствуйте! задача такова - нужно определить последнюю заполненную строку и скопировать в следующую содержимое диапазона с другого листа
есть код

Private Sub CommandButton1_Click()
Dim nomer As Long
nomer = Worksheets("данные").Range("p1") 'переменная получает количество строк для обработки
For y = 2 To nomer
If Worksheets("данные").Cells(10, y) = "" Then
Worksheets("формы").Cells(Rows.Coun t, 1).End(xlUp).Offset(1) = Worksheets("данные").Range("ay:ny")
' определяю последнюю заполненную ячейку с первом столбце и пытаюсь вставить данные
End If
Next y

End Sub

очевидно что здесь все не так, а как надо??? не могу сообразить

Последний раз редактировалось maxvip; 29.05.2014 в 11:12.
maxvip вне форума Ответить с цитированием
Старый 29.05.2014, 11:44   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

все делается одной строкой кода

Код:
Worksheets("данные").Range("АдресКопируемогоДиапазона").Copy  Worksheets("формы").Cells(Rows.Count, 1).End(xlUp).Offset(1)
EducatedFool вне форума Ответить с цитированием
Старый 29.05.2014, 11:53   #3
maxvip
Форумчанин
 
Регистрация: 11.05.2009
Сообщений: 139
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
все делается одной строкой кода

Код:
Worksheets("данные").Range("АдресКопируемогоДиапазона").Copy  Worksheets("формы").Cells(Rows.Count, 1).End(xlUp).Offset(1)
пишет что "данные не могут быть вставлены изза несоответствия областей копирования и вставки"!!
maxvip вне форума Ответить с цитированием
Старый 29.05.2014, 12:29   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Неудивительно
Думаете, почему я заменил в своем коде
Range("ay:ny")
на
Range("АдресКопируемогоДиапазона")

потому что не получится вставить СТОЛБЦЫ ЦЕЛИКОМ ("ay:ny")
начиная с какой-то там строки листа - они не влезут по высоте

вот было бы, например, Worksheets("данные").Range("a2:n500 ")
- всё бы заработало

перед копированием, надо находить адрес копируемого диапазона (а не копировать диапазон ячеек высотой больше миллиона строк)
EducatedFool вне форума Ответить с цитированием
Старый 29.05.2014, 12:46   #5
maxvip
Форумчанин
 
Регистрация: 11.05.2009
Сообщений: 139
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Неудивительно
Думаете, почему я заменил в своем коде
Range("ay:ny")
на
Range("АдресКопируемогоДиапазона")

потому что не получится вставить СТОЛБЦЫ ЦЕЛИКОМ ("ay:ny")
начиная с какой-то там строки листа - они не влезут по высоте

вот было бы, например, Worksheets("данные").Range("a2:n500 ")
- всё бы заработало

перед копированием, надо находить адрес копируемого диапазона (а не копировать диапазон ячеек высотой больше миллиона строк)
адрес КОПИРУЕМОГО диапазона я нашел - это строка от "a" до "n" а номер строки определяет переменная "y", то есть получается - Range("ay:ny"). но не вставляется потому что пытаемся вставить диапазон в одну ячейку. я правильно понял или что то путаю???
maxvip вне форума Ответить с цитированием
Старый 29.05.2014, 15:41   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
номер строки определяет переменная "y", то есть получается - Range("ay:ny")
нифига не получается...
надо соблюдать синтаксис языка программирования:
Код:
Range("a" & y & ":n" & y)
а у вас вставлялись СТОЛБЦЫ , начиная со столбца AY и заканчивая столбцом NY
EducatedFool вне форума Ответить с цитированием
Старый 29.05.2014, 15:53   #7
maxvip
Форумчанин
 
Регистрация: 11.05.2009
Сообщений: 139
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
нифига не получается...
надо соблюдать синтаксис языка программирования:
Код:
Range("a" & y & ":n" & y)
а у вас вставлялись СТОЛБЦЫ , начиная со столбца AY и заканчивая столбцом NY
да-да! я уже исправил! однако возникла новая трабла!
вот код:


Private Sub CommandButton1_Click()
Dim nomer As Long
nomer = Worksheets("данные").Range("p1") 'переменная получает количество строк для обработки
For y = 2 To nomer
If Worksheets("данные").Cells(10, y) = "" Then
Worksheets("данные").Range("a" & y & ":n" & y).Copy Worksheets("формы").Cells(Rows.Coun t, 1).End(xlUp).Offset(1)

End If
Next y

End Sub

по идее если в столбце "p" на листе "данные" нет значений, то выводиться на лист "формы" должны все заполненные строки, так нет же! воводятся не все и не понятно по каким признакам.
maxvip вне форума Ответить с цитированием
Старый 29.05.2014, 16:21   #8
maxvip
Форумчанин
 
Регистрация: 11.05.2009
Сообщений: 139
По умолчанию

я все победил! спасибо за помощь!!!
maxvip вне форума Ответить с цитированием
Старый 22.08.2017, 16:56   #9
Nnnk7
Новичок
Джуниор
 
Регистрация: 22.08.2017
Сообщений: 1
По умолчанию

Всем привет! Помогите, пожалуйста, правильно написать код.
Дано: два листа одной книги, на 1 листе имеются две таблицы с пустыми строками между ними, на 2 листе данные. Диапазоны на обоих листах динамичны по количеству строк. Копируемый диапазон занимает столбцы A:AC.
Нужно скопировать данные со 2го листа в первую пустую ячейку после первой таблицы на первом листе.
По моему коду он копирует, вот только в самый низ 2 таблицы (что логично по коду). Как сделать, чтобы он вставлял данные в ячейку после 1 таблицы? В начале кода я Ее уже нашла, но хоть убей не могу понять как правильно указать на неё ссылку в последней строке кода.

Dim wr, wm as Worksheet
Dim rng1, rng2 as range
Dim lastrow1, lastrow2, lrow1 as Long

Set wr = ThisWorkbook.Worksheets ("R")
wr.Activate
lastrow1 = Columns (1).Find(Empty, Cells(Rows.Count, 1), xlValues, xlWhole)

Set wm = ThisWorkbook.Worksheets ("M")
wm.activate

lastrow2 = wm.cells(Rows.Count, 1).End(xlUp).row
lrow1 = lastrow1 + lastrow2

Set rng2 = wm.range(Cells(1,1), Cells(lastrow2, 29))

wr.Activate
rng2.Copy wr.Cells(Rows.Count, 1).End(xlUp).Rows

В конце я пробовала и Cells(lastrow1, 1) и range ("a" & lastrow1 & "ac" & lrow1), все мимо(
Очень надеюсь на вашу помощь.)
Nnnk7 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение листа данными с другого листа. Pasha_Z Microsoft Office Excel 6 17.01.2014 20:01
Диапазон из другого Листа для поля со списком Udgin28 Microsoft Office Excel 1 04.07.2012 12:59
Ссылка ячеек одного листа на ячейки другого листа n0str0m0 Microsoft Office Excel 10 31.12.2011 12:11
Как вставить диапазон в конкретную строку листа Excel со сдвигом вниз имеющихся? malor Microsoft Office Excel 3 17.01.2010 17:48
Как вычесть один диапазон из другого? viter.alex Microsoft Office Excel 11 20.01.2009 16:30