powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Свод нескольких книг в одну
25 сообщений из 34, страница 1 из 2
Свод нескольких книг в одну
    #34432012
GhostProgram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Подскажите пожалуйста, есть ли в Ecxel возможность автоматизировать процесс свода нескольких рабочих книг в одну, используя VBA? Пример: мне нужно из нескольких книг перенести информацию в одну книгу...
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34432951
GhostProgram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди правда никто не знает или проблема не составляет интереса?
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34432982
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сформулируй почетче задачу:
1. выложи образец книги, в которую будет сводиться информация
2. выложи образец книг, из которых будет сводиться информация
3. по каким условиям отбираются книги для сбора информации (открытые, в какталоге и т.д.)
4. как именно должна переноситься информация: откуда куда, дополнительная обработка, анализ и т.д.
Чем детальнее опишешь, тем быстрее и точнее получишь решение
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34432983
excel-ufa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если без vba:
просмотри меню данные консолидация
или данные- сводные таблицы- создание из нескольких источников данных.
все жто приемлемо при одном вформате данных.
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34433055
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GhostProgramЛюди правда никто не знает или проблема не составляет интереса?
Просто вцелом процесс консолидации он довольно индивидуален. И наверное если действительно что-то целое предложить нужно много исходных данных.
Можно разложить ещё вопрос на несколько составляющих, тогда ответов больше будет!
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34433169
GhostProgram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробую сформировать точнее: в рабочей папке находится 20 файлов. Чтобы их объединить мне приходится вручную копировать файлы и переносить в одно место... А мне необходимо создать книгу, в которой на первом листе будет "какой-то интерфейс", позволяющий заносить данные из 20 файлов на второй лист...чтобы "автоматом"... Может кто подскажет как написать?
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34434214
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотри это
/topic/329262&hl=xlapp
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34434538
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сделал что-то типа этого. Я открываю книги при консолидации!


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
Option Explicit

Dim NewLine As Integer, Col As Integer, ToSheet As Worksheet

' Фукция для нахождения последней строки
Public Function LastRow(Optional ws As Worksheet, Optional FindRange As String) As Long
  If ws Is Nothing Then Set ws = ActiveSheet
  If FindRange = "" Then FindRange = Cells.Address
  LastRow = ws.Range(FindRange).Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
End Function

Sub RegularCopy(FName As String)
  Dim openwb As Workbook, FromSheet As Worksheet, FromRangeName As String, Lrow As Long
  'Открытие исходной книги предполагается что файлы находятся в том же каталоге в папке исходные файлы
  'Для того чтобы макрос работал необходимо эту книгу запускать через меню ФАЙЛ - Открыть книгу!
  Workbooks.Open Filename:="Исходные данные\" & FName & ".XLS", UpdateLinks:=False
   Set openwb = ActiveWorkbook
   'наименование листа с которого будут копироваться данные, предполагается, что во всех книгах одинаковый
   Set FromSheet = openwb.Sheets("Данные")
   'Имя Диапазона, в котором искать последнюю строку
   FromRangeName = Range(Cells( 1 ,  1 ).Address, Cells(Rows.Count, Col).Address).Address
   
   'нахождение последней строки в диапазоне
   Lrow = LastRow(FromSheet, FromRangeName)
   
   'Копирование значений диапазона
   'первая строка для копирования берётся 3-я
   ToSheet.Range(Cells(NewLine,  1 ).Address, Cells(NewLine -  1  -  2  + Lrow, Col).Address).Value = _
   FromSheet.Range(Cells( 3 ,  1 ).Address, Cells(Lrow, Col).Address).Value
   
   NewLine = NewLine + Lrow -  2 
   
  'закрытие книги
  openwb.Close False
End Sub
Sub Выбрать_данные()
 Application.ScreenUpdating = False
 Application.Calculation = xlCalculationManual
   
   '№ Последнего столбца для консолидации, первый считается "A".
   'Дейсвует как для исходных данных, так и для итоговых
   Col =  20 
   'Первая строка в которую заполняются значения
   NewLine =  3 
   'Лист на который будем копировать
   Set ToSheet = ThisWorkbook.Sheets("Лист2")
   'Открытие листа куда заполняются данные
   ToSheet.Select
   'Очистка предыдущих данных
   Range(Cells(NewLine,  1 ), Cells(Rows.Count, Col)).Clear
   
   'Запуск процедуры копирования по каждому файлу, сколько угодно раз.
   'В кавычках имя файла без расширения
   RegularCopy ("Файл1")
   RegularCopy ("Файл2")
   RegularCopy ("Файл3")

 Application.ScreenUpdating = True
 Application.Calculation = xlCalculationAutomatic
