Страница 1 из 2

Макрос 2003 в 2007 как откорректировать

Добавлено: 20 май 2009, 07:27
vadim245
И был у меня вот такой вот замечательный макрос.
И перешла контора на офис 2007 покупной.
И перестал работать мой замечательный макрос.....

Помогите пожалуйста исправить.


===================================
' Макрос собирает на лист "Сборник" со всех листов "Готовый лист" всех файлов, которые находятся в текущей диретории


Sub sborka()
Dim iFileName$, iPath$
Dim TxtFile As Workbook
Dim OrigWB As Workbook

Set OrigWB = ActiveWorkbook ' Книга в которую будем все собирать
iPath = ThisWorkbook.Path & "\"
iFileName = Dir(iPath & "*.xls")
Set fs = Application.FileSearch
With fs
.LookIn = iPath
.Filename = "*.xls*"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
For i = 1 To .FoundFiles.Count
If .FoundFiles(i) <> iPath & iFileName Then
Workbooks.Open Filename:=.FoundFiles(i)
Set TxtFile = ActiveWorkbook
lastrow = OrigWB.Worksheets("Сборник").Cells.SpecialCells(xlLastCell).Row
' Сборник - это лист того файла куда собираем все
TxtFile.Worksheets("Готовый лист").Range("A1:AK3000").Copy Destination:=OrigWB.Sheets("Сборник").Cells(lastrow + 1, 1)
' "Готовый лист" - одинаковое название листа во всех файлах "A1:C5" - область которую копируем
Application.DisplayAlerts = False
ActiveWindow.Close
Application.DisplayAlerts = True
End If
Next i
Else
MsgBox "There were no files found."
End If
End With
End Sub

=================================================

Ругается как минимум на Set fs = Application.FileSearch
Что еще не понравится я не знаю...

Re: Макрос 2003 в 2007 как откорректировать

Добавлено: 20 май 2009, 08:19
mc-black
Значит нет больше объекта FileSearch )) Думай, чем заменить поиск файлов.

Re: Макрос 2003 в 2007 как откорректировать

Добавлено: 20 май 2009, 08:38
vadim245
Сурово :-)

Re: Макрос 2003 в 2007 как откорректировать

Добавлено: 20 май 2009, 09:34
mc-black
У меня нет под рукой Office 2007, посмотри объектную модель или в браузере объектов по FileSearch. Может просто переподчинили объект в другое место или заменили чем-то другим похожим. А также в справке по VBA, там обычно указывают изменения новой версии по сравнению с предыдущими.

Re: Макрос 2003 в 2007 как откорректировать

Добавлено: 20 май 2009, 09:47
SAS888
В Excel 2007 метод FileSearch отключен разработчиками Microsoft.
Для поиска, открытия и обработки файлов, например, в текущей директории, можно использовать, например, такую конструкцию:

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

Dim iPath As String, iFileName As String, TxtFile As Workbook
iPath = CurDir & Application.PathSeparator
iFileName = Dir(iPath & "*.xls")
Do While iFileName <> ""
    If iFileName <> ThisWorkbook.Name Then
        Set TxtFile = Workbooks.Open(Filename:=iPath & iFileName)
            '
            '...
            '
    End If
    iFileName = Dir
Loop
Если требуется, добавьте проверку: "не открыт ли текущий файл". И обратите внимание, что в Excel 2007 могут быть и другие расширения. Если нужно обрабатывать все, то можно в строке формирования имени файла "*.xls" заменить на "*.xls*".

Re: Макрос 2003 в 2007 как откорректировать

Добавлено: 20 май 2009, 13:35
vadim245
Спасибо, SAS888
Ваш вариант работает отлично!
Правда, как выяснилось опытным путем, он у меня почему-то
обрабатывает файлы в
C:\Documents and Settings\Username\Мои документы\
В принципе не беда, но хотелось бы понять - может значение для переменной пути в какой-то момент равно системному пути винды или Excel?

Re: Макрос 2003 в 2007 как откорректировать

Добавлено: 20 май 2009, 13:41
SAS888
Чтобы не "париться", замените CurDir на ThisWorkbook.Path

Re: Макрос 2003 в 2007 как откорректировать

Добавлено: 20 май 2009, 14:44
vadim245
Испытал работающий макрос в "полевых", а не "лабораторных" условиях.
Интересная штука получается. У меня все файлы (и куда собираем и откуда собираем) в office 2003 с расширением xls. Собираю в среде Office 2007. Все работает нормально, пока количество строк в собираемом файле не достигает критической отметки (в моем случае 63 000). Это предел, поскольку следующая итерация будет пытаться впихнуть более 3 тыс, потому винда и выдает ошибки вроде "несовпадения диапазонов исходника и назначения". Решаю, что нужно файл-назначение с макросом сохранить сперва как XLSX, точнее XLSM, и тогда должно сработать. Но теперь уже макрос при запуске ругается на Subscript out of range. Ну видимо это потому что в макросе iFileName = Dir(iPath & "*.xls") а у нас один файл (результирующий) XLSM.

Наверно можно все файлы - исходники конвертануть чем-то пакетно в xlsm, в макросе вместо xls написать iFileName = Dir(iPath & "*.xlsm"), и все заработает.

Но может есть более красивое решение? Дело в том, что каждый раз собираемые файлы приходят от людей, работающих в 2003 офисе. И их видимо придется сперва конвертировать чем-то. Если других вариантов нет, то конечно буду искать конвертер (причем xls2xlsM, именно xlsM - вы не знаете чем можно конвертнуть пакетно?).

Re: Макрос 2003 в 2007 как откорректировать

Добавлено: 20 май 2009, 15:18
Mint86
vadim245 писал(а):именно xlsM - вы не знаете чем можно конвертнуть пакетно?).
Не знаю правильно ли я понял, но попробуйте этоhttp://www.softinterface.com/Convert-XL ... t-XLSM.htm

Или это
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Вот здесь тоже есть кое что...
Здесь можно поискать тоже
Не знаю поможет или нет.

Re: Макрос 2003 в 2007 как откорректировать

Добавлено: 21 май 2009, 06:20
SAS888
в макросе iFileName = Dir(iPath & "*.xls") а у нас один файл (результирующий) XLSM.
А что, замена "*.xls" на "*.xls*", которую я предвидел в самом начале, в строке кода iFileName = Dir(iPath & "*.xls") не помогает?