Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2012, 15:12   #1
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
По умолчанию Объединение нескольких файлов .xls в один в качестве листов.

Подскажите, пожалуйста.

Есть несколько файлов 1.xls и 2.xls (каждый состоит из одного листа -"1", "2"). Нужно объединить их в файл 3.xls чтобы они отображались в файле как листы ("1", "2").

Заранее спасибо.

Вот в принципе я написал макрос как из определённой папки копировать все листы в открытую книгу.
Код:
Sub Макрос2()
Set Fso = CreateObject("Scripting.FileSystemObject")
Set folder = Fso.GetFolder("C:\test")
For Each File In folder.Files
With Workbooks.Open(File.Path).Worksheets(1)
Sheets.Move Before:=Workbooks("Книга1").Sheets(1)
End With
Next

End Sub
Подскажите, как эти листы назвать также как файлы в которых эти листы находятся.

Последний раз редактировалось tibhar940; 18.09.2012 в 15:44.
tibhar940 вне форума Ответить с цитированием
Старый 18.09.2012, 16:15   #2
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
По умолчанию

Дописал до удобоваримого вида. (Листы назвал также как файлы, в которых эти листы находятся).
Код:
Sub kkk()
Set Fso = CreateObject("Scripting.FileSystemObject")
Set folder = Fso.GetFolder("C:\test")
For Each File In folder.Files
With Workbooks.Open(File.Path).Worksheets(1)
.Name = ActiveWorkbook.Name
.Parent.Close -1
End With
With Workbooks.Open(File.Path).Worksheets(1)
Sheets.Move Before:=Workbooks("Книга1").Sheets(1)
End With
Next
End Sub
НО! Хочется удалить из получившихся названий листов ".xls"
Как это сделать?

Последний раз редактировалось tibhar940; 18.09.2012 в 17:00.
tibhar940 вне форума Ответить с цитированием
Старый 18.09.2012, 16:53   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Как-то через ж...
Проще ведь переименовать после копирования первый лист - запишите рекордером и вставьте в код.
А в имени можно заменой убрать расширение (его можно точно узнать средствами FSO, раз уж всё равно через него действуете).
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 18.09.2012, 17:13   #4
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Как-то через ж...
Проще ведь переименовать после копирования первый лист - запишите рекордером и вставьте в код.
Ну как уж есть) Зачем, здесь у меня сразу обзываются листы как надо и копируются в нужную книгу. А если буду делать иначе - придется лезть в эту папку и как-то вычленять названия для каждого из листов в конечной книге?
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
А в имени можно заменой убрать расширение (его можно точно узнать средствами FSO, раз уж всё равно через него действуете).
Да я знаю, что заменой можно. Но у меня как-то не получается. Всё-то ругается оно.
пробую в цикле использовать что-то типа

Код:
.activeworksheets.replace ".xls", " "
Но оно ругается. Можете что-нибудь дельное по этому поводу подсказать? А то уже что-то не знаю что использовать.
tibhar940 вне форума Ответить с цитированием
Старый 18.09.2012, 17:37   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Sub kkk()
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set folder = FSO.GetFolder("C:\test")
        For Each File In folder.Files
            With Workbooks.Open(File.Path).Worksheets(1)
                       .Move Before:=ThisWorkbook.Sheets(1)
                    ThisWorkbook.Sheets(1).Name = _
                    Replace(File.Name, "." & FSO.GetExtensionName(File.Path), "")
            End With
        Next
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
Если в открываемых книгах больше одного листа - то их нужно закрывать. Если один - то не нужно. Но не стал заморачиваться...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение нескольких столбцов таблицы в один vmilyoshin БД в Delphi 5 27.08.2012 19:56
Объединение нескольких проектов в один Марк Охман Общие вопросы Delphi 8 14.08.2012 11:42
Печать нескольких листов в один pdf tae1980 Microsoft Office Excel 24 26.02.2012 19:37
Объединение данных с нескольких листов в один Clockgen Microsoft Office Excel 10 03.11.2010 06:36