Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/на листе экселя кнопка для отправки на печать - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » на листе экселя кнопка для отправки на печать (Макросы/Sub)
на листе экселя кнопка для отправки на печать
koyaanisqatsi Дата: Среда, 04.02.2015, 10:04 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Допустим имя принтера сработает и порт не надо будет прописывать.

Как послать активный лист экселя который содержит много разрывов страниц на принтер указанный в макросе отличный от дефолтного и чтобы макрос не менял дефолтный принтер. Просто при нажатии отправлял на прописаный принтер.
К сообщению приложен файл: 7531803.xlsx (55.6 Kb)
 
Ответить
СообщениеДопустим имя принтера сработает и порт не надо будет прописывать.

Как послать активный лист экселя который содержит много разрывов страниц на принтер указанный в макросе отличный от дефолтного и чтобы макрос не менял дефолтный принтер. Просто при нажатии отправлял на прописаный принтер.

Автор - koyaanisqatsi
Дата добавления - 04.02.2015 в 10:04
SLAVICK Дата: Среда, 04.02.2015, 11:13 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Изменил сообщение, еще раз :o :(

[vba]
Код
Sub dd()
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="Microsoft XPS Document Writer"' Вместо "Microsoft XPS Document Writer" - впишите нужный принтер
End Sub
[/vba]
На первый взгляд - то что нужно :D
Чтоб вернуть принтер назад:
Application.ActivePrinter = "MyPrinter" ' Вместо MyPrinter вписать нужный принтер.

Взял здесь
К сообщению приложен файл: 7531803.xlsm (55.8 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Среда, 04.02.2015, 12:02
 
Ответить
СообщениеИзменил сообщение, еще раз :o :(

[vba]
Код
Sub dd()
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="Microsoft XPS Document Writer"' Вместо "Microsoft XPS Document Writer" - впишите нужный принтер
End Sub
[/vba]
На первый взгляд - то что нужно :D
Чтоб вернуть принтер назад:
Application.ActivePrinter = "MyPrinter" ' Вместо MyPrinter вписать нужный принтер.

Взял здесь

Автор - SLAVICK
Дата добавления - 04.02.2015 в 11:13
SLAVICK Дата: Среда, 04.02.2015, 12:08 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Подкорректировал макрос :D

[vba]
Код
Sub Отправка_листа_на_нужный_принтер()
Dim aPr$
aPr = Application.ActivePrinter
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="Microsoft XPS Document Writer" ' Вместо "Microsoft XPS Document Writer" - впишите нужный принтер
Application.ActivePrinter = aPr ' Возврат активного принтера
End Sub
[/vba]


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Среда, 04.02.2015, 12:09
 
Ответить
СообщениеПодкорректировал макрос :D

[vba]
Код
Sub Отправка_листа_на_нужный_принтер()
Dim aPr$
aPr = Application.ActivePrinter
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="Microsoft XPS Document Writer" ' Вместо "Microsoft XPS Document Writer" - впишите нужный принтер
Application.ActivePrinter = aPr ' Возврат активного принтера
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 04.02.2015 в 12:08
koyaanisqatsi Дата: Четверг, 05.02.2015, 09:41 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Обалдеть красота ! ! ! Счастье )))) Все работает.
 
Ответить
СообщениеОбалдеть красота ! ! ! Счастье )))) Все работает.

