Задача: Есть основная книга, называется "Общая.xlsx", есть другие книги, "Январь.xlsx", "Февраль.xlsx", "Март.xlsx" и т.д... в каждой книге есть свои листы "День1", "День2", "День3" и т.д., на листе есть таблица, в которой вперемешку разбросаны данные. Например для того чтобы скопировать с одной книги в другую, необходимо в книге "Январь.xlsx", на листе "День1" просуммировать ячейки A1:A3:A7:A9 и т.д., сумму необходимо вставить в таблицу которая находится в Книге "Общая.xlsx", на лист "Главная" в ячейку А5 ... в книге "Январь.xlsx", на листе "День2" просуммировать ячейки A1:A3:A7:A9 и т.д., сумму необходимо вставить в таблицу которая находится в Книге "Общая.xlsx", на лист "Главная" в ячейку B5 и т.д.
Задача: Есть основная книга, называется "Общая.xlsx", есть другие книги, "Январь.xlsx", "Февраль.xlsx", "Март.xlsx" и т.д... в каждой книге есть свои листы "День1", "День2", "День3" и т.д., на листе есть таблица, в которой вперемешку разбросаны данные. Например для того чтобы скопировать с одной книги в другую, необходимо в книге "Январь.xlsx", на листе "День1" просуммировать ячейки A1:A3:A7:A9 и т.д., сумму необходимо вставить в таблицу которая находится в Книге "Общая.xlsx", на лист "Главная" в ячейку А5 ... в книге "Январь.xlsx", на листе "День2" просуммировать ячейки A1:A3:A7:A9 и т.д., сумму необходимо вставить в таблицу которая находится в Книге "Общая.xlsx", на лист "Главная" в ячейку B5 и т.д.akaDemik
[/vba] это неудобно так как файлов может быть от 5 до 15 (не все файлы могут быть доступны)...каждый раз открывать файлы неудобно, также у 2 из них может быть другая структура таблицы проще прописать по каждому файлу отдельно, с учетом того, что его может не быть в папке, значит информация не заполняется, а макрос идет по другим доступным файлам
Viv, у меня пара ламерских вопросов: [vba]
Код
Set RG1 = wb.Worksheets(1).Range("A5:C9") 'Почистим RG1.Clear
[/vba] обязательно чистить перед заполнением новых данных?
[vba]
Код
thisFName = ThisWorkbook.FullName 'Отключаем запрос на подтверждение Application.DisplayAlerts = False
[/vba] это неудобно так как файлов может быть от 5 до 15 (не все файлы могут быть доступны)...каждый раз открывать файлы неудобно, также у 2 из них может быть другая структура таблицы проще прописать по каждому файлу отдельно, с учетом того, что его может не быть в папке, значит информация не заполняется, а макрос идет по другим доступным файламakaDemik
На автомате... Можно не чистить, по второму вопросу - забыл удалить(брал у себя готовый вариант для сбора данных), а последнее для удобства (можно сразу указать все необходимые файлы)...
На автомате... Можно не чистить, по второму вопросу - забыл удалить(брал у себя готовый вариант для сбора данных), а последнее для удобства (можно сразу указать все необходимые файлы)...Viv
а последнее для удобства (можно сразу указать все необходимые файлы)...
но там код написан под открытие файла, мне это необязательно надо четко прописать ""Январь.xlsx", на листе "День2" просуммировать ячейки A1:A3:A7:A9 также важный момент, чтоб не было ошибки, если файла в папке не оказалось
а последнее для удобства (можно сразу указать все необходимые файлы)...
но там код написан под открытие файла, мне это необязательно надо четко прописать ""Январь.xlsx", на листе "День2" просуммировать ячейки A1:A3:A7:A9 также важный момент, чтоб не было ошибки, если файла в папке не оказалосьakaDemik
[/vba] при этом если в папке нет файла Февраль.xlsx, но есть Январь.xlsx и Март.xlsx, макрос отрабатывает только Январь, а Март остается пустым т.к. ошибка на Феврале пробовал через функцию Next [vba]
Код
On Error Resume Next
[/vba] но не сильно знаком с данной функцией
пробовал добавить следующие книги... [vba]
Код
Sub IMPORT() Dim srcBook Set wb = ThisWorkbook Set wf = WorksheetFunction ' Открываем On Error GoTo ERR Set srcBook = Workbooks.Open(Filename:=wb.Path & "\Январь.xlsx", ReadOnly:=True, UpdateLinks:=0) 'Вставим wb.Sheets("Главная").Cells(5, 1) = wf.Sum(srcBook.Sheets("День1").Range("A3,A7,A9,A11")) wb.Sheets("Главная").Cells(6, 1) = wf.Sum(srcBook.Sheets("День2").Range("A3,A7,A9,A11")) wb.Sheets("Главная").Cells(7, 1) = wf.Sum(srcBook.Sheets("День3").Range("A3,A7,A9,A11"))
[/vba] при этом если в папке нет файла Февраль.xlsx, но есть Январь.xlsx и Март.xlsx, макрос отрабатывает только Январь, а Март остается пустым т.к. ошибка на Феврале пробовал через функцию Next [vba]
Код
On Error Resume Next
[/vba] но не сильно знаком с данной функциейakaDemik
akaDemik, проверить наличие файла можно так: [vba]
Код
Dim oFileSystemObject As Object: Set oFileSystemObject = CreateObject("Scripting.FileSystemObject") If oFileSystemObject.FileExists(wb.Path & "\Январь.xlsx") Then 'открываем, копируем, закрываем... End If
[/vba]
akaDemik, проверить наличие файла можно так: [vba]
Код
Dim oFileSystemObject As Object: Set oFileSystemObject = CreateObject("Scripting.FileSystemObject") If oFileSystemObject.FileExists(wb.Path & "\Январь.xlsx") Then 'открываем, копируем, закрываем... End If
в случае ошибки оператор GoTo отправляет на метку ERR:
но ведь на метке ERR: - пусто, а как прописать следующую итерацию, я не понял
последний вопрос на сегодня, если файл на месте, ошибки следственно не было, как закрасить текст полученной ячейки в красный цвет? если ошибка, цвет без изменений
в случае ошибки оператор GoTo отправляет на метку ERR:
но ведь на метке ERR: - пусто, а как прописать следующую итерацию, я не понял
последний вопрос на сегодня, если файл на месте, ошибки следственно не было, как закрасить текст полученной ячейки в красный цвет? если ошибка, цвет без измененийakaDemik
akaDemik, пробуйте. Запихала Вашу обработку книг в цикл (и по дням аналогично)...Массивы месяцев и дней сами расширите. Раскраску ячеек тоже добавила, но для следующих вопросов, не касающихся
Цитата
Суммирование с заполнением отдельной таблицы с разных книг
создавайте отдельные темы.
[vba]
Код
Sub IMPORT() Dim srcBook Set wb = ThisWorkbook Set wf = WorksheetFunction wb.Sheets("Главная").UsedRange.Offset(1).Resize(, 3).Clear Dim oFileSystemObject As Object: Set oFileSystemObject = CreateObject("Scripting.FileSystemObject") i = 1 For Each book In Array("Январь", "Февраль", "Март") bookName = wb.Path & "\" & book & ".xlsx" If oFileSystemObject.FileExists(bookName) Then Set srcBook = Workbooks.Open(Filename:=bookName, ReadOnly:=True, UpdateLinks:=0) 'Вставим j = 0 For Each sh In Array("День1", "День2", "День3") With wb.Sheets("Главная").Cells(5 + j, i) .Value = wf.Sum(srcBook.Sheets(sh).Range("A3,A7,A9,A11")) .Interior.Color = vbRed j = j + 1 End With Next sh srcBook.Close SaveChanges:=False End If i = i + 1 Next book End Sub
[/vba]
akaDemik, пробуйте. Запихала Вашу обработку книг в цикл (и по дням аналогично)...Массивы месяцев и дней сами расширите. Раскраску ячеек тоже добавила, но для следующих вопросов, не касающихся
Цитата
Суммирование с заполнением отдельной таблицы с разных книг
создавайте отдельные темы.
[vba]
Код
Sub IMPORT() Dim srcBook Set wb = ThisWorkbook Set wf = WorksheetFunction wb.Sheets("Главная").UsedRange.Offset(1).Resize(, 3).Clear Dim oFileSystemObject As Object: Set oFileSystemObject = CreateObject("Scripting.FileSystemObject") i = 1 For Each book In Array("Январь", "Февраль", "Март") bookName = wb.Path & "\" & book & ".xlsx" If oFileSystemObject.FileExists(bookName) Then Set srcBook = Workbooks.Open(Filename:=bookName, ReadOnly:=True, UpdateLinks:=0) 'Вставим j = 0 For Each sh In Array("День1", "День2", "День3") With wb.Sheets("Главная").Cells(5 + j, i) .Value = wf.Sum(srcBook.Sheets(sh).Range("A3,A7,A9,A11")) .Interior.Color = vbRed j = j + 1 End With Next sh srcBook.Close SaveChanges:=False End If i = i + 1 Next book End Sub
открывать файлы неудобно, также у 2 из них может быть другая структура таблицы
но все равно спасибо +1 мне больше подходит код от Viv, тоже плюсую в карму только немного подправил закрашивание, т.к. мне надо не ячейку в красный, а текст [vba]
открывать файлы неудобно, также у 2 из них может быть другая структура таблицы
но все равно спасибо +1 мне больше подходит код от Viv, тоже плюсую в карму только немного подправил закрашивание, т.к. мне надо не ячейку в красный, а текст [vba]
тогда попробую объяснить... у книг Январь, Февраль, Март, одна структура и расположение ячеек, у книги Апрель - другая, у книги Май - третья поэтому для каждой книги надо конкретно прописывать какие ячейки суммировать
тогда попробую объяснить... у книг Январь, Февраль, Март, одна структура и расположение ячеек, у книги Апрель - другая, у книги Май - третья поэтому для каждой книги надо конкретно прописывать какие ячейки суммироватьakaDemik