powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel: промодулировать диалог печати - вменяемо и надежно. ?
5 сообщений из 5, страница 1 из 1
Excel: промодулировать диалог печати - вменяемо и надежно. ?
    #35118454
Бабай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обратился ко мне сегодня коллега с вопросом как взаставить появляться в конкретной книжке диалог печати с предустановленной опцией "печатать всю книгу."

немедленно ничего умнее SendKeys "%г" в Workbook_BeforePrint я ему предложить не смог.
(Bad code - ui language dependent)

сейчас вот придумался такой вариант:

в обычном модуле размещаем так:
Код: plaintext
1.
2.
3.
4.
5.
Public Sub MyPrintMode()
    Dim xD As Dialog
    ЭтаКнига.IsMyPrint = True
    Set xD = Application.Dialogs(xlDialogPrint)
    xD.Show , , , , , , , , , , ,  3 
End Sub

Потом модуль книги и процедура Workbook_BeforePrint оформляются вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public IsMyPrint As Boolean

Private Sub Workbook_BeforePrint(Cancel As Boolean)
   
    If IsMyPrint Then
        IsMyPrint = Not IsMyPrint
    Else
        Cancel = True
        Application.OnTime Now, "MyPrintMode", Now + TimeValue("00:00:02")
    End If
End Sub

по крайней мере, от версии уя это уже не зависит.
Но нельзя ли обойтись без Appication.OnTime, глобального флага и отмены первого появления стандартного диалога?

Есть ли другие решения?
Как здесь правильно говорят - более другие.

может быть можно промодулировать непосредственно "стандартный" диалог, способом, отличным от SendKeys.

(вообще-то я думаю, что такого способа нет,
но очень надеюсь, что кто-нибудь покажет фокус)
...
Рейтинг: 0 / 0
Excel: промодулировать диалог печати - вменяемо и надежно. ?
    #35118519
tolikt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй в модуль книги код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim ActSh As String
ActSh = ActiveSheet.Name
Application.EnableEvents = False
Application.ScreenUpdating = False
Cancel = True
Sheets.Select
ActiveWorkbook.PrintOut
Sheets(ActSh).Select
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
Excel: промодулировать диалог печати - вменяемо и надежно. ?
    #35118782
Бабай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет. так не пойдет.
ты не понял - никто не просит печатать всю книгу, да еще и на текущий принтер.
Пользователь в критической ситуации сам решит - на какой принтер и всю или не всю.

Просят лишь предложить ему уже предустановленную опцию "печатать всю книгу."
...
Рейтинг: 0 / 0
Excel: промодулировать диалог печати - вменяемо и надежно. ?
    #35122166
Леонид Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня получилось так

Dim i As Byte

Private Sub Workbook_BeforePrint(Cancel As Boolean)

i = i + 1
If i = 1 Then
Application.Dialogs(xlDialogPrint).Show , , , , , , , , , , , 3
Cancel = True
End If
i = i - 1

End Sub

, но предварительный просмотр и печать по иконке с принтером стал тоже вызывать диалог.
Встает вопрос как отличить кто позвал BeforePrint
...
Рейтинг: 0 / 0
Excel: промодулировать диалог печати - вменяемо и надежно. ?
    #35123014
Бабай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо.
Коллега сообщил, что отказался от своей затеи.
Вопрос снят.


Еще раз спасибо за внимание и участие.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel: промодулировать диалог печати - вменяемо и надежно. ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]