Автор - koyaanisqatsi
Дата добавления - 05.02.2015 в 09:41
koyaanisqatsi Дата: Четверг, 05.02.2015, 10:17 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
К теме наверно уже не относится только непонятно что делать с таким явлением. Я не знаю от чего это зависит и будет ли менятся в дальнейшем. Принтер на который надо послать пока называется так "ZDesigner GC420d (перенаправлено 19)" Меня вот конкретно это смущает " (перенаправлено 19)" вижу в списках часто что за принтером пишется такая зяба и цифры разные. Если для этого номер изменится то по кнопке и печать не пойдет (
 
Ответить
СообщениеК теме наверно уже не относится только непонятно что делать с таким явлением. Я не знаю от чего это зависит и будет ли менятся в дальнейшем. Принтер на который надо послать пока называется так "ZDesigner GC420d (перенаправлено 19)" Меня вот конкретно это смущает " (перенаправлено 19)" вижу в списках часто что за принтером пишется такая зяба и цифры разные. Если для этого номер изменится то по кнопке и печать не пойдет (

Автор - koyaanisqatsi
Дата добавления - 05.02.2015 в 10:17
SLAVICK Дата: Четверг, 05.02.2015, 11:35 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Так воспользуйтесь проверкой наличия принтера в списке доступных.
Вы же в теме спрашивали про список доступных принтеров :D
Если нужный принтер есть - печатаем, если нет - предлагаем выбрать из списка, или выходим... как то так <_<
[vba]
Код
Sub Отправка_листа_на_нужный_принтер_c_проверкой()
Dim aPr$, s$, AllPrinters As Object, printer As Object, n%, m, primary_printer$, print_name$
primary_printer = "doPDF v9" ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию
aPr = Application.ActivePrinter
Set AllPrinters = GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT * FROM Win32_Printer", , 48)
'Получаем список принтеров
     For Each printer In AllPrinters
         n = n + 1
         s = s & vbCr & n & ": " & printer.name
         If printer.name = primary_printer Then print_name = primary_printer: Exit For ' если primary_printer найден в списке доступных
     Next
     s = Right(s, Len(s) - 1)
'Если такого принтера не найдено:
If print_name = "" Then
     If InStr(1, s, vbCr, vbTextCompare) = 0 Then MsgBox "Error no printers": Exit Sub
     m = Split(s, vbCr)
     n = InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1)
     If n > UBound(m) Or n = 0 Then MsgBox "Error no printers with this number": Exit Sub
     print_name = Split(m(n - 1), " ", 2)(1)
End If
'===============================
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=print_name
Application.ActivePrinter = aPr ' Возврат активного принтера
End Sub
[/vba]
К сообщению приложен файл: 2632828.xlsm (55.4 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 05.02.2015, 23:21
 
Ответить
СообщениеТак воспользуйтесь проверкой наличия принтера в списке доступных.
Вы же в теме спрашивали про список доступных принтеров :D
Если нужный принтер есть - печатаем, если нет - предлагаем выбрать из списка, или выходим... как то так <_<
[vba]
Код
Sub Отправка_листа_на_нужный_принтер_c_проверкой()
Dim aPr$, s$, AllPrinters As Object, printer As Object, n%, m, primary_printer$, print_name$
primary_printer = "doPDF v9" ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию
aPr = Application.ActivePrinter
Set AllPrinters = GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT * FROM Win32_Printer", , 48)
'Получаем список принтеров
     For Each printer In AllPrinters
         n = n + 1
         s = s & vbCr & n & ": " & printer.name
         If printer.name = primary_printer Then print_name = primary_printer: Exit For ' если primary_printer найден в списке доступных
     Next
     s = Right(s, Len(s) - 1)
'Если такого принтера не найдено:
If print_name = "" Then
     If InStr(1, s, vbCr, vbTextCompare) = 0 Then MsgBox "Error no printers": Exit Sub
     m = Split(s, vbCr)
     n = InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1)
     If n > UBound(m) Or n = 0 Then MsgBox "Error no printers with this number": Exit Sub
     print_name = Split(m(n - 1), " ", 2)(1)
End If
'===============================
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=print_name
Application.ActivePrinter = aPr ' Возврат активного принтера
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 05.02.2015 в 11:35
koyaanisqatsi Дата: Пятница, 06.02.2015, 12:18 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, ОГО !

Спасибо доберусь до этого макроса в Понедельник но думаю что все будет работать Спасибо огромное )
 
Ответить
СообщениеSLAVICK, ОГО !

Спасибо доберусь до этого макроса в Понедельник но думаю что все будет работать Спасибо огромное )

Автор - koyaanisqatsi
Дата добавления - 06.02.2015 в 12:18
koyaanisqatsi Дата: Понедельник, 16.02.2015, 14:53 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, Еще раз спасибо. Макрос работает почти идеально.
Внедрил. Отчитываюсь о работе.

1. Если при выборе принтера нажать эскейп то выдает сообщение об ошибке. Дебаг в строке
[vba]
Код
    n = InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1)
[/vba]

2. После отправки на печать если все хорошо сам эксель или макрос подвешивается на секунды 3-5 где-то. Наверно это плохо.

Скорее всего второе важнее чем первое.

И еще маленький вопросик. Если я создам отдельную страницу для того что бы этот макрос брал оттуда название принтера. Как это написать в самом макросе ? просто тут такая проблемака что имя принтера не статично вчера допустим было ZDesigner GC420d (перенаправлено 16) а завтра будет к примеру ZDesigner GC420d (перенаправлено 21)

Если бы можно было в ячейке изменять а в идеале сохранять макросом и брать оттуда последний выбранный принтер то было бы просто идеально. Ну скажем страница будет называться Принтер ячейка любая.

Заранее благодарен.


Сообщение отредактировал koyaanisqatsi - Понедельник, 16.02.2015, 14:58
 
Ответить
СообщениеSLAVICK, Еще раз спасибо. Макрос работает почти идеально.
Внедрил. Отчитываюсь о работе.

1. Если при выборе принтера нажать эскейп то выдает сообщение об ошибке. Дебаг в строке
[vba]
Код
    n = InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1)
[/vba]

2. После отправки на печать если все хорошо сам эксель или макрос подвешивается на секунды 3-5 где-то. Наверно это плохо.

