Inquiridor
Salvar Mala Direta Em Arquivos Separados

Pergunta
-
Boa tarde galera!
É o seguinte, estou com um problemão, mas não estou conseguindo resolver, pois não tenho conhecimento avançado em VBA, peço por gentileza uma ajuda de vocês.
Tenho um modelo de carta no Word que captura alguns campos de uma planilha que tenho no excel, ele captura o campo E-mail e Senha.
Até consigo gerar a mala direta, mas quando tenho muitos registros, ele gera em um arquivo só todos os registros e preciso que gere em arquivos .doc separados.
Alguém saberia me dizer como fazer isso, mas peço que detalhem o máximo para mim pois sou totalmente novato nesse assunto.
Ah detalhe em minhas pesquisas até encontrei algo parecido, mas não consegui fazer funcionar, pois não sei se estou fazendo a coisa certa, o codigo que encontrei esta abaixo em vermelho.
Obrigado Galera!
CODE
Sub SalvaComo Arqs
' Converte todas as seções para subdocumentos
TudoParaSubDocs ActiveDocument
' Salva cada subdocumento como um arquivo separado
SalvaTodosSubDocs ActiveDocument
End Sub
CODE
Sub TudoParaSubDocs(ByRef doc As Word.Document)
Dim ctaSec As Long
Dim NrSecs As Long
NrSecs = doc.Sections.Count
' Inicial pelo final porque a criação de
' Subdocs iinsere seções adicionais
For ctaSec = NrSecs - 1 To 1 Step -1
doc.Subdocuments.AddFromRange doc.Sections(ctaSec).Range
Next ctaSec
End Sub
CODE
Sub SalvaTodosSubDocs(ByRef doc As Word.Document)
Dim subdoc As Word.Subdocument
Dim NovoDoc As Word.Document
Dim ContaDocs As Long
ContaDocs = 1
' Deve estar em Exibir Mestre para trabalhar com
' Subdocs como arquivos separados
doc.ActiveWindow.View = wdMasterView
For Each subdoc In doc.Subdocuments
Set NovoDoc = subdoc.Open
' Remove as quebras de seção Próxima Página
' Geradas pela fusão dos arquivos
RemoveQuebrasSec NovoDoc
With NovoDoc
.SaveAs FileName:="Arquivo" & CStr(ContaDocs)
.Close
End With
ContaDocs = ContaDocs + 1
Next subdoc
End Sub
CODE
Sub RemoveQuebrasSec(doc As Word.Document)
With doc.Range.Find
.ClearFormatting
.Text = "^b"
With .Replacement
.ClearFormatting
.Text = ""
End With
.Execute Replace:=wdReplaceAll
End With
End SubVlw!
terça-feira, 1 de fevereiro de 2011 15:37
Todas as Respostas
-
Ae galera me ajudem nessa solução por favor. Vlw!terça-feira, 1 de fevereiro de 2011 21:43
-
Olá,
antes de pensar no código VBA, gostaria de saber se o Mala Direta (Mail Merge) feito na tela atende ao que você precisa.
Ao executar o Mail Merge, o Word faz o que você descreveu, então porque não o usou na macro?
Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br - Access FAQ: www.accessfaq.com.brterça-feira, 1 de fevereiro de 2011 23:39Moderador -
Opa blz Luiz, valew pelo retorno!
Então cara, eu encontrei esse código e pelo que descrevia a pessoa era o que eu pretendia fazer, mas sinceramente eu não conheço nada de VBA, se puder me auxiliar e lhe agradeço enormemente.
Se você puder detalhar passo a passo como fazer, como inserir esse código, pois não sei por onde iniciar.
Meu cenario é o seguinte:
Tenho uma carta no Word que contém duas variaveis importantes: E-mail e Senha, ela carrega essas informações de uma planilha no Excel, no Excel tem duas colunas E-mail e Senha. Quando peço para gerar a mala direta, ela gera em um arquivo único do WORD todas as cartas, quero que ele gere um arquivo .doc para cada conjunto de E-mail e Senha.
Será que consegui explicar direito?
Me add anunes22@hotmail.com.
Abraço Luiz!
quarta-feira, 2 de fevereiro de 2011 16:01 -
Up, alguém pode me ajudar?terça-feira, 8 de fevereiro de 2011 15:31
-
Verifique o primeiro modelo deste link: http://www.ambienteoffice.com.br/word/criar_mala_direta_programaticamente_usando_o_excel/
Felipe Costa Gualberto - http://www.ambienteoffice.com.brsegunda-feira, 21 de fevereiro de 2011 17:13Moderador -
Antes de mais nada, cole o código no seu modelo de mala direta. Neste código há um erro na primeira linha Sub SalvaComo Arqs. Apague o Arqs.
Assim que gerar o documento com todas as páginas, execute a macro SalvarComo.
Qualquer coisa entre em contato via MSN: osmarjjr@hotmail.com.
Eu traduzi o artig. :)
quarta-feira, 23 de fevereiro de 2011 16:56 -
Bom dia a todos!
Não sou programador e nem trabalho com isso, mas como também tive essa necessidade do Mail Merge aqui na empresa e gosto de otimizações, cheguei ao seguinte resultado logo abaixo.
Nesse código implementei como Save as PDF, é só trocar alguns parametros que é possível trocar o formato final e outras coisas.
Sub SalvarComoPDF()
Dim a As Integer
Dim registro As Integer
'Set Mail Merge in the first register
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord
'Mail Merge Count
a = ActiveDocument.MailMerge.DataSource.RecordCount
'For to exportToPDF all registers
For registro = 1 To a
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
"C:\Users\Usuário\Desktop\teste mala direta\" & registro & " - Solicitação de Cadastros.pdf" _
, ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord
Next registro
End
End Sub
- Sugerido como Resposta edu.ribeiro quinta-feira, 5 de abril de 2012 12:35
- Editado edu.ribeiro quinta-feira, 5 de abril de 2012 12:35
quinta-feira, 5 de abril de 2012 12:33 -
E aí cara? Quanto aquele problema da Mala Direta? Conseguiu concluir? Estou com o mesmo problemão.
Tentei usar o codigo acima, mas deu uma mensagem que nao entendi.
Acho que usei de forma errada o codigo. Se puder me ajudar te agradeceria.
PHFMatos
quinta-feira, 3 de maio de 2012 12:48 -
Caro Osmar,
quanto ao problema da mala-direta em arquivos separados, tem algum particular na execucao a macro?
Exemplo:
1 -como sao varias macros, devo separa-las ou posso colocar todas juntas.
2 - na propria macro tem uma instrucao "Deve estar em Exibir Mestre para trabalhar com Subdocs como arquivos separados" e isso eu nao entendi.
Se puder me dar uma luz, agradeceria,
PHFMatos
quinta-feira, 3 de maio de 2012 12:53 -
Prezado amigo,
Peguei o código do edu.ribeiro e fiz uma pequena alteração para que quando salvar o arquivo o mesmo seja salvo com o valor de alguma coluna da minha mala direta, assim fica mais fácil de identificar o arquivo. Para usá-lo, basta criar uma macro no arquivo word da mala direta, e não no arquivo resultante da mala direta, e em seguida executar a macro. Testei no Office 2010 e funcionou sem problemas.
Sub SalvarComoPDF()
Dim qtde As Integer
Dim nomeArquivo As String
Dim registro As Integer
'Set Mail Merge in the first register
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord
'Mail Merge Count
qtde = ActiveDocument.MailMerge.DataSource.RecordCount
'arquivo = ActiveDocument.MailMerge.DataSource.FieldNames(1).Name
'For to exportToPDF all registers
For registro = 1 To qtde
nomeArquivo = ActiveDocument.MailMerge.DataSource.DataFields("NomeDaColunaDaMalaDireta").Value
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
"H:\Temp\MalaDireta\pdf\" & nomeArquivo & ".pdf" _
, ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord
Next registro
End
End Sub
- Sugerido como Resposta Hezequias VasconcelosModerator quarta-feira, 5 de dezembro de 2012 11:11
terça-feira, 4 de dezembro de 2012 23:46 -
- Prezado amigo,
- Peguei o código do edu.ribeiro e fiz uma pequena alteração para que quando salvar o arquivo o mesmo seja salvo com o valor de alguma coluna da minha mala direta, assim fica mais fácil de identificar o arquivo. Para usá-lo, basta criar uma macro no arquivo word da mala direta, e não no arquivo resultante da mala direta, e em seguida executar a macro. Testei no Office 2010 e funcionou sem problemas.
- Sub SalvarComoPDF()
Dim qtde As Integer
Dim nomeArquivo As String
Dim registro As Integer
'Set Mail Merge in the first register
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord
'Mail Merge Count
qtde = ActiveDocument.MailMerge.DataSource.RecordCount
'arquivo = ActiveDocument.MailMerge.DataSource.FieldNames(1).Name
'For to exportToPDF all registers
For registro = 1 To qtde
nomeArquivo = ActiveDocument.MailMerge.DataSource.DataFields("NomeDaColunaDaMalaDireta").Value
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
"H:\Temp\MalaDireta\pdf\" & nomeArquivo & ".pdf" _
, ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord
Next registro
End
End Sub
Não entendi, colega não entendo nada de nada, mas preciso muito fazer isso, você pode me ensinar passo a passo? meu email é elisson@hotmail.com.br
Preciso Salvar separadamente cada arquivo com um nome Específico.
terça-feira, 26 de novembro de 2013 14:16 -
Olá,
O tópico ao qual você respondeu é muito antigo. Sugiro que crie um novo tópico com sua pergunta, referenciando este link. Com isso, você aumentará as chances de obter uma resposta e ajudará a manter o fórum organizado.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
terça-feira, 26 de novembro de 2013 23:40Moderador -
Você conseguiu resolver o problema?
Como você fez?
quinta-feira, 12 de março de 2015 18:54 -
Como utilizar esse código?quinta-feira, 12 de março de 2015 18:55