“Недопустимый вызов процедуры или аргумент” при настройке объекта Printer
Вопрос
У меня есть приложение 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.Это намного надежнее.