“Chamada de procedimento inválido ou o argumento” quando definir objeto Printer

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

  •  09-09-2019
  •  | 
  •  

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"?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top