End Sub
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34434712
GhostProgram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad очень интересная задумка! Подскажите пожалуйста, я должен этот листинг разместить в модуле листа книги, в которую буду копировать? А потом создать на листе1 кнопку и событию кнопки присвоить процедуру RegularCopy?

Я не понял там задумку про третью строку? Почему с третьей?
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34434739
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GhostProgramDeggasad очень интересная задумка! Подскажите пожалуйста, я должен этот листинг разместить в модуле листа книги, в которую буду копировать? А потом создать на листе1 кнопку и событию кнопки присвоить процедуру RegularCopy?

Я не понял там задумку про третью строку? Почему с третьей?

событию кнопки присвоить процедуру Выбрать_данные

А строчки
RegularCopy ("Файл1")
RegularCopy ("Файл2")
RegularCopy ("Файл3")
Добавить столько раз сколько файлов нужно собрать

А третья строка как пример, поменяй на любую, надеюсь она одна и та же на всех листах
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34434748
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GhostProgram

Я не понял там задумку про третью строку? Почему с третьей?

Если имеется ввиду
NewLine = 3,
то я предполагал, что в первые 2 - это название столбца и номер по порядку или ещё что нибуть
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34434791
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
ption Explicit

Dim NewLine As Integer, Col As Integer, ToSheet As Worksheet

' Фукция для нахождения последней строки
Public Function LastRow(Optional ws As Worksheet, Optional FindRange As String) As Long
  If ws Is Nothing Then Set ws = ActiveSheet
  If FindRange = "" Then FindRange = Cells.Address
  LastRow = ws.Range(FindRange).Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
End Function

Sub RegularCopy(FName As String)
  Dim openwb As Workbook, FromSheet As Worksheet, FromRangeName As String, Lrow As Long, Frow As Long
  'Открытие исходной книги предполагается что файлы находятся в том же каталоге в папке исходные файлы
  'Для того чтобы макрос работал необходимо эту книгу запускать через меню ФАЙЛ - Открыть книгу!
  Workbooks.Open Filename:="Исходные данные\" & FName & ".XLS", UpdateLinks:=False
   Set openwb = ActiveWorkbook
   'наименование листа с которого будут копироваться данные, предполагается, что во всех книгах одинаковый
   Set FromSheet = openwb.Sheets("Данные")
   'Имя Диапазона, в котором искать последнюю строку
   FromRangeName = Range(Cells( 1 ,  1 ).Address, Cells(Rows.Count, Col).Address).Address
   
   'первая строка в диапазоне, которую нужно копировать
   Frow =  3 
   'нахождение последней строки в диапазоне
   Lrow = LastRow(FromSheet, FromRangeName)
   
   'Копирование значений диапазона
   ToSheet.Range(Cells(NewLine,  1 ).Address, Cells(NewLine - Frow + Lrow, Col).Address).Value = _
   FromSheet.Range(Cells(Frow,  1 ).Address, Cells(Lrow, Col).Address).Value
   
   NewLine = NewLine - Frow + Lrow +  1 
   
  'закрытие книги
  openwb.Close False
End Sub
Sub Выбрать_данные()
 Application.ScreenUpdating = False
 Application.Calculation = xlCalculationManual
   
   '№ Последнего столбца для консолидации, первый считается "A".
   'Дейсвует как для исходных данных, так и для итоговых
   Col =  20 
   'Первая строка в которую заполняются значения
   NewLine =  3 
   'Лист на который будем копировать
   Set ToSheet = ThisWorkbook.Sheets("Лист2")
   'Открытие листа куда заполняются данные
   ToSheet.Select
   'Очистка предыдущих данных
   Range(Cells(NewLine,  1 ), Cells(Rows.Count, Col)).Clear
   
   'Запуск процедуры копирования по каждому файлу, сколько угодно раз.
   'В кавычках имя файла без расширения
   RegularCopy ("Файл1")
   RegularCopy ("Файл2")
   RegularCopy ("Файл3")

 Application.ScreenUpdating = True
 Application.Calculation = xlCalculationAutomatic
