“Chamada de procedimento inválido ou o argumento” quando definir objeto Printer
Pergunta
Eu tenho um aplicativo VB6 que está dando um erro 5, "chamada de procedimento inválido ou o argumento" quando as tentativas do programa para definir o objeto de impressora para uma impressora específica da coleção Printers. A impressora em questão é algum tipo de copiadora / impressora que funciona através de um servidor de impressão. O erro não ocorre quando definir o objecto de impressora para outras impressoras definidas na coleção. Alguma idéia o que pode estar causando o erro 5 nesta circunstância? Não tenho certeza exatamente o que acontece quando se utiliza o "Definir impressora = x" declaração em VB6 - é a tentativa de interface com o driver de impressora real nesse ponto? É possível que o motorista não é reconhecido como uma impressora válida pelo objeto VB6 Printer, por algum motivo, resultando no erro "argumento inválido"?
Solução
A "chamada de procedimento inválido ou o argumento" é um erro VB tempo de execução 5.
Eu suspeito que o erro 5 você está vendo é o código de erro Win32, que significa "acesso negado".
Aparentemente erros de execução VB diferem dos erros Win32 - Eu suspeito que isso tem a ver com as raízes da VB, anteriores mesmo MS-DOS: http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx . Eu não sei como você é suposto para determinar qual interpretação para usar quando
Outras dicas
Você está usando um código como este para configurá-lo correto? Não apenas tentando defini-lo por uma corda?
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
A fim de parar de mudar a impressora padrão de executar esse código antes de definir a impressora. Então você não terá que definir a parte de trás da impressora padrão. Isso também faz com que sua seleção de impressora único para o seu programa que é o que a maioria das pessoas quer.
' deassociate printer object from default system printer
Printer.TrackDefault = False
Eu resolvi esse problema em MS Access 2007 VBA, incluindo o nome do servidor, juntamente com o nome da impressora.
Application.Printer = Application.Printers("\\servername\printername")
em vez de
Application.Printer = Application.Printers("printername")
Espero que isso ajude alguém.
Eu estava recebendo este erro e depois de um par de horas de frustração encontrei a minha resposta. Era uma questão sensível caso. Eu tinha um capital "S" quando eu deveria ter tido uma minúscula "s".
Assim, quando o código ficou assim:
XeroxReport = "\\Share\Red Xerox 430"
Set Application.Printer = Application.Printers(XeroxReport)
Gostaria de obter erro 5
Mas quando eu mudei para:
XeroxReport = "\\share\Red Xerox 430"
Set Application.Printer = Application.Printers(XeroxReport)
presto funcionou
Você pode querer dar uma olhada na seguinte página:
http://support.microsoft.com/kb/322710
Sempre que imprimir no VB6 Eu sempre uso essa caixa de diálogo em vez da caixa de diálogo comum que vem com VB6. É muito mais confiável.