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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2011, 14:50   #1
Toffifee
Пользователь
 
Аватар для Toffifee
 
Регистрация: 11.05.2011
Сообщений: 59
Восклицание Автопересохранение книг с формата Excel 95 в формат Excel 2003

Здравствуйте уважаемые форумчане!!! Очень требуется ваша помощь!

А вопрос вот такой:
Из 1С 7.7 выгружается отчет в Экселе аж в формате 95... Это ооочень старый формат. И таких у нас выгружается штук 200 файликов. И потом надо каждый открывать и пересохранять в формат 2003. Это ооооочень трудоемкая работа. Простая до тошноты, но сколько времени отнимает.
Нет ли у кого решения данной проблемы???

Запускать например Макрос с отдельной книги, там как то указывать папку в которой лежат эти 200 файлоа 95 формата, и указывать куда, в какую папку, сохранять в 2003. Жмакаем кнопочку и процесс пошел. Чтоб он сам открывал их, пересохранял и закрывал....

Помогите пожалуйста!!!
Пример выгруженного отчета из 1С 7.7 приложила.

Аткарск.rar
Toffifee вне форума Ответить с цитированием
Старый 27.05.2011, 14:52   #2
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

сейчас напишу)
WizarD.89 вне форума Ответить с цитированием
Старый 27.05.2011, 15:20   #3
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

Цитата:
Здравствуйте уважаемые форумчане!!! Очень требуется ваша помощь!

А вопрос вот такой:
Из 1С 7.7 выгружается отчет в Экселе аж в формате 95... Это ооочень старый формат. И таких у нас выгружается штук 200 файликов. И потом надо каждый открывать и пересохранять в формат 2003. Это ооооочень трудоемкая работа. Простая до тошноты, но сколько времени отнимает.
Нет ли у кого решения данной проблемы???

Запускать например Макрос с отдельной книги, там как то указывать папку в которой лежат эти 200 файлоа 95 формата, и указывать куда, в какую папку, сохранять в 2003. Жмакаем кнопочку и процесс пошел. Чтоб он сам открывал их, пересохранял и закрывал....

Помогите пожалуйста!!!
Пример выгруженного отчета из 1С 7.7 приложила.
Код:
Sub main()
Const путь As String = "C:\1\" ' путь где находиться файлы (без под папок)
Directory = путь
Dim s As Workbook
If PathExists(путь & "excel2003") = False Then
MkDir (путь & "excel2003")
End If



f = Dir(Directory & "*.xls", 7)
Do While f <> ""
Set s = Workbooks.Open(путь & f)
    s.SaveAs Filename:= _
        путь & "excel2003\" & f, FileFormat:=xlExcel8 _
        , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=Fals
s.Close
f = Dir
Loop
End Sub
Function PathExists(pname) As Boolean
On Error Resume Next
PathExists = GetAttr(pname) And vbDirectory = vbDirectory
End Function
WizarD.89 вне форума Ответить с цитированием
Старый 27.05.2011, 16:26   #4
Toffifee
Пользователь
 
Аватар для Toffifee
 
Регистрация: 11.05.2011
Сообщений: 59
По умолчанию

Оооо, как интересно работает!!! Круто круто круто!!! Спасиииибо )))
А почему только папку без подпапок?
Toffifee вне форума Ответить с цитированием
Старый 27.05.2011, 17:31   #5
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

Код:
Function FilenamesCollection(ByVal FolderPath As String, Optional ByVal Mask As String = "", _
                             Optional ByVal SearchDeep As Long = 999) As Collection
    Set FilenamesCollection = New Collection
    Set FSO = CreateObject("Scripting.FileSystemObject")
    GetAllFileNamesUsingFSO FolderPath, Mask, FSO, FilenamesCollection, SearchDeep
    Set FSO = Nothing: Application.StatusBar = False
End Function
Sub main()
Const путь As String = "C:\1\" ' путь где находиться файлы  с подпапками
Directory = путь
Dim s As Workbook
If PathExists(путь & "excel2003") = False Then
MkDir (путь & "excel2003")
End If
Dim coll As Collection

Set coll = FilenamesCollection(путь, ".xls", 3)


    For i = 1 To coll.Count ' перебираем все элементы коллекции, содержащей пути к файлам
    Set s = Workbooks.Open(coll(i))
        s.SaveAs Filename:= _
        путь & "excel2003\" & Dir(coll(i)), FileFormat:=xlExcel8 _
        , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=Fals
        s.Close
        DoEvents
    Next


