Страницы: 1
RSS
Макрос на обновление файлов, Помогите с макросом
 
Господа, помогите оптимизировать макрос на обновление данных в файлах. Макрос написал сам, но ВБА знаю плохо , изучаю около двух недель. Макрос очень часто не проходит ( выдает Debug на сохранениях файлов, при повторном запуске макрос проходит нормально), поэтому нужна помощь в оптимизации макроса.
Изменено: Виктор Черный - 24.01.2013 12:51:15
С уважением, Павел.
 
Попробуй добавить в начале процедуры:
Код
Private Sub Workbook_Open() 
Application.EnableCancelKey = xlDisabled


а в конце процедуры:

Код
Application.EnableCancelKey = xlEnabled
End Sub
Изменено: SkyShark - 23.01.2013 13:59:14
 
Трам-тара-рам!
Виктор Черный, а теперь сами попробуйте войти в тему как сторонний пользователь, как будто тема не Ваша. Нравится листать свое первое сообщение?
Обратите внимание на файл в Вашем сообщении. Сравните размер места, занимаемого Вашим листингом в теме и места для файла.

При формировании текста сообщения его можно форматировать, длиннючие листинги можно помещать в текстовый файл. Но лучше: такие листинги должны быть в файле Excel, чтобы помогающие не помогали "на пальцах"!
 
Не верю, что вот это проходит нормально:
Workbooks("Variable Cost Budget 2013.xlsb".Save

Нет закрывающей скобки - должна по идее быть ошибка синтаксиса. Все разгребать не очень хочется, но можно сократить открытие и закрытие файлов через массивы:
Код
    Dim sPath As String, asFilesNames, li As Long
    sPath = "D:\Budget\2012\Spg\Bags\Division\Distribution Spg\"
    asFilesNames = Array("DS SPG BAGS WS ASIA 2013.xlsb", "DS SPG BAGS WS CIS 2013.xlsb", "DS SPG BAGS WS SPB 2013.xlsb")
    For li = LBound(asFilesNames) To UBound(asFilesNames)
        Workbooks.Open Filename:= _
                       sPath & asFilesNames(li), UpdateLinks:=0, Password:="", WriteResPassword:="", IgnoreReadOnlyRecommended:=True
    Next li
    'какие-то операции
    For li = LBound(asFilesNames) To UBound(asFilesNames)
        Workbooks(asFilesNames(li)).Close True'сохраняем в момент закрытия
    Next li
На некоторые файлы Вы меняете пароль - для этого можно сделать отдельный массив с паролями.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Скобки стоят, просто при копирование он их заменил на смайлы.

Код
 ActiveWorkbook.Save 
 ActiveWindow.Close 
 

или лучше заменить на
Код
 Workbooks("Имя книги").Save 
Workbooks("Имя книги".Close 

как надежнее?
Так же интересно можно ли как - нибудь обновлять книгу через связи , чтоб не надо было открывать 5 книг для обновления 1 ? Макрос зпускается автомотически ночью.
Изменено: Виктор Черный - 24.01.2013 13:04:19
С уважением, Павел.
 
Я Вам написал короче и проще:
Код
Workbooks(asFilesNames(li)).Close True'сохраняем в момент закрыти
только, похоже, оптимизация Вам не нужна.

Если брать конкретное имя книги:
Код
Workbooks("Имя книги").Close True
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я не очень хорошо разбираюсь в VBA поэтому плохо понимаю как работет макрос с переменной. Проблема в том что файлов оч много и каждый обновляется в своей последовательности, окрыть все файлы сразу оч большая нагрузка на сервер( часто вылетает, да и по времени макрос ограничен) и практически каждый файл запоролен, а то и по 2 раза( пароли все разные).Есть 3 группы файлов spg pmp и history , хистори обновляет SPG , SPG обновляет PMP(PMP обновляет хистори), затем SPG онбовляет history :) . Основной вопрос как можно уменьшить время и нагрузку макроса. Чтобы понять сложный макрос, который может написать специалист VBA, мне понадобиться очень много времени, поэтому я и спрашиваю , есть ли какая-нибудть простая комнда в ВБА обновляющая связи.
С уважением, Павел.
 
очень нужна помощь, макрос каждый день приходится запускать повторно из-за не прохождения
С уважением, Павел.
Страницы: 1
Наверх