макрос с выбором принтера при печати

Автор krilovsky68, 21.06.2023, 18:09

« назад - далее »

krilovsky68

Здравствуйте.
есть код печати с нумерацией.
необходимо сделать выбор принтера при печати - грубо говоря совместить два макроса.
макрос печати:
Sub soglashenie()
    Dim i&
        For i = Range("'форма'!j10") - 1 To Range("'форма'!k10") - 1
            i = i + 1
                Range("'www'!C2") = i
                Sheets("www").PrintOut
        Next i
Sheets("форма").Select
End Sub


макрос выбора принтера при печати, авторства Щербакова Д.(нашел на смежном ресурсе):

Sub ChangePrinter()
    sNowPrinter = "Set"
    Dim v, s
    'запоминаем текущий принтер, чтобы можно было вернуть его после выбора
    s = Application.ActivePrinter
    'показываем окно выбора принтера
    v = Application.Dialogs(xlDialogPrinterSetup).Show
    'если принтер был выбран - запоминаем выбор
    If v = True Then
        sNowPrinter = Application.ActivePrinter
    End If
    'возвращаем принтер по умолчанию, чтобы стандартная печать шла на него
    Application.ActivePrinter = s
End Sub
насколько я понимаю, макрос выбора должен стоять перед строкой Sheets("www").PrintOut а строка  Application.ActivePrinter = s в самом конце.
Но в своей компиляции совсем не уверен, поскольку есть затруднение с функцией  Dim
Был бы благодарен за итоговый вариант сращивания макросов

krilovsky68

и если не затруднит, макрос правильно сделал?
Sub печать()
   sNowPrinter = "Set"
    Dim v, s
    s = Application.ActivePrinter
    v = Application.Dialogs(xlDialogPrinterSetup).Show
    If v = True Then
        sNowPrinter = Application.ActivePrinter
    End If
Sheets("naz").Select
ActiveSheet.PrintOut Copies:=Sheets("форма").Range("j17")
Sheets("форма").Select
 
   Application.ActivePrinter = s

End Sub

Татьянка

Цитата: krilovsky68 от 21.06.2023, 18:09итоговый вариант сращивания макросов
Что должен делать "сращенный" макрос?

krilovsky68

#3
Цитата: Татьянка от 21.06.2023, 22:22Что должен делать "сращенный" макрос?

печать страницы.
прилагаю файл для наглядности - в первом сообщении (вопросе)

Татьянка

Цитата: krilovsky68 от 21.06.2023, 22:47печать страницы
Для печати страницы достаточно одной команды - PrintOut, а у вас два макроса по несколько строк :)

krilovsky68

#5
необходима  печать страницы с предварительным выбором принтера.
файл вопрос.xlsm вкладка "форма".
выбор принтера листа N сделал (правда не совсем уверен, что правильно).
с листом S сложности...
прилагаю файл для наглядности - в первом сообщении.

Татьянка

Цитата: krilovsky68 от 21.06.2023, 22:54выбор принтера листа N сделал
Лист N надо печатать другим принтером?
Этого нет ни в условиях, ни в макросе

krilovsky68

#7
Цитата: Татьянка от 21.06.2023, 23:00Лист N надо печатать другим принтером?
Этого нет ни в условиях, ни в макросе
надо сделать возможность выбора принтера при печати.
Лист "N"
Лист "N" с листа "форма" печатается с отображением окна выбора принтера. Насколько корректно я скомпилировал два макроса не знаю, но надеюсь что правильно.

Лист "S"
лист "S" с  листа "форма" печатается, но без выбора принтера.
Задача сделать возможность выбора принтера для печати листа "S" c листа "форма".
Для этого надо объединить два макроса: макрос печати и макрос выбора принтера. Оба макроса в первом сообщении указаны.

krilovsky68

#8
удалось составить макрос, но получилась ситуация, что при нажатии на печать, если печатается несколько страниц, каждый раз просит выбрать принтер.
Sub soglashenie()
    Dim v, s
    'запоминаем текущий принтер, чтобы можно было вернуть его после выбора
    s = Application.ActivePrinter
    'показываем окно выбора принтера
    v = Application.Dialogs(xlDialogPrinterSetup).Show
    'если принтер был выбран - запоминаем выбор
    If v = True Then
        sNowPrinter = Application.ActivePrinter
    End If
   
    Dim i&
        For i = Range("'форма'!j10") - 1 To Range("'форма'!k10") - 1
            i = i + 1
            Range("'S'!C2") = i
            Sheets("S").PrintOut
        Next i
Sheets("форма").Select

'возвращаем принтер по умолчанию, чтобы стандартная печать шла на него
    Application.ActivePrinter = s
End Sub

сейчас выяснил, что запрос на выбор принтера возник только при сохранении в файл.

Serge 007

Цитата: krilovsky68 от 21.06.2023, 23:03Задача сделать возможность выбора принтера для печати листа "S" c листа "форма".
Так надо?
Sub soglashenie()
    MyPrinter = Application.Dialogs(xlDialogPrinterSetup).Show
    Dim i&
        For i = Range("'форма'!j10") - 1 To Range("'форма'!k10") - 1
            i = i + 1
                Range("'S'!C2") = i
                Sheets("S").PrintOut ActivePrinter:="MyPrinter"
        Next i
    Sheets("форма").Activate
End Sub
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Vad

#10
Цитата: Serge 007 от 22.06.2023, 09:37Так надо?
Надо.. чтоб выбрался принтер по умолчанию, отпечатались все заданные бланки, вернулся принтер по умолчанию, который был. и Да все работает как надо...вроде.. но принтер по умолчанию не вернулся...наверно потому, что я прервал макрос...

Serge 007

Цитата: Vad от 22.06.2023, 12:23выбрался принтер по умолчанию
Цитата: Vad от 22.06.2023, 12:23вернулся принтер по умолчанию
Если просто ничего не делать (работать без макросов), то так и произойдет
Но, раз автору темы нужен макрос, то есть какая-то задача посложнее
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Vad

Цитата: Serge 007 от 22.06.2023, 12:42Если просто ничего не делать (работать без макросов), то так и произойдет
Но, раз автору темы нужен макрос, то есть какая-то задача посложнее
перезакрыл... макрос работает.. принтер по умолчанию возвращается)))!!

krilovsky68

Цитата: Serge 007 от 22.06.2023, 09:37Так надо?
да. после вашего кода, который в разы сложнее чем я навоял, мой выглядит ущербно.
попробовал воспользоваться вашей помощью, и макрос печати страницы N сделать по вашему образцу.
Sheets("S").PrintOut ActivePrinter:="MyPrinter" Copies:=Sheets("форма").Range("j17")говорят что так нельзя.

krilovsky68

Цитата: Serge 007 от 22.06.2023, 12:42автору темы нужен макрос, то есть какая-то задача посложнее
поясняю. я хочу облегчить работу в части печати бланков, по работе.
но возникла ситуация, что на компьютере секретаря коллегии установлено несколько принтеров, один из которых стоит по умолчанию, где она печатает текущие документы, а остальные используются для печати объемных документов.
поэтому стала нужна возможность выбора принтера.
зы. у меня принтер один - таких проблем нет).