Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Накопление данных из одной книги в другую - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Накопление данных из одной книги в другую (Макросы/Sub)
Накопление данных из одной книги в другую
Xenus91 Дата: Четверг, 23.02.2023, 03:25 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
Доброй ночи!
Просьба помочь с решением задачи,
есть активная книга из которой будет запускаться макрос при ее сохранении
макрос должен:
1) скопировать все данные со второй до последней заполненной строки с листа "данные" активной книги
2) скопировать дату с листа "взять дату" из фиксированной ячейки
3) открыть файл по определенному пути в скрытом режиме
4) определить последнюю заполненную строку
5) вставить скопированные значения ниже последней заполненной строки (с возможностью выборки скопированных ранее столбцов), например столбцы 1,2,8,10 и последним столбцом записать по всем строкам скопированную дату
6) сохранить и закрыть данную книгу

Заранее большое спасибо, готов обсудить вознаграждение если потребуется
К сообщению приложен файл: 1456464.xlsm (14.4 Kb)
 
Ответить
СообщениеДоброй ночи!
Просьба помочь с решением задачи,
есть активная книга из которой будет запускаться макрос при ее сохранении
макрос должен:
1) скопировать все данные со второй до последней заполненной строки с листа "данные" активной книги
2) скопировать дату с листа "взять дату" из фиксированной ячейки
3) открыть файл по определенному пути в скрытом режиме
4) определить последнюю заполненную строку
5) вставить скопированные значения ниже последней заполненной строки (с возможностью выборки скопированных ранее столбцов), например столбцы 1,2,8,10 и последним столбцом записать по всем строкам скопированную дату
6) сохранить и закрыть данную книгу

Заранее большое спасибо, готов обсудить вознаграждение если потребуется

Автор - Xenus91
Дата добавления - 23.02.2023 в 03:25
i691198 Дата: Четверг, 23.02.2023, 14:55 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 217
Репутация: 85 ±
Замечаний: 0% ±

с возможностью выборки скопированных ранее столбцов
В этой фразе мне непонятен смысл слова "ранее". Это можно понимать по разному, или копировать только те столбцы, заголовки которых совпадают с заголовками целевого файла, или из них опять что то нужно выбирать, или вообще что то другое? Поясню как я вас понял - макрос в вашем файле с исходными данными запускается по событию Workbook_BeforeClose, он открывает файл с уже накопленными архивными данными по нужным столбцам, добавляет новые и всё сохраняется и закрывается. Всё это вполне реализуемо, или как то не так?
 
Ответить
Сообщение
с возможностью выборки скопированных ранее столбцов
В этой фразе мне непонятен смысл слова "ранее". Это можно понимать по разному, или копировать только те столбцы, заголовки которых совпадают с заголовками целевого файла, или из них опять что то нужно выбирать, или вообще что то другое? Поясню как я вас понял - макрос в вашем файле с исходными данными запускается по событию Workbook_BeforeClose, он открывает файл с уже накопленными архивными данными по нужным столбцам, добавляет новые и всё сохраняется и закрывается. Всё это вполне реализуемо, или как то не так?

Автор - i691198
Дата добавления - 23.02.2023 в 14:55
Xenus91 Дата: Четверг, 23.02.2023, 18:05 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
i691198, речь идёт про скопированный диапазон из активной книги, но при переносе в архивный файл именно в коде хочется иметь возможность перестроить порядок столбцов из исходного файла
Т.е допустим в исходной таблице 5 столбцов, а выводить в архивный файл нужно всего 3: в порядке 4, 1, 2
Запуск макроса по события AfterSave
Открывает архивный файл в скрытом режиме
Уточнение по пути к архивному файлу, он лежит в библиотеке sharepoint,соответственно ссылка идёт в формате «http://hdhhdh/архив.xlsx»
 
Ответить
Сообщениеi691198, речь идёт про скопированный диапазон из активной книги, но при переносе в архивный файл именно в коде хочется иметь возможность перестроить порядок столбцов из исходного файла
Т.е допустим в исходной таблице 5 столбцов, а выводить в архивный файл нужно всего 3: в порядке 4, 1, 2
Запуск макроса по события AfterSave
Открывает архивный файл в скрытом режиме
Уточнение по пути к архивному файлу, он лежит в библиотеке sharepoint,соответственно ссылка идёт в формате «http://hdhhdh/архив.xlsx»

Автор - Xenus91
Дата добавления - 23.02.2023 в 18:05
i691198 Дата: Пятница, 24.02.2023, 19:22 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 217
Репутация: 85 ±
Замечаний: 0% ±

