У меня есть приложение VB6, которое выдает ошибку 5, «Недопустимый вызов процедуры или аргумент», когда программа пытается установить объект «Принтер» на конкретный принтер из коллекции «Принтеры». Рассматриваемый принтер - это своего рода копировальный аппарат / принтер, работающий через сервер печати. Ошибка не возникает при установке объекта Printer для других принтеров, определенных в коллекции. Есть идеи, что может вызвать ошибку 5 в этом случае? Я не уверен, что именно происходит при использовании оператора «Set Printer = x» в VB6 - пытается ли он в этот момент взаимодействовать с фактическим драйвером принтера? Возможно ли, что драйвер по какой-либо причине не распознается как допустимый принтер объектом принтера VB6, что приводит к ошибке «недопустимый аргумент»?
Неверный вызов процедуры или аргумент при настройке объекта принтера
Ответы (5)
«Неверный вызов процедуры или аргумент» относится к ошибке времени выполнения VB 5.
Я подозреваю, что ошибка 5, которую вы видите, является кодом ошибки Win32, что означает «Доступ запрещен».
Очевидно, ошибки времени выполнения VB отличаются от ошибок Win32 - я подозреваю, что это связано с корнями VB, предшествовавшим даже MS-DOS: http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx. Я не уверен, как вы должны определять, какую интерпретацию использовать, когда
Set
. Вы получаете ошибки Win32 от VB6 только при вызовах API с использованием оператора Declare
, а затем вы должны обнаруживать их, просматривая свойство Err.LastDllError
- person MarkJ; 16.08.2010
Вы используете такой код, чтобы установить его правильно? Не просто пытаетесь установить его строкой?
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)
presto это сработало
Вы можете взглянуть на следующую страницу:
http://support.microsoft.com/kb/322710
При печати в VB6 я всегда использую это диалоговое окно вместо обычного диалогового окна, которое поставляется с VB6. Это намного надежнее.