DUVIDA - PREENCHER TABELA NO WORD
Galera bom dia.
Tenho um doc no word q preciso preencher com os dados vindo do vb6, até ai blz, preencho sem problema algum.
O problema começa qdo tenho que preencher uma tabela, eu monto uma string já com o comando de pular a linha inserir chr(13), quando insiro isso fora da tabela, ele preenche corretamente, porém qdo mando para a tabela, não é respeitado o comando do enter, e não é acrescentado a linha a tabela
ex: 30/11/2009םם30/11/2009ם12/02/201ם16/03/2010ם13/04/2010ם
Porém se eu criar a tabela e ja deixar as linhas reservadas, ex tabela com 10 linhas, ao inserir o comando acima, ele respeita o enter.
Teria como fazer a tabela respeitar o enter e acrescentar a linha automaticamente, pois é um documento judicial e não quero que tenha o espaço de 10 linhas reservadas sendo que esta utilizando apenas uma, por exemplo.
E como isso será enviado para várias empresas, como uma mala direta, não será visualizado pelo usuário, será impresso direto, pois ficaria inviável o usuário ter que modificar várias cartas, tendo que tirar que excluir as linhas não utilizadas na tabela de cada documento, motivo o qual queria que fosse automática a inserção das linhas
Desde já agradeço a todos
Tenho um doc no word q preciso preencher com os dados vindo do vb6, até ai blz, preencho sem problema algum.
O problema começa qdo tenho que preencher uma tabela, eu monto uma string já com o comando de pular a linha inserir chr(13), quando insiro isso fora da tabela, ele preenche corretamente, porém qdo mando para a tabela, não é respeitado o comando do enter, e não é acrescentado a linha a tabela
ex: 30/11/2009םם30/11/2009ם12/02/201ם16/03/2010ם13/04/2010ם
Porém se eu criar a tabela e ja deixar as linhas reservadas, ex tabela com 10 linhas, ao inserir o comando acima, ele respeita o enter.
Teria como fazer a tabela respeitar o enter e acrescentar a linha automaticamente, pois é um documento judicial e não quero que tenha o espaço de 10 linhas reservadas sendo que esta utilizando apenas uma, por exemplo.
E como isso será enviado para várias empresas, como uma mala direta, não será visualizado pelo usuário, será impresso direto, pois ficaria inviável o usuário ter que modificar várias cartas, tendo que tirar que excluir as linhas não utilizadas na tabela de cada documento, motivo o qual queria que fosse automática a inserção das linhas
Desde já agradeço a todos
Alguém ....
posta o código colega
Marcelo obrigado pelo retorno
Esse é o mesmo código q vc me ajudou a outra vez, com a incompatibilidade de versão
Private Sub PreencheDocumento()
Call Substitui_Var([Ô]@Data[Ô], Format(Date, [Ô]Long Date[Ô]), ObjWord)
Call Substitui_Var([Ô]@Empresa[Ô], Empresa, ObjWord)
Call Substitui_Var([Ô]@Emissao[Ô], Emissao, ObjWord)
Call Substitui_Var([Ô]@Venc[Ô], Vencimento, ObjWord)
Call Substitui_Var([Ô]@Valor[Ô], Valor, ObjWord)
Call Substitui_Var([Ô]@NossoNumero[Ô], nossoNumero, ObjWord)
Call Substitui_Var([Ô]@Compet[Ô], Competencia, ObjWord)
Call Substitui_Var([Ô]@Boleto[Ô], Boleto, ObjWord)
ObjWord.DisplayAlerts = wdAlertsNone
ObjWord.ActiveDocument.SaveAs (App.Path + [Ô]\[Ô] & RTrim(Empresa) & [Ô].doc[Ô])
ObjWord.PrintOut
ObjWord.Documents.Close
Kill App.Path + [Ô]\[Ô] & RTrim(Empresa) & [Ô].doc[Ô]
Empresa = [Ô][Ô]
Emissao = [Ô][Ô]
Vencimento = [Ô][Ô]
Valor = [Ô][Ô]
nossoNumero = [Ô][Ô]
Competencia = [Ô][Ô]
Boleto = [Ô][Ô]
End Sub
Private Sub Substitui_Var(Header As String, data As String, OWord As Object)
On Error Resume Next
With OWord.Selection.Find
.ClearFormatting
.Text = Header
.Execute Forward:=True
End With
Clipboard.Clear
Clipboard.SetText (data)
OWord.Selection.Paste
Clipboard.Clear
End Sub
Botão imprimir
ObjWord.Visible = True [ô]torna o word visÃvel
[ô] nome do relatorio pré montado
ObjWord.Documents.Open CaminhoDocumento
Do While Not Rs.EOF
[ô]nova empresa e demonstrativos da empresa anterior
If Empresa <> Rs!nomeempr And Trim(Emissao) <> [Ô][Ô] Then
PreencheDocumento
ObjWord.Documents.Open CaminhoDocumento
Exit Do
ElseIf Empresa = Rs!nomeempr Or Trim(Empresa) = [Ô][Ô] Then
Empresa = Rs!nomeempr
Emissao = Emissao & Format(Rs!dtEmissao, [Ô]DD/MM/YYYY[Ô]) & Chr(13)
nossoNumero = nossoNumero & Rs!nossoNumero & Chr(13)
If OptDemaisGuias.Value = True Then
Vencimento = Vencimento & Format(Rs!DtVencimento, [Ô]DD/MM/YYYY[Ô]) & Chr(13)
Valor = Valor & Format(Rs!Valor, [Ô]###,###,##0.00[Ô]) & Chr(13)
Competencia = Competencia & Rs!Competencia & Chr(13)
Boleto = Boleto & IIf(Rs!Associativo, [Ô]Associativo[Ô], IIf(Rs!Social, [Ô]Social[Ô], [Ô]Assistêncial[Ô])) & Chr(13)
Else
Vencimento = Vencimento & Format(Rs!Vencimento, [Ô]DD/MM/YYYY[Ô]) & Chr(13)
Valor = Valor & Format(Rs!vlContribuicao, [Ô]###,###,##0.00[Ô]) & Chr(13)
Competencia = Competencia & Rs!Exercicio & Chr(13)
Boleto = Boleto & [Ô]Sindical[Ô] & Chr(13)
End If
Rs.MoveNext
End If
Loop
Esse é o mesmo código q vc me ajudou a outra vez, com a incompatibilidade de versão
Private Sub PreencheDocumento()
Call Substitui_Var([Ô]@Data[Ô], Format(Date, [Ô]Long Date[Ô]), ObjWord)
Call Substitui_Var([Ô]@Empresa[Ô], Empresa, ObjWord)
Call Substitui_Var([Ô]@Emissao[Ô], Emissao, ObjWord)
Call Substitui_Var([Ô]@Venc[Ô], Vencimento, ObjWord)
Call Substitui_Var([Ô]@Valor[Ô], Valor, ObjWord)
Call Substitui_Var([Ô]@NossoNumero[Ô], nossoNumero, ObjWord)
Call Substitui_Var([Ô]@Compet[Ô], Competencia, ObjWord)
Call Substitui_Var([Ô]@Boleto[Ô], Boleto, ObjWord)
ObjWord.DisplayAlerts = wdAlertsNone
ObjWord.ActiveDocument.SaveAs (App.Path + [Ô]\[Ô] & RTrim(Empresa) & [Ô].doc[Ô])
ObjWord.PrintOut
ObjWord.Documents.Close
Kill App.Path + [Ô]\[Ô] & RTrim(Empresa) & [Ô].doc[Ô]
Empresa = [Ô][Ô]
Emissao = [Ô][Ô]
Vencimento = [Ô][Ô]
Valor = [Ô][Ô]
nossoNumero = [Ô][Ô]
Competencia = [Ô][Ô]
Boleto = [Ô][Ô]
End Sub
Private Sub Substitui_Var(Header As String, data As String, OWord As Object)
On Error Resume Next
With OWord.Selection.Find
.ClearFormatting
.Text = Header
.Execute Forward:=True
End With
Clipboard.Clear
Clipboard.SetText (data)
OWord.Selection.Paste
Clipboard.Clear
End Sub
Botão imprimir
ObjWord.Visible = True [ô]torna o word visÃvel
[ô] nome do relatorio pré montado
ObjWord.Documents.Open CaminhoDocumento
Do While Not Rs.EOF
[ô]nova empresa e demonstrativos da empresa anterior
If Empresa <> Rs!nomeempr And Trim(Emissao) <> [Ô][Ô] Then
PreencheDocumento
ObjWord.Documents.Open CaminhoDocumento
Exit Do
ElseIf Empresa = Rs!nomeempr Or Trim(Empresa) = [Ô][Ô] Then
Empresa = Rs!nomeempr
Emissao = Emissao & Format(Rs!dtEmissao, [Ô]DD/MM/YYYY[Ô]) & Chr(13)
nossoNumero = nossoNumero & Rs!nossoNumero & Chr(13)
If OptDemaisGuias.Value = True Then
Vencimento = Vencimento & Format(Rs!DtVencimento, [Ô]DD/MM/YYYY[Ô]) & Chr(13)
Valor = Valor & Format(Rs!Valor, [Ô]###,###,##0.00[Ô]) & Chr(13)
Competencia = Competencia & Rs!Competencia & Chr(13)
Boleto = Boleto & IIf(Rs!Associativo, [Ô]Associativo[Ô], IIf(Rs!Social, [Ô]Social[Ô], [Ô]Assistêncial[Ô])) & Chr(13)
Else
Vencimento = Vencimento & Format(Rs!Vencimento, [Ô]DD/MM/YYYY[Ô]) & Chr(13)
Valor = Valor & Format(Rs!vlContribuicao, [Ô]###,###,##0.00[Ô]) & Chr(13)
Competencia = Competencia & Rs!Exercicio & Chr(13)
Boleto = Boleto & [Ô]Sindical[Ô] & Chr(13)
End If
Rs.MoveNext
End If
Loop
chr(13) não 'codigo para simular a tecla enter, ele apenas indica proxima linha, ou seja ficara um dado abaixo do outro sem mudar de tabela, mas vai ai uma sugestão
abra um documento do word vá até macro e clique em gravar nova macro.
agora crie a tabela da maneira que deseja incluindo alguns dados e dando o enter para se criar nova linha.
depois vá em macros novamente e pare a gravação, clique em exibir macros, selecione a macro que gravou e clique em editar.
lá está todo código que necessita.
abra um documento do word vá até macro e clique em gravar nova macro.
agora crie a tabela da maneira que deseja incluindo alguns dados e dando o enter para se criar nova linha.
depois vá em macros novamente e pare a gravação, clique em exibir macros, selecione a macro que gravou e clique em editar.
lá está todo código que necessita.
Marcelo obrigado pela dica, más apenas para completar.
A intensão é mesmo que ele fique com os dados um embaixo do outro, pois montei uma tabela no word e cada coluna esta representada pelo @nomedocampo, nisso o vb localiza e substitui pelos dados que estou enviado, não mudo de coluna ou tabela, eles já estão devidamente posicionado.
Por isso q coloquei o chr(13), para ficar um dado embaixo do outro mesmo, más como comentei ele não cria a linha, fica td em uma linha só.
Más vou fazer isso q vc falou, e vou ver qual é o comando para add uma linha, qm sabe consigo ajustar
A intensão é mesmo que ele fique com os dados um embaixo do outro, pois montei uma tabela no word e cada coluna esta representada pelo @nomedocampo, nisso o vb localiza e substitui pelos dados que estou enviado, não mudo de coluna ou tabela, eles já estão devidamente posicionado.
Por isso q coloquei o chr(13), para ficar um dado embaixo do outro mesmo, más como comentei ele não cria a linha, fica td em uma linha só.
Más vou fazer isso q vc falou, e vou ver qual é o comando para add uma linha, qm sabe consigo ajustar
tente as seguintes alterações
no lugar de chr(13)
chr(10) + chr(13)
ou
VbCrLf
ou VbEnter
no lugar de chr(13)
chr(10) + chr(13)
ou
VbCrLf
ou VbEnter
Vlw Marcelo
Eu troquei o chr(13) apenas pelo chr(10), ele criou a linha na coluna q eu estava querendo
Eu troquei o chr(13) apenas pelo chr(10), ele criou a linha na coluna q eu estava querendo
Tópico encerrado , respostas não são mais permitidas