Xenus91, С sharepoint я никогда не работал, а так покажу, как на вашем примере эту задачу можно решить на локальном компе. Для удобства отладки изменил наши невыразительные исходные данные на более понятные. На мой вопрос какие столбцы нужно копировать внятного ответа вы не дали, (в программировании ответ "допустим" не имеет смысла, нужна конкретика), то предлагаю такой вариант. Есть исходный файл, в котором при открытии (или закрытии) очищается рабочее пространство. В процессе сеанса работы рабочее пространство забивается данными (надеюсь без пустых ячеек, хотя бы в первом столбце). При закрытии этого файла по событию AfterSave нужные данные добавляются в файл "Архив". Пока вижу такой вариант - копируются значения из тех столбцов, заголовки которых соответствуют заголовкам целевого файла. То есть у вас уже предварительно должен быть создан файл с именем "Архив", где в первой строке указаны нужные заголовки из исходного файла в любом порядке. Количество столбцов в исходном файле тоже может быть любым. На событие макрос пока не стал подключать, пока попробуйте обычным запуском, может быть будут вопросы.
P.S. К сожалению я не знаю уровень ваших знаний VBA, так что не обижайтесь, если скажу что то совсем банальное для вас. В моём примере макроса файл "Архив" привязан к корню диска D:. Так что нужно будет в строке макроса Set Nf = oFl.Workbooks.Open("D:\Архив.xlsx") прописать нужный путь, или перенести этот файл в корневую папку диска D.
P.P.S. Не учел один момент - у форума есть одна неприятная вещь - уродовать имена прилагаемых файлов, так что переименуйте файл "arkhiv" в "Архив".
К сообщению приложен файл: iskhodnyj_2.xlsm (24.2 Kb) · arkhiv.xlsx (10.0 Kb)


Сообщение отредактировал i691198 - Пятница, 24.02.2023, 19:30
 
Ответить
СообщениеXenus91, С sharepoint я никогда не работал, а так покажу, как на вашем примере эту задачу можно решить на локальном компе. Для удобства отладки изменил наши невыразительные исходные данные на более понятные. На мой вопрос какие столбцы нужно копировать внятного ответа вы не дали, (в программировании ответ "допустим" не имеет смысла, нужна конкретика), то предлагаю такой вариант. Есть исходный файл, в котором при открытии (или закрытии) очищается рабочее пространство. В процессе сеанса работы рабочее пространство забивается данными (надеюсь без пустых ячеек, хотя бы в первом столбце). При закрытии этого файла по событию AfterSave нужные данные добавляются в файл "Архив". Пока вижу такой вариант - копируются значения из тех столбцов, заголовки которых соответствуют заголовкам целевого файла. То есть у вас уже предварительно должен быть создан файл с именем "Архив", где в первой строке указаны нужные заголовки из исходного файла в любом порядке. Количество столбцов в исходном файле тоже может быть любым. На событие макрос пока не стал подключать, пока попробуйте обычным запуском, может быть будут вопросы.
P.S. К сожалению я не знаю уровень ваших знаний VBA, так что не обижайтесь, если скажу что то совсем банальное для вас. В моём примере макроса файл "Архив" привязан к корню диска D:. Так что нужно будет в строке макроса Set Nf = oFl.Workbooks.Open("D:\Архив.xlsx") прописать нужный путь, или перенести этот файл в корневую папку диска D.
P.P.S. Не учел один момент - у форума есть одна неприятная вещь - уродовать имена прилагаемых файлов, так что переименуйте файл "arkhiv" в "Архив".

Автор - i691198
Дата добавления - 24.02.2023 в 19:22
Xenus91 Дата: Суббота, 25.02.2023, 17:43 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
i691198, дома буду попробую,
Спасибо!
 
Ответить
Сообщениеi691198, дома буду попробую,
Спасибо!

Автор - Xenus91
Дата добавления - 25.02.2023 в 17:43
Xenus91 Дата: Воскресенье, 26.02.2023, 21:31 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
i691198, с локальным файлом все хорошо, но при попытке дать ссылку на документ в библиотеке шарпоинт формата «http://hdhhdh/архив.xlsx» файл не сохраняется подразумеваю что сам файл архива при открытии открывается по умолчанию в режиме чтения, пробовал добавить игнорирование Readonly не помогло...
 
Ответить
Сообщениеi691198, с локальным файлом все хорошо, но при попытке дать ссылку на документ в библиотеке шарпоинт формата «http://hdhhdh/архив.xlsx» файл не сохраняется подразумеваю что сам файл архива при открытии открывается по умолчанию в режиме чтения, пробовал добавить игнорирование Readonly не помогло...

