LEVAR VALORES PARA UMA MACRO DO WORD
Olá pessoal
Tenho sistema que chama um documento Word levando junto vários campos de mesclagem para gerar um contrato, até aà tudo bem
só que dentro do Word quero rodar uma Macro que pegue um dos campos da mesclagem (campos de mesclagem: Nome, Endereço, Telefone, etc).
Por exemplo na minha macro tem um linha:
Campo de mesclagem Nome = [Ô]Júlio Cesar Moraes[Ô]
...
[txt-color=#0000f0]ActiveDocument.SaveAs FileName:=[/txt-color][txt-color=#e80000]?????[/txt-color]
...
gostaria que o [txt-color=#e80000]?????[/txt-color] fosse colocado o campo de mesclagem [ô]Nome[ô]
em tempo de execução ficaria
[txt-color=#0000f0]ActiveDocument.SaveAs FileName:=[/txt-color][txt-color=#e80000][ô]Júlio Cesar Moraes[ô][/txt-color]
Preciso fazer isso dentro do Word e não em linhas de códigos dentro vb net.
Tenho sistema que chama um documento Word levando junto vários campos de mesclagem para gerar um contrato, até aà tudo bem
só que dentro do Word quero rodar uma Macro que pegue um dos campos da mesclagem (campos de mesclagem: Nome, Endereço, Telefone, etc).
Por exemplo na minha macro tem um linha:
Campo de mesclagem Nome = [Ô]Júlio Cesar Moraes[Ô]
...
[txt-color=#0000f0]ActiveDocument.SaveAs FileName:=[/txt-color][txt-color=#e80000]?????[/txt-color]
...
gostaria que o [txt-color=#e80000]?????[/txt-color] fosse colocado o campo de mesclagem [ô]Nome[ô]
em tempo de execução ficaria
[txt-color=#0000f0]ActiveDocument.SaveAs FileName:=[/txt-color][txt-color=#e80000][ô]Júlio Cesar Moraes[ô][/txt-color]
Preciso fazer isso dentro do Word e não em linhas de códigos dentro vb net.
Não sei se entendi bem.
Se você quer apenas pegar parte do seu texto no Word e jogar para uma variável via VBA, segue exemplo:
Private Sub Document_Open()
MsgBox ActiveDocument.Range(0, 4).Text
End Sub
Nesse exemplo, toda vez que seu documento abrir (evento Open) ele vai aparecer uma mensagem com os 4 primeiros caracteres do documento. Para selecionar o que quer, basta colocar o Ãndice no lugar do 0 e do 4 (Count).
A forma como você vai usar, vai depender exclusivamente do formato do seu documento. Talvez você tenha que usar um Instr pra ajudar a localizar o texto.
Abraços!
Se você quer apenas pegar parte do seu texto no Word e jogar para uma variável via VBA, segue exemplo:
Private Sub Document_Open()
MsgBox ActiveDocument.Range(0, 4).Text
End Sub
Nesse exemplo, toda vez que seu documento abrir (evento Open) ele vai aparecer uma mensagem com os 4 primeiros caracteres do documento. Para selecionar o que quer, basta colocar o Ãndice no lugar do 0 e do 4 (Count).
A forma como você vai usar, vai depender exclusivamente do formato do seu documento. Talvez você tenha que usar um Instr pra ajudar a localizar o texto.
Abraços!
é quase isso, só que o documento é uma mala direta e eu queria pegar um dos campos que ele mesclou do VB
Por ex, ele mesclou o Nome, endereço, CEP, Cpf, telefone, etc
E eu queria pegar o Nome e referencia-lo na Macro onde está o ????? abaixo
e colocar na linha ActiveDocument.SaveAs FileName:=?????
Por ex, ele mesclou o Nome, endereço, CEP, Cpf, telefone, etc
E eu queria pegar o Nome e referencia-lo na Macro onde está o ????? abaixo
e colocar na linha ActiveDocument.SaveAs FileName:=?????
Use isso:
activedocument.MailMerge.DataSource.DataFields([Ô]NomeDoCampo[Ô]).Value
Isso deverá retornar o valor.
Abraços!
activedocument.MailMerge.DataSource.DataFields([Ô]NomeDoCampo[Ô]).Value
Isso deverá retornar o valor.
Abraços!
Agora deu certo
Estava fazendo errado, veja a macro
[txt-color=#e80000]Errado:
Sub SalvarAluno()
With ActiveDocument.MailMerge
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
ChangeFileOpenDirectory [Ô]C:\Cesc40\ContratosSalvos[Ô]
ActiveDocument.SaveAs FileName:=ActiveDocument.MailMerge.DataSource.DataFields([Ô]NomeAluno[Ô]).Value
End Sub[/txt-color]
[txt-color=#0000f0]Certo:
Sub SalvarAluno()
Dim Campo As String
Campo = (ActiveDocument.MailMerge.DataSource.DataFields([Ô]NomeAluno[Ô]).Value)
With ActiveDocument.MailMerge
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
ChangeFileOpenDirectory [Ô]C:\Cesc40\ContratosSalvos[Ô]
ActiveDocument.SaveAs FileName:=(Campo)
End Sub[/txt-color]
Esses comandos acima são para fazer a mala direta virar texto Word Normal
Valeu
Estava fazendo errado, veja a macro
[txt-color=#e80000]Errado:
Sub SalvarAluno()
With ActiveDocument.MailMerge
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
ChangeFileOpenDirectory [Ô]C:\Cesc40\ContratosSalvos[Ô]
ActiveDocument.SaveAs FileName:=ActiveDocument.MailMerge.DataSource.DataFields([Ô]NomeAluno[Ô]).Value
End Sub[/txt-color]
[txt-color=#0000f0]Certo:
Sub SalvarAluno()
Dim Campo As String
Campo = (ActiveDocument.MailMerge.DataSource.DataFields([Ô]NomeAluno[Ô]).Value)
With ActiveDocument.MailMerge
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
ChangeFileOpenDirectory [Ô]C:\Cesc40\ContratosSalvos[Ô]
ActiveDocument.SaveAs FileName:=(Campo)
End Sub[/txt-color]
Esses comandos acima são para fazer a mala direta virar texto Word Normal
Valeu
Tópico encerrado , respostas não são mais permitidas