End Sub
Function PathExists(pname) As Boolean
On Error Resume Next
PathExists = GetAttr(pname) And vbDirectory = vbDirectory
End Function
Function GetAllFileNamesUsingFSO(ByVal FolderPath As String, ByVal Mask As String, ByRef FSO, _
                                 ByRef FileNamesColl As Collection, ByVal SearchDeep As Long)
    ' перебирает все файлы и подпапки в папке FolderPath, используя объект FSO
    ' перебор папок осуществляется в том случае, если SearchDeep > 1
    ' добавляет пути найденных файлов в коллекцию FileNamesColl
    On Error Resume Next: Set curfold = FSO.GetFolder(FolderPath)
    If Not curfold Is Nothing Then    ' если удалось получить доступ к папке

        ' раскомментируйте эту строку для вывода пути к просматриваемой
        ' в текущий момент папке в строку состояния Excel
        Application.StatusBar = "Поиск в папке: " & FolderPath

        For Each fil In curfold.Files    ' перебираем все файлы в папке FolderPath
            If fil.Name Like "*" & Mask Then FileNamesColl.Add fil.Path
        Next
        SearchDeep = SearchDeep - 1    ' уменьшаем глубину поиска в подпапках
        If SearchDeep Then    ' если надо искать глубже
            For Each sfol In curfold.SubFolders    ' ' перебираем все подпапки в папке FolderPath
                GetAllFileNamesUsingFSO sfol.Path, Mask, FSO, FileNamesColl, SearchDeep
            Next
        End If
        Set fil = Nothing: Set curfold = Nothing    ' очищаем переменные
    End If
End Function
Вот вам с подпапками

Последний раз редактировалось WizarD.89; 27.05.2011 в 17:33.
WizarD.89 вне форума Ответить с цитированием
Старый 27.05.2011, 17:47   #6
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

вот ваам файл с кнопкой на первом листе!
Вложения
Тип файла: rar прога.rar (16.8 Кб, 36 просмотров)
WizarD.89 вне форума Ответить с цитированием
Старый 29.05.2011, 09:09   #7
Toffifee
Пользователь
 
Аватар для Toffifee
 
Регистрация: 11.05.2011
Сообщений: 59
По умолчанию

Ооо, не ожидала, думала просто скажете почему, а Вы программу написали )))))))))
Спасибо!! И за кнопку тоже, правда я её ещё с тем первым кодом сама сделала )))
Toffifee вне форума Ответить с цитированием
Старый 29.05.2011, 15:57   #8
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Хм. Можно несколько проще
В Windows давно есть команда FOR...
Распакуйте файлы из прилагаемого архива в каталог с которого
нужно начать обход дерева для конвертации и запустите loop.cmd
Приведённый VBS скрипт конвертирует файлы по месту. Можно легко модифицировать его для сохранения по другому пути.
Требуемый результирующий формат устанавливается константой xlFrmt в VBS скрипте.
Обратите внимание что в разных версиях Excel она имеет различное значение.
loop.cmd
Код:
For /R %%i in (*.xls) Do conv.vbs "%%i"
conv.vbs
Код:
Const xlFrmt = -4143  ' Format Excel 2003 for Excel 2003
'Const xlFrmt = 56    ' Format Excel 2003 for Excel 2010 
with CreateObject("Excel.Application")
    .DisplayAlerts =False
    .WorkBooks.Open(WScript.Arguments(0)).SaveAs WScript.Arguments(0),xlFrmt
    .quit
end with
WizarD.89, по поводу вашего кода позвольте заметить:
1) Не надо начинать обработку если пользователь отказался при выборе папки ...
2) Полагаю, правильнее декларировать GetAllFileNamesUsingFSO как Sub а не как Function.
Учитывая как вы её вызываете
Вложения
Тип файла: zip conv.zip (708 байт, 35 просмотров)

Последний раз редактировалось Aent; 29.05.2011 в 20:11.
Aent вне форума Ответить с цитированием
Старый 29.05.2011, 17:36   #9
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

Aent

спасибо за замечания обработка шла дальше потому как я сделал это на скорую руку. И забыл это учесть.
WizarD.89 вне форума Ответить с цитированием
Старый 13.03.2020, 15:33   #10
nsinel
Новичок
Джуниор
 
Регистрация: 13.03.2020
Сообщений: 1
По умолчанию

WizarD.89! А для x64 что в коде надо поменять?
nsinel вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
формат ячеек Excel 2003 tumen Microsoft Office Excel 5 05.04.2011 06:15
Как переделать макрос копировать из других книг(Excel 2003) vfv Microsoft Office Excel 2 18.01.2011 15:22
Сравнение данных из двух и более книг Excel 2003 Елена20.12.1987 Microsoft Office Excel 0 20.04.2010 18:56
из формата txt в формат excel dalton Помощь студентам 1 20.03.2009 15:01
Сравнение данных из двух книг Excel 2003 ast1r Microsoft Office Excel 2 24.11.2008 21:39