Преобразование из файлов *.xls в книгу

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
GAD
Сообщения: 2
Зарегистрирован: 14 июл 2009, 15:45

Доброго времени суток!

Столкнулся тут с проблемой на работе ! в ~ 150 файлах *.xls допущена ошибка в одном и том же месте :( в скором времени намечается проверка и надо сдавать отчеты по этим файлам...

Возникают некоторые вопросы для простого бухгалтера не решимые ;)

1"как преобразовать из ~ 150 *.xls в одну книгу"
2"как сделать "скелет" чтобы наложить его в файлы поверх (5-10 разных ячеек в разных местах) основного текста...."
3"Возможны ли массовые работы с файлами .xls"

Буду премного балгодарен ответу на любой вопрос ..
Пишите в ICQ 4475198 или тут !
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

1"как преобразовать из ~ 150 *.xls в одну книгу"
Смотря как Вы намереваетесь "склеить" 150 файлов в один...

Если в каждой книге по одному листу - то всё просто.
Пишем макрос, который копирует все листы из файлов в определённой папке в один итоговый файл, - и всё.
2"как сделать "скелет" чтобы наложить его в файлы поверх (5-10 разных ячеек в разных местах) основного текста...."
Создаём лист шаблона, заполняем его данными.
Потом выделяем ячейки, которые нужно перезаписать на остальных листах этого файла (или на 1-м листе каждого из 150-ти файлов), и запускаем другой макрос.
3"Возможны ли массовые работы с файлами .xls"
Ещё как возможны. Примеров на форуме множество.

(добавлено)
Вот что получилось:

Код: Выделить всё

[color=darkblue]Sub[/color] НесколькоФайловВОдин()
    ИмяДляНовогоФайла = "ВсёВОдном"
    Application.ScreenUpdating = False: Application.DisplayAlerts = [color=darkblue]False[/color]

    [color=darkblue]Dim[/color] coll [color=darkblue]As[/color] [color=darkblue]New[/color] Collection, wb [color=darkblue]As[/color] Workbook, sh [color=darkblue]As[/color] Worksheet, newRow [color=darkblue]As[/color] Range
    Mask = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "*.xls")

    Filename = Dir(Mask)
    [color=darkblue]While[/color] Filename <> ""    [color=green]' перебираем все файлы в текущей папке[/color]
        [color=darkblue]If[/color] [color=darkblue]Not[/color] (Filename [color=darkblue]Like[/color] ThisWorkbook.Name & "*" [color=darkblue]Or[/color] Filename [color=darkblue]Like[/color] ИмяДляНовогоФайла & "*") _
           [color=darkblue]Then[/color] coll.Add Filename
        Filename = Dir
    [color=darkblue]Wend[/color]
    [color=darkblue]If[/color] coll.Count = 0 [color=darkblue]Then[/color] MsgBox "Файлы для обработки не найдены", vbExclamation: [color=darkblue]Exit[/color] [color=darkblue]Sub[/color]
    [color=darkblue]Dim[/color] newwb [color=darkblue]As[/color] Workbook: [color=darkblue]Set[/color] newwb = Workbooks.Add(xlWBATWorksheet)

    [color=darkblue]On[/color] [color=darkblue]Error[/color] [color=darkblue]Resume[/color] Next: n = 1
    [color=darkblue]For[/color] [color=darkblue]Each[/color] Item [color=darkblue]In[/color] coll
        Application.StatusBar = "Обрабатывается файл " & n & " из " & coll.Count: n = n + 1
        DoEvents
        [color=darkblue]Set[/color] wb = Workbooks.Open(Replace(ThisWorkbook.FullName, ThisWorkbook.Name, Item), , [color=darkblue]True[/color])
        [color=darkblue]If[/color] [color=darkblue]Not[/color] wb [color=darkblue]Is[/color] [color=darkblue]Nothing[/color] [color=darkblue]Then[/color]
            wb.Worksheets(1).Copy newwb.Worksheets(1)
            newwb.Worksheets(1).Name = Left(Replace(wb.Name, ".xls", ""), 31)
            wb.Close [color=darkblue]False[/color]
        [color=darkblue]End[/color] [color=darkblue]If[/color]
    [color=darkblue]Next[/color]
    newwb.SaveAs Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "ВсёВОдном.xls")
    newwb.Worksheets(newwb.Worksheets.Count).Delete
    Application.DisplayAlerts = [color=darkblue]True[/color]
    Application.StatusBar = False
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
GAD
Сообщения: 2
Зарегистрирован: 14 июл 2009, 15:45

Большое спасибо EducatedFool !!! :D
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Уважаемый EducatedFool, а вы не могли бы подсабить в обратном действии этого макроса !? из книги в отдельные файлы ... имя листа = имя файла.
Уже благодарен !
Ответить