“Недопустимый вызов процедуры или аргумент” при настройке объекта Printer

StackOverflow https://stackoverflow.com/questions/737702

  •  09-09-2019
  •  | 
  •  

Вопрос

У меня есть приложение VB6, которое выдает ошибку 5 "Недопустимый вызов процедуры или аргумент", когда программа пытается установить объект Printer на определенный принтер из коллекции Printers.Принтер, о котором идет речь, представляет собой своего рода копировальный аппарат / принтер, работающий через сервер печати.Ошибка не возникает при установке объекта Printer на другие принтеры, определенные в коллекции.Есть какие-нибудь идеи, что может быть причиной ошибки 5 в этих обстоятельствах?Я не уверен, что именно происходит при использовании инструкции "Set Printer = x" в VB6 - пытается ли она взаимодействовать с фактическим драйвером принтера в этот момент?Возможно ли, что драйвер по какой-то причине не распознается объектом VB6 Printer как действительный принтер, что приводит к ошибке "недопустимый аргумент"?

Это было полезно?

Решение

"Недопустимый вызов процедуры или аргумент" относится к ошибке времени выполнения VB 5.

Я подозреваю, что ошибка 5, которую вы видите, - это код ошибки Win32, который означает "Доступ запрещен".

По-видимому, ошибки времени выполнения VB отличаются от ошибок Win32 - я подозреваю, что это связано с корнями VB, предшествующими даже MS-DOS: http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx.Я не уверен, как вы должны определять, какую интерпретацию использовать, когда

Другие советы

Вы используете подобный код, чтобы настроить его правильно?Не просто пытаетесь установить это с помощью строки?

   Dim strDeviceName As String
   Dim prnCurrent    As Printer

   For Each prnCurrent In Printers

      If UCase$(prnCurrent.DeviceName) = strDeviceName Then

         Set Printer = prnCurrent

         Exit For

      End If

   Next prnCurrent 

Чтобы остановить смену принтера по умолчанию, вы запускаете этот код перед настройкой принтера.Тогда вам не придется снова устанавливать принтер по умолчанию.Это также делает ваш выбор принтера уникальным для вашей программы, чего хочет большинство людей.

' deassociate printer object from default system printer
Printer.TrackDefault = False

Я решил эту проблему в MS Access 2007 VBA, включив имя сервера вместе с именем принтера.

Application.Printer = Application.Printers("\\servername\printername")

вместо того , чтобы

Application.Printer = Application.Printers("printername")

Надеюсь, это поможет кому-то еще.

Я получал эту ошибку и после пары часов разочарования нашел свой ответ.Это был чувствительный к конкретному случаю вопрос.У меня была заглавная "S", когда у меня должна была быть строчная "s".

Итак, когда код выглядел следующим образом:

XeroxReport = "\\Share\Red Xerox 430"
Set Application.Printer = Application.Printers(XeroxReport)

Я бы получил ошибку 5

Но когда я изменил его на:

XeroxReport = "\\share\Red Xerox 430"
Set Application.Printer = Application.Printers(XeroxReport)

вуаля, это сработало

Возможно, вы захотите взглянуть на следующую страницу:

http://support.microsoft.com/kb/322710

Всякий раз, когда я печатаю в VB6, я всегда использую это диалоговое окно вместо обычного диалогового окна, которое поставляется с VB6.Это намного надежнее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top