Всем привет. Так вот. Каждую неделю готовится отчет о планируемых, заключенных и проданных контрактах. Файл отчета всегда имеет имя Отчет "номер недели". Т.е. отчет на 28 недели имеет имя Отчет 28 неделя. В отчете соответственно есть три поля с количеством. Каждую неделю в папке появляется новый файл соответственно в который вручную вносятся данные из предыдущего файла, и в отдельной колонке смотрится изменение величин по отношению к предыдущей недели. Хотел бы автоматизировать данный процесс т.е. написать внутри файла макрос чтобы он брал значения из предыдущего файла. Если с самой задачей как взять данные я почти понимаю, то не понимаю как написать его таким образом чтобы он учитывал смену имени файла внутри макроса. Те. на 29 неделе макрос должен будет взять данные из 28, а на 30й уже из 29. Подскажите или направьте пожалуйста. С уважением, Дмитрий
Всем привет. Так вот. Каждую неделю готовится отчет о планируемых, заключенных и проданных контрактах. Файл отчета всегда имеет имя Отчет "номер недели". Т.е. отчет на 28 недели имеет имя Отчет 28 неделя. В отчете соответственно есть три поля с количеством. Каждую неделю в папке появляется новый файл соответственно в который вручную вносятся данные из предыдущего файла, и в отдельной колонке смотрится изменение величин по отношению к предыдущей недели. Хотел бы автоматизировать данный процесс т.е. написать внутри файла макрос чтобы он брал значения из предыдущего файла. Если с самой задачей как взять данные я почти понимаю, то не понимаю как написать его таким образом чтобы он учитывал смену имени файла внутри макроса. Те. на 29 неделе макрос должен будет взять данные из 28, а на 30й уже из 29. Подскажите или направьте пожалуйста. С уважением, Дмитрийdimon171
Такой вариант. Вешаем на событие открытия файла. Все файлы должны называться с двумя цифрами - "Отчет_00". Если предыдущего файла нет или он называется как-то не так, то предложит его выбрать вручную. Расширение должно быть ".xlsm" [vba]
Код
Private Sub Workbook_Open() r0_ = 3 c_ = 5 r1_ = Cells(Rows.Count, 3).End(3).Row p_ = ThisWorkbook.Path fnom_ = Mid(ThisWorkbook.Name, 7, 2) - 1 If fnom_ Then pred_ = "'" & p_ & "\[Отчет_" & fnom_ & ".xlsm]Sheet1'!RC[-1]" Else pred_ = 0 End If Cells(r0_, c_).Resize(r1_ - r0_ + 1).FormulaR1C1 = "=RC[-1]-" & pred_ End Sub
[/vba]
Форум стирает в названиях приложенных файлов русские буквы, переназовите файл сами потом
Такой вариант. Вешаем на событие открытия файла. Все файлы должны называться с двумя цифрами - "Отчет_00". Если предыдущего файла нет или он называется как-то не так, то предложит его выбрать вручную. Расширение должно быть ".xlsm" [vba]
Код
Private Sub Workbook_Open() r0_ = 3 c_ = 5 r1_ = Cells(Rows.Count, 3).End(3).Row p_ = ThisWorkbook.Path fnom_ = Mid(ThisWorkbook.Name, 7, 2) - 1 If fnom_ Then pred_ = "'" & p_ & "\[Отчет_" & fnom_ & ".xlsm]Sheet1'!RC[-1]" Else pred_ = 0 End If Cells(r0_, c_).Resize(r1_ - r0_ + 1).FormulaR1C1 = "=RC[-1]-" & pred_ End Sub
[/vba]
Форум стирает в названиях приложенных файлов русские буквы, переназовите файл сами потом_Boroda_
Обновленные вводные. После пересмотра действий решил что задача несколько упрощается и в файле необходимо иметь кнопку макроса при нажатии на которую excel выделит область из предыдущей книги с названием (неделя-1) и все. Как это реализовать?Но скопировать он должен только значения без формул Также если не затруднит зайдите пожалуйста в эту тему
Обновленные вводные. После пересмотра действий решил что задача несколько упрощается и в файле необходимо иметь кнопку макроса при нажатии на которую excel выделит область из предыдущей книги с названием (неделя-1) и все. Как это реализовать?Но скопировать он должен только значения без формул Также если не затруднит зайдите пожалуйста в эту темуdimon171
С уважением, Дмитрий
Сообщение отредактировал dimon171 - Вторник, 31.07.2018, 17:20