End Sub


добовил переменную первой строки, с которой нужно начинать копирование в исходных данных
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34434977
GhostProgram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я скопировал в модуль книги и создал кнопку... При нажатии пишет "Не удалось найти Исходные данные\Файл1.XLS Проверьте задание имени и местоположения файла... Я так понял файлы надо разместить в ту же папку, что и книгу, в которую копируем? Назвать например файлы: файл1.xls и т.д. А название "Исходные данные" -это название книги или общей папки, в которой хранятся все файлы?
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34435015
GhostProgram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я назвал папку "Исходные данные", файлы которые должны копироваться Файл1.XLS, Файл2.XLS и т.д. Захожу в книгу, в которую надо копировать данные, на первом листе создал кнопку, обработки события Выбрать_данные

Я НЕ ПОНИМАЮ КАК БЕРУТСЯ ИМЕНА ФАЙЛОВ В ФУНКЦИИ RegularCopy? Мне надо открыть все файлы?
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34435103
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GhostProgramЯ назвал папку "Исходные данные", файлы которые должны копироваться Файл1.XLS, Файл2.XLS и т.д. Захожу в книгу, в которую надо копировать данные, на первом листе создал кнопку, обработки события Выбрать_данные

Я НЕ ПОНИМАЮ КАК БЕРУТСЯ ИМЕНА ФАЙЛОВ В ФУНКЦИИ RegularCopy? Мне надо открыть все файлы?
Файлы открываются и закрываются сами, они должны быть закрыты по идее!
Нужно открыть программу Exel. Идём меню ФАЙЛ - Открыть файл - и находим наш файл с макросом, открывем его и нашимаем кнопку. открывать файл нужно именно указанным способом. При это все исходные файлы располагаются в подкаталоге "Исходные данные" того же каталога и они закрыты!
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34435120
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GhostProgram
Я НЕ ПОНИМАЮ КАК БЕРУТСЯ ИМЕНА ФАЙЛОВ В ФУНКЦИИ RegularCopy? Мне надо открыть все файлы?
Имена файлов в процедуре RegularCopy вводятся когда задаёшь выполнение процедуры
в этих строчках
RegularCopy ("Файл1")
RegularCopy ("Файл2")
RegularCopy ("Файл3")

"Файл1"
"Файл2"
"Файл3" - это и есть имена файлов
копирушь строчку
RegularCopy ("Файл1") нужное количество раз и вместо "Файл1" каждый раз вставляешь нужное имя файла без расширения! Расширение добавляется потом и предполагается, что оно XLS
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34437063
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зацени
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34636897
holymen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы не разводить милион+1 одну тему ,, про открытие файлов, чтения информации из закрытых файлов.., и консолидации всего этого в одну в новь созданную книгу . .., решил писать сюда.,

Задача..., есть именованный массив "sArdesFile" он находится на "Лист1"
в нем есть имена файлов.. с путями ..,(или без путей )

имена файлов, попадающие в массив формируются на основе действий пользователя .., с этим проблем нет , спасибо форуму

далее ..: массив с именами фалов есть ., как же открыть (либо не открывать) все эти книги и скопировать из них определенные листы в новую книгу , обозвать ее свод с хохранить

пробовал пойти двумя путями .
1. через ADODB.Connection
2. это через Application.FileSearc
смотрел вот эти примеры:
http://www.sql.ru/forum/actualthread.aspx?tid=236239&hl=%ee%f2%ea%f0%fb%f2%e8%ff+%f4%e0%e9%eb%ee%e2
и много других.., в которых в основном выходил на этот

вариант представленный Уважаемым Ivan33
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Sub CombineAllOpenWorkbooks()
' Macro written by Barrie Davidson
Dim NewFileName As String
Dim c As Integer
Dim SheetCount As Integer

    NewFileName = ActiveWorkbook.Name
    c =  1 
    Do Until c =  0 
        If Windows(c).Visible = True Then
            Windows(c).Activate
            MsgBox ("New file to be created")
            NewFileName = Application.GetSaveAsFilename _
                (, "Microsoft Excel Workbook (*.xls),*.xls")
            ActiveWorkbook.SaveAs FileName:=NewFileName, _
                FileFormat:=xlWorkbookNormal
            NewFileName = ActiveWorkbook.Name
            ActiveSheet.Select
            c =  0 
            SheetCount = ActiveWorkbook.Sheets.Count
        Else
            c = c +  1 
        End If
    Loop
    For c =  1  To Workbooks.Count
        If Windows(c).Parent.Name <> NewFileName And Windows(c).Visible = True Then
            Windows(c).Activate
            ActiveWorkbook.Sheets.Copy after:=Workbooks(NewFileName).Sheets(SheetCount)
        End If
    Next c
    
