PROBLEMA AO IMPRIMIR USANDO O WORD

ALVAROVB2009 05/11/2013 09:36:09
#430737
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
MARCELO.TREZE 05/11/2013 11:11:08
#430744
tem como voce postar o trecho do seu código de como você faz a impressao.

ALVAROVB2009 05/11/2013 11:27:16
#430745
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[Ô]
MARCELO.TREZE 05/11/2013 11:33:50
#430746
o problema que voce está encontrando é quando tenta imprimir varios registros diferentes? ou seja abre e fecha o word a cada registro é isso mesmo?
ALVAROVB2009 05/11/2013 11:41:36
#430747
Sim é isso mesmo, chega um momento que ele tenta abrir o doc sem ter fechado o anterior
MARCELO.TREZE 05/11/2013 13:14:03
#430754
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
ALVAROVB2009 05/11/2013 13:36:46
#430759
Blz, entendi

Vou colocar isso no sistema e vamos ver como que ele se comporta
ALVAROVB2009 07/11/2013 10:28:12
#430835
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
ALVAROVB2009 07/11/2013 17:15:51
#430863
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
MARCELO.TREZE 07/11/2013 20:57:38
#430872
vc fez assim

ObjWord.Close
Set ObjWord = Nothing

ou se der erro é o contrario


Set ObjWord = Nothing
ObjWord.Close
ALVAROVB2009 08/11/2013 09:03:45
#430882
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
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas