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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2011, 13:50   #1
madex
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 61
По умолчанию Макрос переноса данных.

Имеется исходник макроса. Берет данные из одной книги, как я понял с разных листов из конкретных ячеек и заносит в книгу "реестр". Хотелось бы его переделать чтоб брал данные из ячеек с одного листа и переносил в ячейки на другой лист(все в одной книге). Не понятно мне где конкретное указание ячеек. Если возможно распишите по строкам где что делается, зачем цикл с условием, и где же обозначение ячеек.

Цитата:
Сохранение в реестр квитанции или счета
Public Sub SaveReestr()
Dim i As Integer, r As Object, p As Object, s As Object, u As Object, m As Object, fr As String
Dim o As Object
TestOpen Reestr
Set r = Workbooks(Reestr).Sheets(1)
Set p = Workbooks(Plategka).Sheets("Данные" )
Set s = Workbooks(Plategka).Sheets("Счет")
Set k = Workbooks(Plategka).Sheets("квитанц ия")
Set m = Workbooks(Plategka).Sheets("мастера ")

For i = 2 To r.[A1].CurrentRegion.Rows.Count
If r.Cells(i, 1) = p.Cells(1, 2) Then Exit For
Next i

r.Cells(i, 1) = p.Cells(1, 2)
r.Cells(i, 2) = p.Cells(5, 2)

r.Cells(i, 3) = p.Cells(9, 2)
r.Cells(i, 4) = p.Cells(3, 2)
r.Cells(i, 5) = p.Cells(4, 2)
r.Cells(i, 6) = p.Cells(2, 2)
r.Cells(i, 7) = k.Cells(8, 3)
r.Cells(i, 8) = p.Cells(8, 2)
r.Cells(i, 9) = s.Cells(26, 7) / 100
r.Cells(i, 10) = s.Cells(24, 7) / 100
r.Cells(i, 11) = s.Cells(25, 7) / 100
r.Cells(i, 12) = p.Cells(5, 3)
r.Cells(i, 13) = m.Cells(p.Cells(1, 3) + 1, 1)
r.Cells(i, 14) = p.Cells(11, 1)
r.Cells(i, 15) = p.Cells(11, 2)
r.Cells(i, 16) = p.Cells(11, 3)
r.Cells(i, 17) = p.Cells(1, 3)
r.Cells(i, 18) = p.Cells(8, 3)
r.Cells(i, 19) = p.Cells(8, 4)
r.Cells(i, 20) = p.Cells(7, 2)
r.Cells(i, 21) = p.Cells(7, 3)
r.Cells(i, 22) = p.Cells(7, 4)

Set o = SearchObj(ThisWorkbook.Sheets("Данн ые"), "RestList")
' fr = Trim(Str(r.[A1].CurrentRegion.Rows.Count))
' fr = "[" + Reestr + "]Реестр!$A$2:$A$" + fr
' o.ControlFormat.ListFillRange = fr
madex вне форума Ответить с цитированием
Старый 16.03.2011, 17:35   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Чтоб в одной книге - замените Workbooks(Reestr) на Workbooks(Plategka).
Только проследите, что не наложился индекс листа на его название.
Цикл с условием - ищется первое совпадение в столбце А Workbooks(Reestr).Sheets(1) с B1 Workbooks(Plategka).Sheets("Данные" ).
Как совпало - это значение i дальше используется. Если не совпало - данные копируются под существующими данными (т.к. i добежит до r.[A1].CurrentRegion.Rows.Count)
"где конкретное указание ячеек" - Cells(1, 2) - это первая строка, вторая колонка, т.е. B1.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 16.03.2011, 23:56   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Хотелось бы его переделать чтоб брал данные из ячеек с одного листа и переносил в ячейки на другой лист
передеелал согласно Ваших пожеланий
Вложения
Тип файла: rar книга621.rar (10.2 Кб, 120 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.03.2011, 08:59   #4
madex
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 61
По умолчанию

ОГРОМНОЕ спасибо откликнувшимся буду разбираться и подгонять под свой проект.
madex вне форума Ответить с цитированием
Старый 17.03.2011, 09:27   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

madex, не торопились бы Вы благодарить "всех" откликнувшихся, не разобравшись, что Вам выслали
мой макрос "дуркует", хватает случайную ячейку и переносит на другой лист опять в случайную ячейку. хотя... как пример...
навеяла вчера Ваша "исчерпывающая" постановка задачи
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.03.2011, 10:19   #6
madex
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 61
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
madex, не торопились бы Вы благодарить "всех" откликнувшихся, не разобравшись, что Вам выслали
мой макрос "дуркует", хватает случайную ячейку и переносит на другой лист опять в случайную ячейку. хотя... как пример...
навеяла вчера Ваша "исчерпывающая" постановка задачи
Главное что мне нужно было, это разъяснения по исходному макросу, я их получил. Теперь попробую что нибудь сделать и если где застряну я опять тут. А строка 1 + Int(Rnd * Sheets(cs).UsedRange.Rows.Count) меня и правда смутила, вот видимо где кроется хаотичное поведение с ячейками
madex вне форума Ответить с цитированием
Старый 17.03.2011, 16:53   #7
madex
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 61
По умолчанию

Как сделать через макрос чтоб все ячейки диапазоном с A по Н и до самого низа с листа 1 дублировались на на лист 2. А то через равно в каждую ячейку топорно и файл перегружает.
Вложения
Тип файла: rar Книга1.rar (1.8 Кб, 62 просмотров)

Последний раз редактировалось madex; 17.03.2011 в 16:55.
madex вне форума Ответить с цитированием
Старый 17.03.2011, 17:12   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Без формул и форматов, только значения:
Код:
Sub dubl()
Dim a
With Sheets("Лист1")
a = .Range(.Cells(1, 1), .Cells(Cells(.Rows.Count, 1).End(xlUp).Row, 8)).Value
End With

With Sheets("Лист2")
.[a1].Resize(UBound(a, 1), UBound(a, 2)).Value = a
End With

End Sub
Зато быстро.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 17.03.2011, 17:51   #9
madex
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 61
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Без формул и форматов, только значения:
Код:
Sub dubl()
Dim a
With Sheets("Лист1")
a = .Range(.Cells(1, 1), .Cells(Cells(.Rows.Count, 1).End(xlUp).Row, 8)).Value
End With

With Sheets("Лист2")
.[a1].Resize(UBound(a, 1), UBound(a, 2)).Value = a
End With

End Sub
Зато быстро.
Работает! Но как обычно бывает с новичками не все условия написал. Если на лист 1 добавляется новая строчка то и на лист 2 она тоже должна вносится(мож по времени макрос чтоб запускался через 30 сек например, вам виднее). В общем что то типа условия A1=!Лист1 А1. Но по всему моему диапазону.
madex вне форума Ответить с цитированием
Старый 17.03.2011, 18:23   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Можно сделать обновление этих данных по событию изменения на первом листе, или при переходе на второй лист.
Но вероятно сперва нужно поставить полную очистку от всех данных второго листа, иначе при добавлении строки на первом листе строка добавится, а при удалении - не удалится.
Но вообще не нравится мне эта затея... Нельзя как нибудь иначе работу организовать?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос переноса строк Extril Microsoft Office Excel 30 25.01.2015 22:15
Макрос переноса строк работает не корректно Kraimon Microsoft Office Excel 13 20.02.2011 15:40
макрос для переноса введенных данных vostok Microsoft Office Excel 2 27.11.2010 11:16
Макрос для переноса данных в виде таблицы из Excel в Word Jevgeni85 Microsoft Office Excel 2 25.08.2010 16:52