PROBLEMA AO IMPRIMIR USANDO O WORD
Galera tenho um aplicativo que acessa o word, troca alguns dados e manda imprimir o documento,até ai funciona normalmente, só que em determinados momentos quando se mandam vários registros, o sistema tenta abrir o documento duas ou mais vezes e com isso aparece a mensagem que tem que abrir o documento como somente leitura e da o problema.
Alguém já passou por isso?
Sabe se tem como receber um retorno do word de confirmação de impressão, para o sistema poder mais um ou algo assim?
Estou pensando em fazer um loop e com isso atrasar o envio da impressão em até 2 segundos, más queria ver se tem alguma outra solução melhor
Agradeço a todos
Alguém já passou por isso?
Sabe se tem como receber um retorno do word de confirmação de impressão, para o sistema poder mais um ou algo assim?
Estou pensando em fazer um loop e com isso atrasar o envio da impressão em até 2 segundos, más queria ver se tem alguma outra solução melhor
Agradeço a todos
tem como voce postar o trecho do seu código de como você faz a impressao.
Marcelo obrigado pelo retorno
Estou postando o código
Dim ObjWord As Word.Application [ô]Cria o objeto para o Word
Dim rsImp As Recordset
Dim I As Integer
Set rsImp = New Recordset
rsImp.Open StrSql, Db, adOpenKeyset, adLockOptimistic
While Not rsImp.EOF
Set ObjWord = New Word.Application [ô]Cria o objeto para o Word
[ô] nome do relatorio pré montado
ObjWord.Documents.Open App.Path & [Ô]\contribuição sindical 2013.doc[Ô]
ObjWord.DisplayAlerts = wdAlertsNone
Call Substitui_Var([Ô]@NomeContabilidade[Ô], rsImp!Nome, ObjWord)
Call Substitui_Var([Ô]@EnderecoContabilidade[Ô], IIf(IsNull(rsImp!Endereco), [Ô][Ô], rsImp!Endereco), ObjWord)
Call Substitui_Var([Ô]@BairroContabilidade[Ô], IIf(IsNull(rsImp!Bairro), [Ô][Ô], rsImp!Bairro), ObjWord)
Call Substitui_Var([Ô]@CidadeContabilidade[Ô], IIf(IsNull(rsImp!Cidade), [Ô][Ô], rsImp!Cidade), ObjWord)
Call Substitui_Var([Ô]@CepContabilidade[Ô], IIf(IsNull(rsImp!Cep), [Ô][Ô], rsImp!Cep), ObjWord)
Call Substitui_Var([Ô]@UfContabilidade[Ô], IIf(IsNull(rsImp!Estado), [Ô][Ô], rsImp!Estado), ObjWord)
ObjWord.ActiveDocument.SaveAs (App.Path + [Ô]\contribuição sindical - [Ô] & Replace(rsImp!Nome, [Ô]/[Ô], [Ô] [Ô]) & [Ô].doc[Ô])
ObjWord.PrintOut
ObjWord.Documents.Close
Kill App.Path + [Ô]\Contribuição Sindical - [Ô] & Replace(rsImp!Nome, [Ô]/[Ô], [Ô] [Ô]) & [Ô].doc[Ô]
ObjWord.Visible = False
Set ObjWord = Nothing
rsImp.MoveNext
Wend
Mensagem [Ô]Impressão feita com sucesso[Ô]
Estou postando o código
Dim ObjWord As Word.Application [ô]Cria o objeto para o Word
Dim rsImp As Recordset
Dim I As Integer
Set rsImp = New Recordset
rsImp.Open StrSql, Db, adOpenKeyset, adLockOptimistic
While Not rsImp.EOF
Set ObjWord = New Word.Application [ô]Cria o objeto para o Word
[ô] nome do relatorio pré montado
ObjWord.Documents.Open App.Path & [Ô]\contribuição sindical 2013.doc[Ô]
ObjWord.DisplayAlerts = wdAlertsNone
Call Substitui_Var([Ô]@NomeContabilidade[Ô], rsImp!Nome, ObjWord)
Call Substitui_Var([Ô]@EnderecoContabilidade[Ô], IIf(IsNull(rsImp!Endereco), [Ô][Ô], rsImp!Endereco), ObjWord)
Call Substitui_Var([Ô]@BairroContabilidade[Ô], IIf(IsNull(rsImp!Bairro), [Ô][Ô], rsImp!Bairro), ObjWord)
Call Substitui_Var([Ô]@CidadeContabilidade[Ô], IIf(IsNull(rsImp!Cidade), [Ô][Ô], rsImp!Cidade), ObjWord)
Call Substitui_Var([Ô]@CepContabilidade[Ô], IIf(IsNull(rsImp!Cep), [Ô][Ô], rsImp!Cep), ObjWord)
Call Substitui_Var([Ô]@UfContabilidade[Ô], IIf(IsNull(rsImp!Estado), [Ô][Ô], rsImp!Estado), ObjWord)
ObjWord.ActiveDocument.SaveAs (App.Path + [Ô]\contribuição sindical - [Ô] & Replace(rsImp!Nome, [Ô]/[Ô], [Ô] [Ô]) & [Ô].doc[Ô])
ObjWord.PrintOut
ObjWord.Documents.Close
Kill App.Path + [Ô]\Contribuição Sindical - [Ô] & Replace(rsImp!Nome, [Ô]/[Ô], [Ô] [Ô]) & [Ô].doc[Ô]
ObjWord.Visible = False
Set ObjWord = Nothing
rsImp.MoveNext
Wend
Mensagem [Ô]Impressão feita com sucesso[Ô]
o problema que voce está encontrando é quando tenta imprimir varios registros diferentes? ou seja abre e fecha o word a cada registro é isso mesmo?
Sim é isso mesmo, chega um momento que ele tenta abrir o doc sem ter fechado o anterior
então colega você pode tentar tratar o erro desta forma
[txt-color=#0000f0]On Error Goto TrataErro[/txt-color]
Dim ObjWord As Word.Application [ô]Cria o objeto para o Word
Dim rsImp As Recordset
Dim I As Integer
Set rsImp = New Recordset
[txt-color=#0000f0]Continua:[/txt-color]
rsImp.Open StrSql, Db, adOpenKeyset, adLockOptimistic
While Not rsImp.EOF
Set ObjWord = New Word.Application [ô]Cria o objeto para o Word
[ô] nome do relatorio pré montado
ObjWord.Documents.Open App.Path & [Ô]\contribuição sindical 2013.doc[Ô]
ObjWord.DisplayAlerts = wdAlertsNone
Call Substitui_Var([Ô]@NomeContabilidade[Ô], rsImp!Nome, ObjWord)
Call Substitui_Var([Ô]@EnderecoContabilidade[Ô], IIf(IsNull(rsImp!Endereco), [Ô][Ô], rsImp!Endereco), ObjWord)
Call Substitui_Var([Ô]@BairroContabilidade[Ô], IIf(IsNull(rsImp!Bairro), [Ô][Ô], rsImp!Bairro), ObjWord)
Call Substitui_Var([Ô]@CidadeContabilidade[Ô], IIf(IsNull(rsImp!Cidade), [Ô][Ô], rsImp!Cidade), ObjWord)
Call Substitui_Var([Ô]@CepContabilidade[Ô], IIf(IsNull(rsImp!Cep), [Ô][Ô], rsImp!Cep), ObjWord)
Call Substitui_Var([Ô]@UfContabilidade[Ô], IIf(IsNull(rsImp!Estado), [Ô][Ô], rsImp!Estado), ObjWord)
ObjWord.ActiveDocument.SaveAs (App.Path + [Ô]\contribuição sindical - [Ô] & Replace(rsImp!Nome, [Ô]/[Ô], [Ô] [Ô]) & [Ô].doc[Ô])
ObjWord.PrintOut
ObjWord.Documents.Close
Kill App.Path + [Ô]\Contribuição Sindical - [Ô] & Replace(rsImp!Nome, [Ô]/[Ô], [Ô] [Ô]) & [Ô].doc[Ô]
ObjWord.Visible = False
Set ObjWord = Nothing
rsImp.MoveNext
Wend
Mensagem [Ô]Impressão feita com sucesso[Ô]
[txt-color=#0000f0]Exit Sub
TrataErro:
If Err.Number = coloca o numero do erro aqui Then
Resume Continua
End If[/txt-color]
neste meu exemplo quando ele encontrar o erro onde informa que o arquivo está aberto ele retorna para onde parou
isto é apenas uma suposição
[txt-color=#0000f0]On Error Goto TrataErro[/txt-color]
Dim ObjWord As Word.Application [ô]Cria o objeto para o Word
Dim rsImp As Recordset
Dim I As Integer
Set rsImp = New Recordset
[txt-color=#0000f0]Continua:[/txt-color]
rsImp.Open StrSql, Db, adOpenKeyset, adLockOptimistic
While Not rsImp.EOF
Set ObjWord = New Word.Application [ô]Cria o objeto para o Word
[ô] nome do relatorio pré montado
ObjWord.Documents.Open App.Path & [Ô]\contribuição sindical 2013.doc[Ô]
ObjWord.DisplayAlerts = wdAlertsNone
Call Substitui_Var([Ô]@NomeContabilidade[Ô], rsImp!Nome, ObjWord)
Call Substitui_Var([Ô]@EnderecoContabilidade[Ô], IIf(IsNull(rsImp!Endereco), [Ô][Ô], rsImp!Endereco), ObjWord)
Call Substitui_Var([Ô]@BairroContabilidade[Ô], IIf(IsNull(rsImp!Bairro), [Ô][Ô], rsImp!Bairro), ObjWord)
Call Substitui_Var([Ô]@CidadeContabilidade[Ô], IIf(IsNull(rsImp!Cidade), [Ô][Ô], rsImp!Cidade), ObjWord)
Call Substitui_Var([Ô]@CepContabilidade[Ô], IIf(IsNull(rsImp!Cep), [Ô][Ô], rsImp!Cep), ObjWord)
Call Substitui_Var([Ô]@UfContabilidade[Ô], IIf(IsNull(rsImp!Estado), [Ô][Ô], rsImp!Estado), ObjWord)
ObjWord.ActiveDocument.SaveAs (App.Path + [Ô]\contribuição sindical - [Ô] & Replace(rsImp!Nome, [Ô]/[Ô], [Ô] [Ô]) & [Ô].doc[Ô])
ObjWord.PrintOut
ObjWord.Documents.Close
Kill App.Path + [Ô]\Contribuição Sindical - [Ô] & Replace(rsImp!Nome, [Ô]/[Ô], [Ô] [Ô]) & [Ô].doc[Ô]
ObjWord.Visible = False
Set ObjWord = Nothing
rsImp.MoveNext
Wend
Mensagem [Ô]Impressão feita com sucesso[Ô]
[txt-color=#0000f0]Exit Sub
TrataErro:
If Err.Number = coloca o numero do erro aqui Then
Resume Continua
End If[/txt-color]
neste meu exemplo quando ele encontrar o erro onde informa que o arquivo está aberto ele retorna para onde parou
isto é apenas uma suposição
Blz, entendi
Vou colocar isso no sistema e vamos ver como que ele se comporta
Vou colocar isso no sistema e vamos ver como que ele se comporta
Anexei a imagem do erro que dá, não lembro como que coloca direto a imagem, rsrsrs
Ele não entra no tratamento de erro antes de exibir a mensagem, ele exibe a imagem depois de um tempo que a impressora no caso não responde, tem muitas impressões na fila, no meu exemplo foi dar a mensagem depois que enviei 53 documentos para uma impressora pdf.
Depois que apertei o switch to... ai ele entrou no tratamento de erro, e qdo mandei continuar ele travou, exibindo sempre a mesma mensagem, saindo apenas eu dando um logoff.
Acho que terei que colocar algum delay mesmo, para retardar o envio do documento para a impressora
Ele não entra no tratamento de erro antes de exibir a mensagem, ele exibe a imagem depois de um tempo que a impressora no caso não responde, tem muitas impressões na fila, no meu exemplo foi dar a mensagem depois que enviei 53 documentos para uma impressora pdf.
Depois que apertei o switch to... ai ele entrou no tratamento de erro, e qdo mandei continuar ele travou, exibindo sempre a mesma mensagem, saindo apenas eu dando um logoff.
Acho que terei que colocar algum delay mesmo, para retardar o envio do documento para a impressora
O que eu notei agora é que abri o gerenciador de tarefas e tem muitos winword.exe instanciados
Mesmo eu fechando e apagando o componente, o windows não esta fazendo isso
ObjWord.Documents.Close
ObjWord.Visible = False
Set ObjWord = Nothing
Como posso apagar essas instâncias do word ?
Acho que o meu problema esta nessas instâncias
Mesmo eu fechando e apagando o componente, o windows não esta fazendo isso
ObjWord.Documents.Close
ObjWord.Visible = False
Set ObjWord = Nothing
Como posso apagar essas instâncias do word ?
Acho que o meu problema esta nessas instâncias
vc fez assim
ObjWord.Close
Set ObjWord = Nothing
ou se der erro é o contrario
Set ObjWord = Nothing
ObjWord.Close
ObjWord.Close
Set ObjWord = Nothing
ou se der erro é o contrario
Set ObjWord = Nothing
ObjWord.Close
Marcelo obrigado pelo retorno
Eu ja tinha tentando o objword.close, más ele não aparecia na lista de comando, e agora ao tentar colocar mesmo assim, deu a mensagem
Compile Error:
Method or data member notfound
Eu ja tinha tentando o objword.close, más ele não aparecia na lista de comando, e agora ao tentar colocar mesmo assim, deu a mensagem
Compile Error:
Method or data member notfound
Tópico encerrado , respostas não são mais permitidas