End Sub

здесь представлены оба варианта.,, вот хотелось бы разобраться с первым
ни то не другое не получается ..,

В первом случае ., просто тупо не получается даже запустить , код, вылазит ошибка «User-defined type not defined» хотя в References библиотеку подключил..,
Скажите что не так.., где еще что подключить.,,

Во втором случае происходит какое то зацикливание ., на открытие файлов..
и не могу программно подавить обновление макросов, которые есть в открываемых, книгах
и не могу отключить защиту .. т.к. книги защищены, то при копировании .., вылазят ошибки что книги защищены от записи.

Пока прошу подсказать как заставить работать ..,
ADODB , ну а дальше появятся вопросы.., еще спрошу если вы не против конечно

вот сейчас ругается User-defined type not defined при объявлении переменной .. хотя библиотеку подключил

Код: plaintext
1.
Dim cnW As ADODB.Connection
 Dim rs As ADODB.Recordset

Спасибо....
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34636944
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
holymen

Пока прошу подсказать как заставить работать ..,
ADODB , ну а дальше появятся вопросы.., еще спрошу если вы не против конечно

вот сейчас ругается User-defined type not defined при объявлении переменной .. хотя библиотеку подключил

Код: plaintext
1.
Dim cnW As ADODB.Connection
 Dim rs As ADODB.Recordset

Спасибо....

Фиг его знает как заставить работать. Сам иногда играюсь в учебных целям. Вот мой пример на котором я пробовал

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Sub macr()
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim NullCel As String
    Dim IshFile As String
    
    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset
    IshFile = ThisWorkbook.Path & "\" & "Исход.xls"
    
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & IshFile & ";" & _
      "Extended Properties=""Excel 8.0;HDR=No;IMEX=1"""
            
    rst.Open "SELECT F1,F4 FROM [Лист1$A2:D100]", cnn
    'или весь лист rst.Open "[Лист1$]", cnn

    
    'Следующая после последней заполненной ячейки в первом столбце
    NullCel = Sheets("Лист1").Columns( 1 ).Find("*", , , , , xlPrevious).Offset( 1 ,  0 ).Address
    
    ThisWorkbook.Sheets("Лист1").Range(NullCel).CopyFromRecordset rst
 
    rst.Close
    cnn.Close
    
    Set rst = Nothing
    Set cnn = Nothing
End Sub

Прикладываю рисунок подключенных библиотек, может у тебя не те
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34637007
holymen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deggasad
да подругому .
Microsoft DAO 3.6 Object Library,


спасибо за прмиер , счас попробую.
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34637027
holymen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну соответственно таже ошибка ..
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34637394
holymen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот это тоже не помогает..,
Ashton1. Подключи библиотеку "Microsoft ADO Ext. 2.X for DDL and Security".
2. "Microsoft DAO 3.6 Object Library".

может как то программно в главном модуле надо объявить использование этой библиотеки
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34637752
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
holymenВот это тоже не помогает..,
Ashton1. Подключи библиотеку "Microsoft ADO Ext. 2.X for DDL and Security".
2. "Microsoft DAO 3.6 Object Library".

может как то программно в главном модуле надо объявить использование этой библиотеки

Я же тебе выложил какие библиотеки включить, блин
В частности: Microsoft ActiveX DataObjects
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34637857
holymen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
гыг, точно.., спасибо... не сообразил сразу что здесь отмеченно так как нужно мне ..
теперь не ругается на АДО но ругается на
Код: plaintext
Dim fso As Scripting.FileSystemObject
, как эта библиотека завется
...
Рейтинг: 0 / 0
Свод нескольких книг в одну
    #34637865
holymen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все все сам нашел
завется она
Microsoft Scripting Runtime..
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Свод нескольких книг в одну
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]