Скорее всего второе важнее чем первое.

И еще маленький вопросик. Если я создам отдельную страницу для того что бы этот макрос брал оттуда название принтера. Как это написать в самом макросе ? просто тут такая проблемака что имя принтера не статично вчера допустим было ZDesigner GC420d (перенаправлено 16) а завтра будет к примеру ZDesigner GC420d (перенаправлено 21)

Если бы можно было в ячейке изменять а в идеале сохранять макросом и брать оттуда последний выбранный принтер то было бы просто идеально. Ну скажем страница будет называться Принтер ячейка любая.

Заранее благодарен.

Автор - koyaanisqatsi
Дата добавления - 16.02.2015 в 14:53
SLAVICK Дата: Понедельник, 16.02.2015, 15:53 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
1. исправьте строку на:
[vba]
Код
n = Val(InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1))
[/vba]
2. возможно(у меня нет задержек). Макрос изменяет активность принтера(два раза на указанный, а потом на первоначальный). Если принтер сетевой- нужно ему отправить запрос, и получить с него ответ. Тут вопрос быстродействия связи сетки... Кроме того изменяются параметры печати согласно этому принтеру. Чем больше документ, тем больше нужно изменять. Не думаю, что это можно как-то исправить
3. так укажите полный путь к ячейке с листом например:
[vba]
Код
primary_printer = Sheets("printer").Cells(1, "a").Value ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию
[/vba]
К сообщению приложен файл: 2649787.xlsm (60.1 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Понедельник, 16.02.2015, 15:56
 
Ответить
Сообщение1. исправьте строку на:
[vba]
Код
n = Val(InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1))
[/vba]
2. возможно(у меня нет задержек). Макрос изменяет активность принтера(два раза на указанный, а потом на первоначальный). Если принтер сетевой- нужно ему отправить запрос, и получить с него ответ. Тут вопрос быстродействия связи сетки... Кроме того изменяются параметры печати согласно этому принтеру. Чем больше документ, тем больше нужно изменять. Не думаю, что это можно как-то исправить
3. так укажите полный путь к ячейке с листом например:
[vba]
Код
primary_printer = Sheets("printer").Cells(1, "a").Value ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию
[/vba]

Автор - SLAVICK
Дата добавления - 16.02.2015 в 15:53
koyaanisqatsi Дата: Понедельник, 16.02.2015, 16:29 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, Спасибо.
А чтобы он сохранял в ячейку последний выбранный если не нашел предыдущий принтер так можно ? Или придется самостоятельно в той ячейке исправлять название принтера на новое текущее если изменится последнее число в названии принтера ?

С сетью понял, мы посылаем с сервера на локальный принтер. Хотя если без макроса посылать такой задержки нет. Ну ладно. Остальное все работает кроме сохранения последнего выбранного принтера в ячейку на странице printer в A1


Сообщение отредактировал koyaanisqatsi - Понедельник, 16.02.2015, 16:40
 
Ответить
СообщениеSLAVICK, Спасибо.
А чтобы он сохранял в ячейку последний выбранный если не нашел предыдущий принтер так можно ? Или придется самостоятельно в той ячейке исправлять название принтера на новое текущее если изменится последнее число в названии принтера ?

С сетью понял, мы посылаем с сервера на локальный принтер. Хотя если без макроса посылать такой задержки нет. Ну ладно. Остальное все работает кроме сохранения последнего выбранного принтера в ячейку на странице printer в A1

Автор - koyaanisqatsi
Дата добавления - 16.02.2015 в 16:29
SLAVICK Дата: Понедельник, 16.02.2015, 18:44 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Можно. :D
после
[vba]
Код
print_name = Split(m(n - 1), " ", 2)(1)
[/vba]
добавьте:
[vba]
Код
Sheets("printer").Cells(1, "a").Value = print_name
[/vba]
К сообщению приложен файл: 1777020.xlsm (60.3 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеМожно. :D
после
[vba]
Код
print_name = Split(m(n - 1), " ", 2)(1)
[/vba]
добавьте:
[vba]
Код
Sheets("printer").Cells(1, "a").Value = print_name
[/vba]

Автор - SLAVICK
Дата добавления - 16.02.2015 в 18:44
koyaanisqatsi Дата: Вторник, 17.02.2015, 10:12 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, Не зря я этим обеспокоился )
Отлично работает. И имя принтера конечно же уже поменялось. Но теперь проблема не проблема )
 
Ответить
СообщениеSLAVICK, Не зря я этим обеспокоился )
Отлично работает. И имя принтера конечно же уже поменялось. Но теперь проблема не проблема )

Автор - koyaanisqatsi
Дата добавления - 17.02.2015 в 10:12
Мир MS Excel » Вопросы и решения » Вопросы по VBA » на листе экселя кнопка для отправки на печать (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!