Автор - Xenus91
Дата добавления - 26.02.2023 в 21:31
Xenus91 Дата: Воскресенье, 26.02.2023, 21:57 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
Покопался, нашел решение здесь добавил в код после метода Workbooks.Open
[vba]
Код
ActiveWorkbook.LockServerFile
[/vba]
теперь все ок,
i691198, единственный момент в исходном файле данные забираются с умной таблицы, в которой есть пустые строки, как их можно порезать?


Сообщение отредактировал Xenus91 - Понедельник, 27.02.2023, 03:09
 
Ответить
СообщениеПокопался, нашел решение здесь добавил в код после метода Workbooks.Open
[vba]
Код
ActiveWorkbook.LockServerFile
[/vba]
теперь все ок,
i691198, единственный момент в исходном файле данные забираются с умной таблицы, в которой есть пустые строки, как их можно порезать?

Автор - Xenus91
Дата добавления - 26.02.2023 в 21:57
Xenus91 Дата: Понедельник, 27.02.2023, 03:42 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
если я все правильно сделал
после подсчета кол-ва строк добавил
[vba]
Код
If IsEmpty(Worksheets("Данные").Cells(CR1, 1)) Then CR1 = Worksheets("Данные").Cells(CR1, 1).End(xlUp).Row
[/vba],
вроде получил что хотел

i691198, огромное спасибо за помощь!
 
Ответить
Сообщениеесли я все правильно сделал
после подсчета кол-ва строк добавил
[vba]
Код
If IsEmpty(Worksheets("Данные").Cells(CR1, 1)) Then CR1 = Worksheets("Данные").Cells(CR1, 1).End(xlUp).Row
[/vba],
вроде получил что хотел

i691198, огромное спасибо за помощь!

Автор - Xenus91
Дата добавления - 27.02.2023 в 03:42
Xenus91 Дата: Суббота, 04.03.2023, 22:32 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
i691198, Добрый вечер!
нашлась ошибка при кол-ве строк 30000+ в архивном файле сваливается в ошибку "Overflow" в этом месте
[vba]
Код
   With L2
    .Range(.Cells(CR2 + 1, 1), .Cells(CR2 + CR1 - 1, CL2 + 1)) = Ar2
[/vba]

Как можно исправить?

исходники здесь


Сообщение отредактировал Xenus91 - Воскресенье, 05.03.2023, 07:20
 
Ответить
Сообщениеi691198, Добрый вечер!
нашлась ошибка при кол-ве строк 30000+ в архивном файле сваливается в ошибку "Overflow" в этом месте
[vba]
Код
   With L2
    .Range(.Cells(CR2 + 1, 1), .Cells(CR2 + CR1 - 1, CL2 + 1)) = Ar2
[/vba]

Как можно исправить?

исходники здесь

Автор - Xenus91
Дата добавления - 04.03.2023 в 22:32
i691198 Дата: Воскресенье, 05.03.2023, 10:10 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 217
Репутация: 85 ±
Замечаний: 0% ±

Xenus91, Целочисленные переменные в коде объявлены типом Integer, максимально допустимое значение 32767. Вероятно какие то значения выходят за этот предел. Нужно в строке Dim CL1%, CL2%, CR1%, CR2%, i%, j% заменить знак "%" на "&", то есть задать тип Long.


Сообщение отредактировал i691198 - Воскресенье, 05.03.2023, 10:10
 
Ответить
СообщениеXenus91, Целочисленные переменные в коде объявлены типом Integer, максимально допустимое значение 32767. Вероятно какие то значения выходят за этот предел. Нужно в строке Dim CL1%, CL2%, CR1%, CR2%, i%, j% заменить знак "%" на "&", то есть задать тип Long.

Автор - i691198
Дата добавления - 05.03.2023 в 10:10
Xenus91 Дата: Воскресенье, 05.03.2023, 17:08 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
i691198, большое спасибо!
попробую
 
Ответить
Сообщениеi691198, большое спасибо!
попробую

Автор - Xenus91
Дата добавления - 05.03.2023 в 17:08
Xenus91 Дата: Воскресенье, 05.03.2023, 20:23 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
i691198, скорректировал, все работает, еще раз большое спасибо!
 
Ответить
Сообщениеi691198, скорректировал, все работает, еще раз большое спасибо!

Автор - Xenus91
Дата добавления - 05.03.2023 в 20:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Накопление данных из одной книги в другую (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!