Страницы: 1
RSS
Обработка ошибок (отсутствие принтера), не получается поймать ошибку
 
Всем доброго времени суток!

У меня есть таблица, в которой во время печати скрываются столбцы. При нажатии на кнопку "Печать" скрываются столбцы (по условию), затем находим последний столбец и строку выделяется дипазон печати - печатаем и возвращаем все на место (показываем скрытые столбцы). Код ниже:
Код
Private Sub CommandButton6_Click()

Dim ILastRow, ILastCol As Long

On Error GoTo ErrorPrinter

Application.ScreenUpdating = False

If ActiveWorkbook.Sheets("Лист1").Range("G2").Value = 0 Then Columns("G:G").Hidden = True
If ActiveWorkbook.Sheets("Лист1").Range("H2").Value = 0 Then Columns("H:H").Hidden = True
If ActiveWorkbook.Sheets("Лист1").Range("I2").Value = 0 Then Columns("I:I").Hidden = True
If ActiveWorkbook.Sheets("Лист1").Range("J2").Value = 0 Then Columns("J:J").Hidden = True
If ActiveWorkbook.Sheets("Лист1").Range("K2").Value = 0 Then Columns("K:K").Hidden = True
If ActiveWorkbook.Sheets("Лист1").Range("L2").Value = 0 Then Columns("L:L").Hidden = True

ILastCol = ActiveWorkbook.Sheets("Лист1").Cells(4, Columns.Count).End(xlToLeft).Column
ILastRow = ActiveWorkbook.Sheets("Лист1").Cells(Rows.Count, 4).End(xlUp).Row

ActiveWorkbook.Sheets("Лист1").Range(Cells(4, 4), Cells(ILastRow, ILastCol)).Select
Selection.PrintOut Copies:=1, Collate:=True

If ActiveWorkbook.Sheets("Лист1").Range("G2").Value = 0 Then Columns("G:G").Hidden = False
If ActiveWorkbook.Sheets("Лист1").Range("H2").Value = 0 Then Columns("H:H").Hidden = False
If ActiveWorkbook.Sheets("Лист1").Range("I2").Value = 0 Then Columns("I:I").Hidden = False
If ActiveWorkbook.Sheets("Лист1").Range("J2").Value = 0 Then Columns("J:J").Hidden = False
If ActiveWorkbook.Sheets("Лист1").Range("K2").Value = 0 Then Columns("K:K").Hidden = False
If ActiveWorkbook.Sheets("Лист1").Range("L2").Value = 0 Then Columns("L:L").Hidden = False

Application.ScreenUpdating = True

Exit Sub

ErrorPrinter:
On Error Resume Next
MsgBox "Устройство не найдено! Обратитесь к администратору!", vbOKOnly + vbExclamation, "Предупреждение"
Resume Next

End Sub
Я подумал, что надо подстраховаться, вдруг принтер выдаст ошибку или принтера не будет. У меня дома нет принтера, поэтому решил попробовать этот код дома, а он не ловит ошибку.
На строке:
Код
Selection.PrintOut Copies:=1, Collate:=True
он пытается распечатать и выдает ошибку: "Printer not activate, error code -40".

Переход на ErrorPrinter не осуществляется!

Прошу помощи. Что делаю не так?
 
А может проверять наличие принтера ДО всех этих действий по скрытию столбцов? А то теряется смысл
Код
Private Sub CommandButton6_Click()
If Application.ActivePrinter = "" Then
    MsgBox "Принтер не подключен!", , "Ошибка печати"
    Exit Sub
End If
Dim ILastRow, ILastCol As Long
On Error Resume Next
Application.ScreenUpdating = False
With ActiveWorkbook.Sheets("Лист1")
    For I = 7 To 12
        If .Cells(2, I).Value = 0 Then .Columns(I).Hidden = True
    Next
    ILastCol = .Cells(4, .Columns.Count).End(xlToLeft).Column
    ILastRow = .Cells(.Rows.Count, 4).End(xlUp).Row
    Range(.Cells(4, 4), .Cells(ILastRow, ILastCol)).Select
    Selection.PrintOut Copies:=1, Collate:=True
    For I = 7 To 12
        If .Columns(I).Hidden Then .Columns(I).Hidden = False
    Next    
