Помогите пожалуйста. Очень нужен макрос, но нет опыта в написании. Автоматическим макросом не получается выполнить все требования. Суть в чем: есть два файла – форма 1 и форма 2 (общий список) Необходимо данные из файла №1 перенести в общий список (Форма 2). Файл 1 всегда стандартный, меняется только данные. Алгоритм такой: Сначала копируется в форму 2 номер исполнительного листа, если он уже есть в списке, то находит эту строку и меняет ее, если нет в списке – с новой строки создает запись. Далее в эту строку подтягивает все остальные данные с формы 1 (ФИО, основной долг, удержания….все по таблице). В конце строки вставляет текущую дату. Не могу понять как это все сотворить, помогите у кого есть возможность и знания
Помогите пожалуйста. Очень нужен макрос, но нет опыта в написании. Автоматическим макросом не получается выполнить все требования. Суть в чем: есть два файла – форма 1 и форма 2 (общий список) Необходимо данные из файла №1 перенести в общий список (Форма 2). Файл 1 всегда стандартный, меняется только данные. Алгоритм такой: Сначала копируется в форму 2 номер исполнительного листа, если он уже есть в списке, то находит эту строку и меняет ее, если нет в списке – с новой строки создает запись. Далее в эту строку подтягивает все остальные данные с формы 1 (ФИО, основной долг, удержания….все по таблице). В конце строки вставляет текущую дату. Не могу понять как это все сотворить, помогите у кого есть возможность и знанияOmeg
К сообщению приложен файл:_1.xlsx
(10.7 Kb)
·
_2--.xlsx
(35.6 Kb)
Сообщение отредактировал Pelena - Четверг, 17.01.2013, 16:51
Добрый вечер, уважаемый GWolf! Пометил строки, количество которых может изменяться. Если это сильно осложняет положение, можно количество полей оставить в таком виде) Спасибо что откликнулись, два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чему((
Добрый вечер, уважаемый GWolf! Пометил строки, количество которых может изменяться. Если это сильно осложняет положение, можно количество полей оставить в таком виде) Спасибо что откликнулись, два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чему((Omeg
Пока ждал от Вас ответа, набросал макрос для неизменного количества строк в файле-источнике:
[vba]
Код
Sub AddToBase_Щелкнуть() ' Dim tPath As String Dim wbOp As Object Dim stroka As String Dim flag As Boolean
Dim P_familija As String, P_imja As String, P_otcestwo As String Dim P_NomIspList As String Dim P_SumOsnDolg As String, P_SumUderj As String, P_SumPerecisl As String
'откроем файл-приемник '-- определим путь к файлу-приемнику и, если он лежит в той же папке, что и _ файл-источник, то путь определяем при помощи .Path tPath = "" tPath = ThisWorkbook.Path 'открываем файл-приемник с занесением его в объектную переменную Set wbOp = Workbooks.Open(Filename:=tPath & "\_2--.xlsm")
With wbOp '- в файле-приемнике With .Worksheets("Лист1") '- на листе "Лист1" flag = False '- значение флага для результата поиска nR = 5 '- стартовое значение счетчика (№ строки начала поиска) Do '- "бежать по кругу пока не ... stroka = .Cells(nR, 5).Value '- в переменную stroka значение из текущей строки If stroka = P_NomIspList Then '- если значение переменной = значение P_NomIspList (эталона), то flag = True '- флаг в ИСТИНА Exit Do '- прервать цикл End If nR = nR + 1 '- изменение значения счетчика строк Loop While .Cells(nR, 1).Text <> "" '... будет ячейка пуста
'после того как цикл прерван или завершился, анализируем флаг If flag = True Then '- нашли совпадающий With .Cells(nR, 6) '- Начальный баланс .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumOsnDolg End With With .Cells(nR, 7) '- Сумма удержанная .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumUderj End With With .Cells(nR, 8) '- Сумма перечисленная .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumPerecisl End With With .Cells(nR, 9) '- Остаток долга .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = CStr(CDbl(P_SumOsnDolg) + CDbl(P_SumUderj) - CDbl(P_SumPerecisl)) '- Остаток долга End With .Cells(nR, 10) = Date '- Дата Else '- не нашли совпадающий .Cells(nR, 1) = .Cells(nR - 1, 1).Value + 1 '- № п.п. .Cells(nR, 2) = P_familija '- Фамилия .Cells(nR, 3) = P_imja '- Имя .Cells(nR, 4) = P_otcestwo '- Отчество .Cells(nR, 5) = P_NomIspList '- Номер исполнительного листа With .Cells(nR, 6) '- Начальный баланс .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumOsnDolg End With With .Cells(nR, 7) '- Сумма удержанная .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumUderj End With With .Cells(nR, 8) '- Сумма перечисленная .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumPerecisl End With With .Cells(nR, 9) '- Остаток долга .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = CStr(CDbl(P_SumOsnDolg) + CDbl(P_SumUderj) - CDbl(P_SumPerecisl)) '- Остаток долга End With .Cells(nR, 10) = Date '- Дата End If End With
nR = 0 '- обнуляем счетчик 'закроем файл-приемник с сохранением .Close SaveChanges:=True End With Set wbOp = Nothing '- чистим объектную переменную
'очистим значения переменных P_familija = "" P_imja = "" P_otcestwo = "" P_NomIspList = "" P_SumOsnDolg = "" P_SumUderj = "" P_SumPerecisl = "" End Sub
[/vba]
полагаю, что в виду того, что Вы
Цитата (Omeg)
два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чему
мой труд не будет бесполезен. Для случая с изменяющимися координатами "Итого начислено" и "Итого удержано" код будет несколько другим. Если будете иметь немного терпения то я таки и его Вам напишу! С уважением GWolf.
Доброй ночи, уважаемый Omeg!
Пока ждал от Вас ответа, набросал макрос для неизменного количества строк в файле-источнике:
[vba]
Код
Sub AddToBase_Щелкнуть() ' Dim tPath As String Dim wbOp As Object Dim stroka As String Dim flag As Boolean
Dim P_familija As String, P_imja As String, P_otcestwo As String Dim P_NomIspList As String Dim P_SumOsnDolg As String, P_SumUderj As String, P_SumPerecisl As String
'откроем файл-приемник '-- определим путь к файлу-приемнику и, если он лежит в той же папке, что и _ файл-источник, то путь определяем при помощи .Path tPath = "" tPath = ThisWorkbook.Path 'открываем файл-приемник с занесением его в объектную переменную Set wbOp = Workbooks.Open(Filename:=tPath & "\_2--.xlsm")
With wbOp '- в файле-приемнике With .Worksheets("Лист1") '- на листе "Лист1" flag = False '- значение флага для результата поиска nR = 5 '- стартовое значение счетчика (№ строки начала поиска) Do '- "бежать по кругу пока не ... stroka = .Cells(nR, 5).Value '- в переменную stroka значение из текущей строки If stroka = P_NomIspList Then '- если значение переменной = значение P_NomIspList (эталона), то flag = True '- флаг в ИСТИНА Exit Do '- прервать цикл End If nR = nR + 1 '- изменение значения счетчика строк Loop While .Cells(nR, 1).Text <> "" '... будет ячейка пуста
'после того как цикл прерван или завершился, анализируем флаг If flag = True Then '- нашли совпадающий With .Cells(nR, 6) '- Начальный баланс .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumOsnDolg End With With .Cells(nR, 7) '- Сумма удержанная .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumUderj End With With .Cells(nR, 8) '- Сумма перечисленная .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumPerecisl End With With .Cells(nR, 9) '- Остаток долга .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = CStr(CDbl(P_SumOsnDolg) + CDbl(P_SumUderj) - CDbl(P_SumPerecisl)) '- Остаток долга End With .Cells(nR, 10) = Date '- Дата Else '- не нашли совпадающий .Cells(nR, 1) = .Cells(nR - 1, 1).Value + 1 '- № п.п. .Cells(nR, 2) = P_familija '- Фамилия .Cells(nR, 3) = P_imja '- Имя .Cells(nR, 4) = P_otcestwo '- Отчество .Cells(nR, 5) = P_NomIspList '- Номер исполнительного листа With .Cells(nR, 6) '- Начальный баланс .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumOsnDolg End With With .Cells(nR, 7) '- Сумма удержанная .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumUderj End With With .Cells(nR, 8) '- Сумма перечисленная .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = P_SumPerecisl End With With .Cells(nR, 9) '- Остаток долга .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 " .Value = CStr(CDbl(P_SumOsnDolg) + CDbl(P_SumUderj) - CDbl(P_SumPerecisl)) '- Остаток долга End With .Cells(nR, 10) = Date '- Дата End If End With
nR = 0 '- обнуляем счетчик 'закроем файл-приемник с сохранением .Close SaveChanges:=True End With Set wbOp = Nothing '- чистим объектную переменную
'очистим значения переменных P_familija = "" P_imja = "" P_otcestwo = "" P_NomIspList = "" P_SumOsnDolg = "" P_SumUderj = "" P_SumPerecisl = "" End Sub
[/vba]
полагаю, что в виду того, что Вы
Цитата (Omeg)
два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чему
мой труд не будет бесполезен. Для случая с изменяющимися координатами "Итого начислено" и "Итого удержано" код будет несколько другим. Если будете иметь немного терпения то я таки и его Вам напишу! С уважением GWolf.GWolf
К сообщению приложен файл:_1.xlsm
(32.1 Kb)
·
_2-.xlsm
(33.4 Kb)
Путей к вершине множество. Этот один из многих...
Сообщение отредактировал GWolf - Четверг, 17.01.2013, 20:01
Спасибо Огромное!!!!! Вы меня очень выручили!!!! Я бы не справился точно!!! Уважаемы GWolf, если у вас будет свободное время и желание, напишите пожалуйста еще для случая с изменяющимися координатами "Итого начислено" и "Итого удержано". Я Вам крайне благодарен! Вы правда меня очень выручили))
Спасибо Огромное!!!!! Вы меня очень выручили!!!! Я бы не справился точно!!! Уважаемы GWolf, если у вас будет свободное время и желание, напишите пожалуйста еще для случая с изменяющимися координатами "Итого начислено" и "Итого удержано". Я Вам крайне благодарен! Вы правда меня очень выручили))Omeg
для случая с изменяющимися координатами "Итого начислено" и "Итого удержано"
на скрепке. В файле: - по зеленой кнопке - с неизменными координатами; - по смайлику "Улыбка" - с изменяющимися координатами "Итого начислено" и "Итого удержано"
Успехов! Обращайтесь... С уважением GWolf.
Цитата (Omeg)
для случая с изменяющимися координатами "Итого начислено" и "Итого удержано"
на скрепке. В файле: - по зеленой кнопке - с неизменными координатами; - по смайлику "Улыбка" - с изменяющимися координатами "Итого начислено" и "Итого удержано"
Сегодня тестил, отлично работает. Только второй вариант ошибку почему то выдает, отмечает первую строку в макросе, не могу понять что ему нужно. Но первый вариант работает, пользуюсь им. Еще раз спасибо!
Сегодня тестил, отлично работает. Только второй вариант ошибку почему то выдает, отмечает первую строку в макросе, не могу понять что ему нужно. Но первый вариант работает, пользуюсь им. Еще раз спасибо!Omeg
Только второй вариант ошибку почему то выдает, отмечает первую строку в макросе, не могу понять что ему нужно.
Посмотрел код, действительно это моя недоработка, за что приношу свои извинения. Старый вариант кода: [vba]
Код
Sub AddInFlOu_Щелкнуть() 'Ответ на нажатие смайлика "Улыбка" Dim tPath As String Dim wbOp As Object Dim stroka As String Dim flag As Boolean Dim nR As Long, nREndFrm As Long
Dim P_familija As String, P_imja As String, P_otcestwo As String Dim P_NomIspList As String Dim P_SumOsnDolg As String, P_SumUderj As String, P_SumPerecisl As String
nREndFrm = 4 Do nREndFrm = nREndFrm + 1 Loop While .Cells(nREndFrm, 1).Text <> "Итого удержано"
If nREndFrm = 65000 Then MsgBox "Что-то с формой не так!?" & Chr(10) & _ "Не могу найти ячейку в первой колонке" & Chr(10) & _ "с фразой <Итого удержано>", vbInformation + vbOKOnly, "Нештатное завершение!"
[/vba]
В строке [vba]
Код
Loop While .Cells(nREndFrm, 1).Text <> "Итого удержано"
[/vba] точка, с которой начинается "фраза" указывает что у "фразы" есть начало. Обычно это конструкция With ... End With. В данном случае я счел нецелесообразным применение такой конструкции, но "фразу" не поправил - поторопился. Т.о. строка кода должена выглядеть так: [vba]
Код
Loop While ThisWorkbook.ActiveSheet.Cells(nREndFrm, 1).Text <> "Итого удержано"
[/vba]
В прилагаемом файле ошибка мною исправлена.
Доброго дня, уважаемый Omeg!
Вы писали:
Цитата (Omeg)
Только второй вариант ошибку почему то выдает, отмечает первую строку в макросе, не могу понять что ему нужно.
Посмотрел код, действительно это моя недоработка, за что приношу свои извинения. Старый вариант кода: [vba]
Код
Sub AddInFlOu_Щелкнуть() 'Ответ на нажатие смайлика "Улыбка" Dim tPath As String Dim wbOp As Object Dim stroka As String Dim flag As Boolean Dim nR As Long, nREndFrm As Long
Dim P_familija As String, P_imja As String, P_otcestwo As String Dim P_NomIspList As String Dim P_SumOsnDolg As String, P_SumUderj As String, P_SumPerecisl As String
nREndFrm = 4 Do nREndFrm = nREndFrm + 1 Loop While .Cells(nREndFrm, 1).Text <> "Итого удержано"
If nREndFrm = 65000 Then MsgBox "Что-то с формой не так!?" & Chr(10) & _ "Не могу найти ячейку в первой колонке" & Chr(10) & _ "с фразой <Итого удержано>", vbInformation + vbOKOnly, "Нештатное завершение!"
[/vba]
В строке [vba]
Код
Loop While .Cells(nREndFrm, 1).Text <> "Итого удержано"
[/vba] точка, с которой начинается "фраза" указывает что у "фразы" есть начало. Обычно это конструкция With ... End With. В данном случае я счел нецелесообразным применение такой конструкции, но "фразу" не поправил - поторопился. Т.о. строка кода должена выглядеть так: [vba]
Код
Loop While ThisWorkbook.ActiveSheet.Cells(nREndFrm, 1).Text <> "Итого удержано"
Все заработало идеально!! Спасибо огромное за помощь!!!! Все заработало идеально!! Спасибо огромное за помощь!!!!Omeg
Доброго дня всем! Omeg Если это возможно, выложите пожалуйста свой работающий файл на форум. А то у меня во вновь созданую книгу (на чистый лист) одна строка копируется , но только одна строка ИТОГов. А вот меняю ФИО на другое, чтобы продолжить список, и не копирует. Копирует только, когда вручную удаляю предыдущую строку. В то же время, если я правильно понял условия задачи, новые даные, то есть, новая строка с другими даными, должна добавляться в список (ниже предыдущей). А вот у ваш шаблон, совсем ничего не копирует.
Цитата (Omeg)
Все заработало идеально!! Спасибо огромное за помощь!!!! Все заработало идеально!! Спасибо огромное за помощь!!!!Omeg
Доброго дня всем! Omeg Если это возможно, выложите пожалуйста свой работающий файл на форум. А то у меня во вновь созданую книгу (на чистый лист) одна строка копируется , но только одна строка ИТОГов. А вот меняю ФИО на другое, чтобы продолжить список, и не копирует. Копирует только, когда вручную удаляю предыдущую строку. В то же время, если я правильно понял условия задачи, новые даные, то есть, новая строка с другими даными, должна добавляться в список (ниже предыдущей). А вот у ваш шаблон, совсем ничего не копирует.Муля2010
Здраствуйте! У меня схожая проблема с Omeg, только порядок действий не много другой. Есть форма отчетности (в ней меняется только кол-во строк max значение 80 строк) и сводная таблица этих форм. Суть проблемы в том что бы загрузить данные из закрытого файла формы отчетности в открытый файл сводной таблицы. Здесь на форуме нашел внушительный список макросов, среди которых есть вот такие:
Я думаю что эти макросы должны участвовать в данной выгрузке, но как их правильно применить не хватает навыков
Если кому не трудно, прошу поставить на путь истинный в написании данной задачи)
К сообщению прилагаю файл отчетной формы и сводной формы. Заранее спасибо тем кто откликнется:)
[admin]DiRT_ms, оформляйте коды тегами![/admin]
Здраствуйте! У меня схожая проблема с Omeg, только порядок действий не много другой. Есть форма отчетности (в ней меняется только кол-во строк max значение 80 строк) и сводная таблица этих форм. Суть проблемы в том что бы загрузить данные из закрытого файла формы отчетности в открытый файл сводной таблицы. Здесь на форуме нашел внушительный список макросов, среди которых есть вот такие:
Суть проблемы в том что бы загрузить данные из закрытого файла формы отчетности в открытый файл сводной таблицы.
Если немножичко погуглить интернет, то можно выяснить следующую особенность: Если нам нужно загрузить из ЗАКРЫТОЙ книги данные, то мы эту книгу должны таки ОТКРЫТЬ, только не руками, а программно! Ну а дальше все как всегда: идем по записям ищем то, что нам нужно и переносим туда куда нужно. После такой "прогулки" незабываем книгу-источник ЗАКРЫТЬ, опять же программно!
Вы можете спросить: - Почему нет кода? - Ответ прост! Код есть! Сообщение № 4. Если кто не понял - спрашивайте - отвечу.
Добрый день!
Цитата (DiRT_ms)
Суть проблемы в том что бы загрузить данные из закрытого файла формы отчетности в открытый файл сводной таблицы.
Если немножичко погуглить интернет, то можно выяснить следующую особенность: Если нам нужно загрузить из ЗАКРЫТОЙ книги данные, то мы эту книгу должны таки ОТКРЫТЬ, только не руками, а программно! Ну а дальше все как всегда: идем по записям ищем то, что нам нужно и переносим туда куда нужно. После такой "прогулки" незабываем книгу-источник ЗАКРЫТЬ, опять же программно!
Вы можете спросить: - Почему нет кода? - Ответ прост! Код есть! Сообщение № 4. Если кто не понял - спрашивайте - отвечу.GWolf
Путей к вершине множество. Этот один из многих...
Сообщение отредактировал GWolf - Четверг, 31.01.2013, 13:33
Добрый день! Прощу о помощи. не могу объединить макрос переноса данных из одного файла в другой с функцией ВПР. есть два файла (книга 1 и книга 2 - названия всегда разные). В книгу 1 нужно перенести данные по обещанной цене из книги 2. Помогите кому не трудно.
Добрый день! Прощу о помощи. не могу объединить макрос переноса данных из одного файла в другой с функцией ВПР. есть два файла (книга 1 и книга 2 - названия всегда разные). В книгу 1 нужно перенести данные по обещанной цене из книги 2. Помогите кому не трудно.alya
Всем, доброй ночи! У меня есть маленькая проблема в работе макроса. Суть задания: из файла "по бригадам.xls" найти итоговые суммы по определенным строкам и записать в файл "форма.xls". Это я реализовала. А теперь проблемка. Например: нужно найти строку "Компенсация отпуска". В файле "по бригадам.xls" в 01 бригаде 00 участок такой записи нет, и значит в файле "форма.xls" должно быть пусто. А макрос находит эту запись в другой бригаде(03 бригада 02 участок) и записывает в 01 бригаду 00 участок. Не могу понять как это сотворить,помогите у кого есть возможность и знания.
Всем, доброй ночи! У меня есть маленькая проблема в работе макроса. Суть задания: из файла "по бригадам.xls" найти итоговые суммы по определенным строкам и записать в файл "форма.xls". Это я реализовала. А теперь проблемка. Например: нужно найти строку "Компенсация отпуска". В файле "по бригадам.xls" в 01 бригаде 00 участок такой записи нет, и значит в файле "форма.xls" должно быть пусто. А макрос находит эту запись в другой бригаде(03 бригада 02 участок) и записывает в 01 бригаду 00 участок. Не могу понять как это сотворить,помогите у кого есть возможность и знания.nur91