Usuário com melhor resposta
Problema em preencher um documento word

Pergunta
-
Pessoal, estou fazendo um programinha para uso proprio que pega informações de um form e preenche um documento word de template.
Até que consegui progredir um pouco pesquisando pela internet, mas estou com um problema, o meu código só preenche o documento na primeira ocorrencia, se eu tiver várias variaveis @nome por exemplo, ele só preenche na primeira vez que ela aparece...
Alguém tem alguma dica de como fazer isso recursivamente?
Private Sub subDados(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
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click objWord = New Microsoft.Office.Interop.Word.Application objDoc = objWord.Documents.Open("c:\temp\PRO_PS.doc") Call subDados("@CLIENTENOME", txtCLIENTENOME.Text) Call subDados("@CONTATONOME", txtCONTATONOME.Text) Call subDados("@CONTATOEMAIL", txtCONTATOEMAIL.Text) Call subDados("@CONTATOTEL", txtCONTATOTEL.Text) objWord.ActiveDocument.SaveAs2("c:\temp\PRO_PS2.doc") objWord.Quit() MsgBox("Arquivo gerado com sucesso!") End If objWord = Nothing End Sub
Basicamente é isso... qualquer ajuda é bem vinda!!
Respostas
-
Aqui fiz de um outro jeito aqui e acho que deu certo... parece que tem um método pra isso... o wdReplaceAll
Private Sub subDados(header As String, data As String) With objWord.Selection.Find .ClearFormatting() .Text = header .Replacement.ClearFormatting() .Replacement.Text = data .Execute(Replace:=Word.WdReplace.wdReplaceAll) End With End Sub
- Marcado como Resposta Leonardo Mundim quarta-feira, 14 de janeiro de 2015 15:42
Todas as Respostas
-
Tente fazer como abaixo, pois esta limpando o clipboard quando o mesmo contem dados e sempre vai vazio o paste:
Private Sub subDados(header As String, data As String) With objWord.Selection.Find .ClearFormatting() .Text = header .Execute() .Forward = True End With Clipboard.SetText(data) objWord.Selection.Paste() Clipboard.Clear() End Sub
-
-
-
Coloque isso ai e testa:
Private Sub subDados(header As String, data As String) With objWord.Selection.Find .ClearFormatting() .Text = header .Execute() .Forward = True End With Clipboard.Clear() Clipboard.SetText(data+"\n") objWord.Selection.Paste() Clipboard.Clear() End Sub
Ao meu ver a cada chamada que você faz de SubDados() ele sobrepõe o valor anterior ficando sempre o ultimo valor inserido
- Editado Mr. GMSOFT terça-feira, 13 de janeiro de 2015 18:43
-
-
-
Antes de mais nada, obrigado por me estar ajudando.
Mas não deu certo não... foi o mesmo efeito. Eu ainda acho q ele não esta sobrepondo e sim que ele não esta varrendo todo o documento.
e não entendi o pq do "\n" seria pra dar um enter? pq no vb acho q não rola assim
-
Eu refiz seu projeto aqui e entendi de fato o problema, no caso se você precisar acrescentar informações no arquivo pressionando uma segunda vez ocorre o problema no objDoc não é isso?
Veja essa Thread
- Editado Mr. GMSOFT quarta-feira, 14 de janeiro de 2015 13:08
-
é mais ou menos por ai...
imagina que meu arquivo do Word PRO_PS.doc é desta meneira:
@CLIENTENOME. At.: @CONTATONOME E-mail: @CONTATOEMAIL Tel.: @CONTATOTEL @CLIENTENOME. At.: @CONTATONOME E-mail: @CONTATOEMAIL Tel.: @CONTATOTEL @CLIENTENOME. At.: @CONTATONOME E-mail: @CONTATOEMAIL Tel.: @CONTATOTEL
Ai com o programa ele ta trocando somente a primeira ocorrência, ficando assim:
empresa. At.: contato E-mail: email Tel.: (11) 1111-1111 @CLIENTENOME. At.: @CONTATONOME E-mail: @CONTATOEMAIL Tel.: @CONTATOTEL @CLIENTENOME. At.: @CONTATONOME E-mail: @CONTATOEMAIL Tel.: @CONTATOTEL
Se eu clicar no botão novamente ai vai dar erro pq o arquivo continua aberto... eu queria é clicar apenas uma vez e ele varresse o documento todo... não sei se falta um do while ate o fim do doc etc
-
-
Aqui fiz de um outro jeito aqui e acho que deu certo... parece que tem um método pra isso... o wdReplaceAll
Private Sub subDados(header As String, data As String) With objWord.Selection.Find .ClearFormatting() .Text = header .Replacement.ClearFormatting() .Replacement.Text = data .Execute(Replace:=Word.WdReplace.wdReplaceAll) End With End Sub
- Marcado como Resposta Leonardo Mundim quarta-feira, 14 de janeiro de 2015 15:42