Ir ao conteúdo
  • Cadastre-se

excel vba - preenchimento de documentos word


Posts recomendados

Bom dia.

 

Estou a desenvolver um pequeno programa em excel, que me permite preencher documentos word a partir do preenchimento de um formulário em excel.

 

O código do botão que permite essa funcionalidade é o seguinte:

 

Private Sub exportdoc_Click()


Dim WORD As WORD.Application
Dim DOC As WORD.Document

 

Set WORD = CreateObject(WORD.Application)
WORD.Visible = True

 

Set DOC = WORD.Documents.Open("C:\Users\miguel.martins\Desktop\PJM\PJM\Novos Modelos\Meus\Correspondência\Geral - Modelos\010 Ofício - Modelo1.doc")

 

With DOC

.Application.Selection.Find.Text = "#nr"
.Application.Selection.Find.Execute
.Application.Selection.Range = Doc_Number_box

 

If Dir("C:\Users\miguel.martins\Desktop\PJM\PJM\Novos Modelos\Meus\Correspondência\Geral - Modelos\010 Ofício - Modelo1.doc") Then
    Kill "C:\Users\miguel.martins\Desktop\PJM\PJM\Novos Modelos\Meus\Correspondência\Geral - Modelos\010 Ofício - Modelo1.doc"
    
End If

 

.SaveAs ("C:\Users\miguel.martins\Desktop\PJM\PJM\Novos Modelos\Meus\Correspondência\Geral - Modelos\010 Ofício - Modelo1.doc")
´.Close
End With

 

´WORD.Quit

Set DOC = Nothing
Set WORD = Nothing


End Sub

 

Contudo, ao correr a macro, obtenho o seguinte erro na linha de código a amarelo:

 

Object variable or With block variable not set (Error 91)

 

Alguém me consegue explicar porquê, e como poderei ultrapassar este problema?

 

Cumprimentos e obrigado

Link para o comentário
Compartilhar em outros sites

Faltaram as aspas:

Set WORD = CreateObject("WORD.Application")

 

----

Obs.:

  • se puder, evite usar nomes reservados para nomes de variáveis. No seu caso, declarar uma variável com o nome "WORD" pode dar uma baita dor de cabeça, pois Word já é um Objeto referenciado, e o Intellisense pode não trazer os parâmetros adequados durante a contrução do código. Poderia, por exemplo, nomear sua variável como appWord...
  • no caso acima, já que você já referenciou a biblioteca do Word, ao invés de usar Late Binding usando CreateObject, poderia usar Early Binding ao instanciar sua variável WORD, usando Set WORD = New Word.Application. Existem diversas vantagens, tanto durante a construção do código quanto em relação à performance.
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Edson Luiz Branco , valeu! Resultou!

 

Agora tenho outro problema.

 

Quando executo a macro, documento é editado, salvado e fechado automaticamente. No final do processo, o word fica aberto, mas o documento em questão é encerrado. O problema é que se eu fechar completamente o word e voltar a executar a mesma macro dá-me o "Run-time error `462´", com o debuger a identificar um erro na seguinte linha:

 

Set DOC = WORD.Documents.Open("C:\Users\miguel.martins\Desktop\PJM\PJM\Novos Modelos\Meus\Correspondência\Geral - Modelos\010 Ofício - Modelo1.doc")

 

Muito obrigado pela ajuda!

 

Cumprimentos

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...