«Недопустимый вызов процедуры или аргумент» при установке объекта «Принтер» - PullRequest
3 голосов
/ 10 апреля 2009

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

Ответы [ 5 ]

3 голосов
/ 10 апреля 2009

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

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

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

2 голосов
/ 10 апреля 2009

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

   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
1 голос
/ 23 апреля 2014

Я получил эту ошибку и через пару часов разочарования нашел свой ответ. Это был чувствительный к регистру вопрос. У меня была заглавная буква "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)

до того как все заработало

1 голос
/ 16 августа 2010

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

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

вместо

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

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

0 голосов
/ 14 апреля 2009

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

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

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

...