Страница: 1 |
Страница: 1 |
Вопрос: Срочно, помогите, как с VB распечатать и закрыть?
Добавлено: 10.08.06 12:27
Автор вопроса: ddasoft | Web-сайт:
Я сформировал отчёт из VB и перекинул данные в Ёксель, туды-сюды, всё отлично, и мне надо чтоб юзер даже не успел увидеть это а чтоб оно сразу отправилось на печать и книга закрылась без сохранения, так как это шаблон.
т.е. нужны команды:
1. Распечатать.
2. Закрыть без сохранения и каких либо клацаний мышкой по кнопкам "Нет" на вопрос "сохранить?"
Помогите кто чем может.
Заранее благодарен.
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #1
Добавлено: 10.08.06 13:27
____ Да включить надо запись макроса в Excel да и посмотреть, что там будет после этих действий (вручную). Может быть потребуется ещё сделать невидимым сам Excel на время этих действий из VB.
Номер ответа: 2
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #2
Добавлено: 10.08.06 13:48
set XLObj = CreateObject("Excel.Application"
xlObj.visible = false
'На всякий случай, по умолчанию его и так не видно
xlObj.workbooks.add
'Тра-ля-ля, формируем отчет
xlObj.ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
while xlObj.Workbooks.Count>0
xlObj.ActiveWorkbook.Close False
next
xlObj.Quit
Естественно это я так, прямо в броузере набрал, может где-нибудь синтаксическая ошибка или там чего, но в общем идея должна быть понятна.
Номер ответа: 3
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #3
Добавлено: 10.08.06 13:49
Только имей в виду, закроются без сохранения все открытые рабочие книги
Номер ответа: 4
Автор ответа:
ddasoft
ICQ: 209194603
Вопросов: 12
Ответов: 27
Web-сайт:
Профиль | | #4
Добавлено: 10.08.06 14:35
To "Alexey":
Yes! Yes! Yes!
То что нада - супер ...
Пасиба Агромное ...
С меня пиво
Номер ответа: 5
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #5
Добавлено: 10.08.06 14:39
А ты откуда? Боюсь что далеко нести будешь, да еще и через таможню оформлять. Я в Киеве.
Номер ответа: 6
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #6
Добавлено: 10.08.06 14:40
Да, после While конечно же Wend, а не Next, звиняй, ачепятка.
Номер ответа: 7
Автор ответа:
ddasoft
ICQ: 209194603
Вопросов: 12
Ответов: 27
Web-сайт:
Профиль | | #7
Добавлено: 10.08.06 14:48
Недалеко, я с Ужгорода ... на велике как нибуть пришпилю ... на крайняк АвтоЛюксом вышлю
я не использовал цикл пробега всех книг, а просто xlObj.ActiveWorkbook.Close False ... ведь у меня только одна открывается и сразу закрывается.
Номер ответа: 8
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #8
Добавлено: 10.08.06 15:03
Предпочитаю действовать наверняка. Объясняю почему: если вдруг по каким-то причинам твоя програ не завершила нормально работу предыдущий раз, то ты можешь попасть в Эксель с уже существующим документом, а использование Quit для экселя с открытым документом может привести к выбросу нежелательного для тебя окошка. Гипотетически. В общем рекомендую цикл все-таки оставить.
Номер ответа: 9
Автор ответа:
ddasoft
ICQ: 209194603
Вопросов: 12
Ответов: 27
Web-сайт:
Профиль | | #9
Добавлено: 10.08.06 15:37
Ну а если, к примеру, открыт ещё какой-то файл Ёкселя? - оно-ж и его захлопнет?
А это не желательно ...
Гипотетически, коль всё будет намана, то и захлопываться будет файлик нормально, ну а если уж прога вылетела, Ёксель невидим и открыт, то его мона рубануть и через Диспетчер задач.
Номер ответа: 10
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #10
Добавлено: 10.08.06 15:40
Ну в общем делай как знаешь, я путь показал, мое дело передупердить
Номер ответа: 11
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #11
Добавлено: 10.08.06 15:42
Лучше всего сделать вот так:
xlObj.ActiveWorkBook.Close False
if xlObj.Workobooks.count = 0 then
xlObj.Quit
End If
Потому, что если сделаешь Quit, то открытые книги все равно позакрываются, а так закроется только твой документ.
Номер ответа: 12
Автор ответа:
ddasoft
ICQ: 209194603
Вопросов: 12
Ответов: 27
Web-сайт:
Профиль | | #12
Добавлено: 10.08.06 15:56
нет ... я проверил ... открыл паралельно документ Ёкселя и кинул на печать отчёт (где в конце он закрывает Ёксель) ... и он не тронул открытый мною файл.
Насколько я понял все действия производимые над обьектом xlObj относятся только к тому что было открыто или создано с помощь него. Чуго он не трогает
Номер ответа: 13
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #13
Добавлено: 10.08.06 16:05
Ну в общем-то в этом случае ты прав. Дело в том, что я не люблю на каждый запуск моей программы открывать по одному Экселю, тем более что он скрыт и втихую хавает системные ресурсы. Я делаю вот так:
err = 0
On error Resume next
xlObj = GetObject("Excel.Application"
If err>0 then
xlObj = CreateObject("Excel.Application"
End If
Этот код создает новый экземпляр приложения Экселя только в том случае, если нет уже открытых, а если есть открытый эксель, то он работает в нем, иначе в период отладки программы не всегда доводишь ее до места, в котором она закрывает эксель, и после 10 запусков в диспетчере висят 10 экселей. И вот именно в этом случае лучше применять код из поста #11, а в твоем можно и не применять.
Номер ответа: 14
Автор ответа:
ddasoft
ICQ: 209194603
Вопросов: 12
Ответов: 27
Web-сайт:
Профиль | | #14
Добавлено: 10.08.06 16:17
ну в общем понятно ...
Я юзерам уже поставил её, печатают вроде намана.
Пока вроде всё хорошо, а там будем посотреть
Спасибо бАльшое за помосчь в трудную минуту и нелёгкий час
Номер ответа: 15
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #15
Добавлено: 10.08.06 16:33
Да всегда пожалуйста.