Страницы: 1
RSS
Workbooks(sName).Close закрывает текущую книгу, но открывает Книга4.xls, Не могу закрыть книгу с автозапускаемым макросом так, чтобы не появилось новой книги
 
Добрый день. Excel 2003.

Что хочу:
Создавать 3 прайса xls, csv и csv по таймеру, не закрывая при этом другие открытые книги excel.
Что получил:
Всё работает как надо, за исключением того, что после последней строки макроса: Workbooks("Автоматика.xls").Close открывается новая "Книга4.xls", а если на момент выполнения макроса такая уже открыта, то "Книга5.xls" и т.д., в итоге после дня отсутствия за компьютером может быть открыто 20+ таких книг...

Как это делается:
Запуск по таймеру файла Автоматика.xls
Внутри макрос с автозапуском при открытии
Макрос 3 раза создаёт новую книгу, запускает 3 других макроса из personal.xls
Каждый новый макрос работает в новой книге, сохраняет результат в файл и закрывает книгу, остаётся после работы только открытая первоначальная книга
После выполнения всех строк макроса Автоматика.xls должна закрыть себя И закрывает, но открывается "Книга4.xls"

Вопрос: как закрывать текущую книгу так, чтобы новая книга не открывалас?


Текст макросов такой: (После выполнения строчки • открывается Книга4.xls)
Код
    Workbooks.Add
    Run "Personal.xls!Макрос1"
        <...Макрос1 начинается...>
        <...сам макрос...>
        ActiveWorkbook.SaveAs FileName:= "путь\имя.xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
        ActiveWindow.Close
        <...Макрос1 закончился...>
    Workbooks.Add
    Run "Personal.xls!Макрос2"
        <...Макрос2 начинается...>
        FileName = "путь\имя2.csv"
        Open FileName For Output As #1
        ...
        Close #1
        Close
        ActiveWindow.Close
        <...Макрос2 закончился...>
    Workbooks.Add
    Run "Personal.xls!Макрос3"
        <...Макрос3 начинается...>
        FileName = "путь\имя3.csv"
        Open FileName For Output As #1
        Close #1
        Close
        ActiveWindow.Close
        <...Макрос3 закончился...>
    sName = "Автоматика.xls"
•    Workbooks(sName).Close
 
Таймер когда больше не нужен - нужно выключать. Ну или закрывать приложение. А Вы вероятно это не знаете....
 
Цитата
Hugo написал:
Таймер когда больше не нужен - нужно выключать. Ну или закрывать приложение. А Вы вероятно это не знаете....
Может при высказываении своих мыслей я невольно использовал терминологию vba, о которой я не подозревал.
Под таймером я подразумевал "Планировщик заданий" из Windows 7
т.е. открывается книга в определённое время и включился макрос, находящийся внутри...
Планировщик заданий вызывает запускает .bat файл, .bat файл что-то делает и в том числе запускает скрипт .ahk, скрипт .ahk в том числе открывает книгу Автоматика.xls, далее макрос, который создаёт 3 книги и вызывает 3 макроса, 3 макроса, которые закрывают 3 книги, завершение работы первого макроса и создание книги №4, которую никто, собственно, не звал...

Или я не так понял ответ?

А если закрывать приложение, то могут быть закрыты книги, в которых я сейчас работаю - это меня не устроит.
 
Да, я не имел ввиду планировщик, а application.ontime.
По приведённому коду ничего сказать о причине открытия лишней книги нельзя.
 
Код
'может будет так достаточно?
For I = 1 To 3
    Workbooks.Add
    With ActiveWorkbook
        fName = "путь\имя" & I & ".xls"
        Run "Personal.xls!Макрос" & I
            '<...МакросN начинается...>
            '<...сам макрос...>
            '<...МакросN закончился...>
            .SaveAs Filename:=fName
            .Close
    End With
Next
Workbooks("Автоматика.xls").Close
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх