AJUDA PARA MODIFICAR TEXTO WORD COM VB6
Busquei uma rotina pela intenet para modificr um arquivo word com vb6. No texto em word deveria utilizar no local das variáveis @nome_da_variável. A rotina abaixo faria automaticamente a troca pelo contúdo da variável. Está dando erro na linha: With objWord.Selection.Find
O erro é: Run-time error [ô]424[ô]:
Object required
a rotina teste que fiz é:
Private Sub Command1_Click()
Dim temp As String
Set objWord = New Word.Application
[ô] nome do relatorio pré montado
objWord.Documents.Open ([Ô]C:\CONTRATO DE PRESTAÇÃO DE SERVIÇOS TECH.docx[Ô])
[ô] chama rotina para substituicao
Call Substitui_Var([Ô]@contratada[Ô], Text1.Text)
[ô] Salva o documento com um novo nome
txtcontrato = [Ô]C:\CONTRATO DE PRESTAÇÃO DE SERVIÇOS TECH - novo.docx[Ô]
objWord.ActiveDocument.SaveAs (txtcontrato)
[ô]Encerra o word
objWord.Quit
[ô] informa ao usuario que o contrato foi gerado
MsgBox [Ô]Contrato gerado com sucesso! em : [Ô] & txtcontrato, vbInformation, [Ô] Contrato Gerado [Ô]
[ô] libera memoria
Set objWord = Nothing
Exit Sub
trata_erro:
MsgBox [Ô]Ocorreu um erro durante o processamento [Ô] & [Ô] - Erro numero : [Ô] & Err.Number
End Sub
--------------------------------------------------------------------------------------------
Private Sub Substitui_Var(Header As String, Data As String)
With objWord.Selection.Find
.ClearFormatting
.Text = Header
.Execute Forward:=True
End With
Clipboard.Clear
Clipboard.SetText (Data)
objWord.Selection.Paste
Clipboard.Clear
End Sub
Por favor alguém pode me ajudar
O erro é: Run-time error [ô]424[ô]:
Object required
a rotina teste que fiz é:
Private Sub Command1_Click()
Dim temp As String
Set objWord = New Word.Application
[ô] nome do relatorio pré montado
objWord.Documents.Open ([Ô]C:\CONTRATO DE PRESTAÇÃO DE SERVIÇOS TECH.docx[Ô])
[ô] chama rotina para substituicao
Call Substitui_Var([Ô]@contratada[Ô], Text1.Text)
[ô] Salva o documento com um novo nome
txtcontrato = [Ô]C:\CONTRATO DE PRESTAÇÃO DE SERVIÇOS TECH - novo.docx[Ô]
objWord.ActiveDocument.SaveAs (txtcontrato)
[ô]Encerra o word
objWord.Quit
[ô] informa ao usuario que o contrato foi gerado
MsgBox [Ô]Contrato gerado com sucesso! em : [Ô] & txtcontrato, vbInformation, [Ô] Contrato Gerado [Ô]
[ô] libera memoria
Set objWord = Nothing
Exit Sub
trata_erro:
MsgBox [Ô]Ocorreu um erro durante o processamento [Ô] & [Ô] - Erro numero : [Ô] & Err.Number
End Sub
--------------------------------------------------------------------------------------------
Private Sub Substitui_Var(Header As String, Data As String)
With objWord.Selection.Find
.ClearFormatting
.Text = Header
.Execute Forward:=True
End With
Clipboard.Clear
Clipboard.SetText (Data)
objWord.Selection.Paste
Clipboard.Clear
End Sub
Por favor alguém pode me ajudar
Sempre usei assim e nunca tive problemas
OBJ_WORD.Selection.Find.Text = [Ô]@M[Ô]
OBJ_WORD.Selection.Find.Replacement.Text = m_nome
OBJ_WORD.Selection.Find.Forward = True
OBJ_WORD.Selection.Find.Wrap = 1
OBJ_WORD.Selection.Find.Format = True
OBJ_WORD.Selection.Find.MatchCase = False
OBJ_WORD.Selection.Find.MatchWholeWord = False
OBJ_WORD.Selection.Find.MatchWildcards = False
OBJ_WORD.Selection.Find.MatchSoundsLike = False
OBJ_WORD.Selection.Find.MatchAllWordForms = False
OBJ_WORD.Selection.Find.Execute
OBJ_WORD.Selection.Font.Name = retorna_font_atualmente_usado
OBJ_WORD.Selection.Font.Size = Val(retorna_font_tamanho_atualmente_usado)
OBJ_WORD.Selection.Find.Execute Replace:=2
Tenta ai se da certo
OBJ_WORD.Selection.Find.Text = [Ô]@M[Ô]
OBJ_WORD.Selection.Find.Replacement.Text = m_nome
OBJ_WORD.Selection.Find.Forward = True
OBJ_WORD.Selection.Find.Wrap = 1
OBJ_WORD.Selection.Find.Format = True
OBJ_WORD.Selection.Find.MatchCase = False
OBJ_WORD.Selection.Find.MatchWholeWord = False
OBJ_WORD.Selection.Find.MatchWildcards = False
OBJ_WORD.Selection.Find.MatchSoundsLike = False
OBJ_WORD.Selection.Find.MatchAllWordForms = False
OBJ_WORD.Selection.Find.Execute
OBJ_WORD.Selection.Font.Name = retorna_font_atualmente_usado
OBJ_WORD.Selection.Font.Size = Val(retorna_font_tamanho_atualmente_usado)
OBJ_WORD.Selection.Find.Execute Replace:=2
Tenta ai se da certo
bom minha dica que sempre funciona primeiro crie o modelo de seu contrato no word e no word mesmo faça os seguintes procedimentos:
* Crie um arquivo no Word, um modelo de carta, um contrato de aluguel..., o qual vc irá sempre preencher apenas os campos (nome, endereço...);
* Ponha o cursor no local onde deve aparecer o conteúdo a ser preenchido (nome, endereço, telefone...) pelos dados nas textbox do form (selecione a palavra que será alterada), depois vá no menu inserir --> indicador;
* Crie um nome do indicador para cada palavra.
* salve este documento em uma pasta diferente das que você colocará os contratos, ou documentos gerados posteriormente.
agora no VB6 proceda da seguinte maneira
Vá em --> Project --> References e marque a opção Microsoft Word XX.0 Object Library, onde XX é a versão do word instalada no seu PC.
feito isso use o seguinte código para alterações
e é isso ai
* Crie um arquivo no Word, um modelo de carta, um contrato de aluguel..., o qual vc irá sempre preencher apenas os campos (nome, endereço...);
* Ponha o cursor no local onde deve aparecer o conteúdo a ser preenchido (nome, endereço, telefone...) pelos dados nas textbox do form (selecione a palavra que será alterada), depois vá no menu inserir --> indicador;
* Crie um nome do indicador para cada palavra.
* salve este documento em uma pasta diferente das que você colocará os contratos, ou documentos gerados posteriormente.
agora no VB6 proceda da seguinte maneira
Vá em --> Project --> References e marque a opção Microsoft Word XX.0 Object Library, onde XX é a versão do word instalada no seu PC.
feito isso use o seguinte código para alterações
Private Sub Command1_Click()
Dim ArqModelo As String, NovoDocumento As String
ArqModelo = [Ô]caminho do arquivo que criou como modelo[Ô]
NovoDocumento = [Ô]caminho e nome do documento que sera gerado[Ô]
Dim objDoc As Word.Document
Set objWord = New Word.Application
objWord.Visible = True
Set objDoc = objWord.Documents.Open(ArqModelo)
objDoc.Activate
objDoc.Bookmarks([Ô]Data[Ô]).Range.Text = text1.text
objDoc.Bookmarks([Ô]Numero[Ô]).Range.Text = text2.text
objDoc.Bookmarks([Ô]esquema[Ô]).Range.Text = Text3.Text
objWord.ActiveDocument.SaveAs NovoDocumento, wdWordDocument
Set objDoc = Nothing
Set objWord = Nothing
End Sub
e é isso ai
Você já conseguiu resolver esse problema?
Qria saber pq eu uso o mesmo esquema que vc, e não tenho problema
Qria saber pq eu uso o mesmo esquema que vc, e não tenho problema
Faça seu login para responder