End With
Application.ScreenUpdating = True
End Sub
Изменено: Sanja - 20.01.2018 20:15:25
Согласие есть продукт при полном непротивлении сторон
 
Идея отличная, но в моем случае не подходит, так как у меня весит какой-то принтер и он его находит. Но по факту принтера нет.
Может как-то по другому можно проверить на подключению к принтеру?
Изменено: samik - 20.01.2018 20:54:06
 
Так это и есть принтер. Только виртуальный. Удалите его из системы. По ФАКТУ у Вас принтер подключен
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Так это и есть принтер. Только виртуальный. Удалите его из системы. По ФАКТУ у Вас принтер подключен
Планируется, что файлик будет использоваться и на других ПК. Везде же не будешь удалять виртуальные принтеры.

Это я у себя дома попробовал. А на работе полно других компов.
Изменено: samik - 20.01.2018 21:03:34
 
Цитата
samik написал: Везде же не будешь удалять вертуальные принтеры
Так а как Excel'ю понять какой принтер подключен? Виртуальный или нет? Система (а через нее Ecxel) видит только драйвера.
Согласие есть продукт при полном непротивлении сторон
 
Т.е. ваша проблема формулируется так "У меня есть принтер по умолчанию, но я хочу печатать на другом"
Значит нужно выбрать другой, при этом точно указывая, какой.
А в свете
Цитата
samik написал:
Планируется, что файлик будет использоваться и на других ПК
как вы планируете определять, на каком принтере печатать, если это не принтер по умолчанию?
 
Я только сейчас узнал, что у меня есть какой-то принтер (виртуальный), фактически дома техники в виде принтера не стоит и напечать я ничего не могу. Поэтому, я хочу, чтобы при нажатии на кнопку "Печать" вылетало сообщение: "Принтер отсутствует!" или "Печать не возможна" или "Принтер не активен", а не сообщение: "Printer not activate, error code -40". Если до словно, то принтер не активен.
Картинка ошибки во вложении.
Изменено: samik - 20.01.2018 21:15:37
 
А файл-пример будет? А то у нас нету этой CommandButton6 которую нужно Click().  
Согласие есть продукт при полном непротивлении сторон
 
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=83806&amp...
 
В принципе, да, отошли от темы. Все таки почему НЕ ловится эта ошибка?  
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
А файл-пример будет? А то у нас нету этой CommandButton6 которую нужно Click().
 
Цитата
samik написал:
В принципе, да, отошли от темы. Все таки почему НЕ ловится эта ошибка?  
Сижу, рою инет))
 
samik, дайте пользователю выбрать принтер, при отмене печати не будет и проблемы тоже.
 
Activation Error - сообщение не Excel, а вашего принтера
Для интереса попробовал распечатать на Эпсон и HP, которые стоят в системе, но нет в наличии
Эпсон вывесил пару больших окошек.
HP ничего не вывесил, моргнул только быстренько каким-то окном
 
Цитата
Апострофф написал:
samik , дайте пользователю выбрать принтер, при отмене печати не будет и проблемы тоже.
Да, хорошая идея! Попробую проработать данный вопрос.

Цитата
RAN написал:
Activation Error - сообщение не Excel, а вашего принтера
Спасибо! Теперь понял причину.

Всем спасибо за потраченное время! Ночь длинная, думаю решу задачу)
 
Почитав в инете еще разные форумы и статьи я понял, что сделать то, что я хочу не возможно. Ошибка "Printer not activate, error code -40" является ошибкой принтера (как писали выше), по факту, работа макроса от нее не зависит. Меня устроит сообщение об ошибке, которое выдает винда. Поэтому решил оставить так как есть + дал возможность выбора принтера пользователю.

На форуме http://excelvba.ru/code/printers#comment-8690 предложили вот такой вариант: "Так что проще всего вывести пользователю MSGBOX с вопросом «Распечаталось?» и вариантами ответа да / нет, и на основании ответа пользователя продолжать работу макроса"
Страницы: 1
Наверх