MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]MALA DIRETA VBA

    Compartilhe

    lauzinho
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 09/12/2015

    [Resolvido]MALA DIRETA VBA

    Mensagem  lauzinho em Qua 09 Dez 2015, 04:15


    Olá, Estou criando uma mala direta com VBA, a qual vincula um documento word. o problema é que quando clico no botão para gerar a carta (CommandButton1), é gerada sempre a carta do primeiro registro salvo na planilha (Plan2). eu gostaria que fosse gerado a carta com os dados que estão abertos no formulário, independente de qual linha esteja gravado. Poderiam me ajudar? Tem como selecionar os dados do meu formulário aberto para gerar a carta ?Sou novato no VBA. Segue abaixo o código que estou usando:

    Private Sub CommandButton1_Click()

    Dim wd As Object
    Dim wdocSource As Object
    Dim strWorkbookName As String

    On Error Resume Next
    Set wd = GetObject(, "Word.Application")
    If wd Is Nothing Then
    Set wd = CreateObject("Word.Application")
    End If
    On Error GoTo 0

    Set wdocSource = wd.Documents.Open("C:\Users\LAU\Documents\MALA\Doc1")

    strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name

    wdocSource.MailMerge.MainDocumentType = wdFormLetters

    wdocSource.MailMerge.OpenDataSource _
    Name:=strWorkbookName, _
    AddToRecentFiles:=False, _
    Revert:=False, _
    Format:=wdOpenFormatAuto, _
    Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _
    SQLStatement:="SELECT * FROM `Plan2$`"


    With wdocSource.MailMerge
    .Destination = wdSendToNewDocument
    .SuppressBlankLines = True
    With .DataSource
    .FirstRecord = wdDefaultFirstRecord
    .LastRecord = wdDefaultLastRecord
    End With
    .Execute Pause:=False
    End With

    wd.Visible = True
    wdocSource.Close SaveChanges:=False

    Set wdocSource = Nothing
    Set wd = Nothing

    End Sub

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: [Resolvido]MALA DIRETA VBA

    Mensagem  Alexandre Neves em Dom 13 Dez 2015, 15:34

    Boa tarde, e bem-vindo ao fórum
    O que pretende?
    Preencher os dados que tem no formulário?
    Se sim, disponibilize o que já tem feito para se adaptar
    Se não, explique com mais detalhes


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    lauzinho
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 09/12/2015

    MALA DIRETA VBA

    Mensagem  lauzinho em Seg 14 Dez 2015, 21:21

    Alexandre, estou mandando o arquivo em anexo. Ente com usuário: ADMIN e senha: ADMIN, PARA para ter acesso total.
    È o seguinte, no USERFORME1 no campo "Informe o Código para Pesquisa" ao inserirmos um código (ex: 1), o formulário é preenchido automaticamente com os dados do banco de dados da aba "TRABALHO". Pois bem, lá em baixo em "Gerar cartas" tenho a opção  (CHECKLIST). Eu quero que quando clicar neste botão seja gerado um arquivo doc com as informações do formulário em aberto. Eu tinha conseguido mas só abria a carta com os dados da primeira linha salva no banco de dados, mas o PC deu pau e não salvou e quando fui testar novamente está com o erro: Erro em tempo de execução '5174' esse arquivo não pode ser encontrado. o erro está na linha abaixo onde informo o caminho do modelo da carta, o qual já está configurada como mala direta. E também estava.

    Set wdocSource = wd.Documents.Open("C:\Users\LAU\Desktop\esse\teste")

    Obrigado por toda ajuda possível!

    Estou usando o código abaixo:
    Private Sub CommandButton23_Click()

    Dim wd As Object
    Dim wdocSource As Object
    Dim strWorkbookName As String

    On Error Resume Next
    Set wd = GetObject(, "Word.Application")
    If wd Is Nothing Then
    Set wd = CreateObject("Word.Application")
    End If
    On Error GoTo 0

    Set wdocSource = wd.Documents.Open("C:\Users\LAU\Desktop\esse\teste")

    strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name

    wdocSource.MailMerge.MainDocumentType = wdFormLetters

    wdocSource.MailMerge.OpenDataSource _
    Name:=strWorkbookName, _
    AddToRecentFiles:=False, _
    Revert:=False, _
    Format:=wdOpenFormatAuto, _
    Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _
    SQLStatement:="SELECT * FROM `TRABALHO$`"


    With wdocSource.MailMerge
    .Destination = wdSendToNewDocument
    .SuppressBlankLines = True
    With .DataSource
    .FirstRecord = wdDefaultFirstRecord
    .LastRecord = wdDefaultLastRecord
    End With
    .Execute Pause:=False
    End With

    wd.Visible = True
    wdocSource.Close SaveChanges:=False

    Set wdocSource = Nothing
    Set wd = Nothing

    End Sub

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: [Resolvido]MALA DIRETA VBA

    Mensagem  Alexandre Neves em Qui 17 Dez 2015, 21:35

    Boa noite,
    Não veio o arquivo, no entanto, se o problema fôr o registo corrente ainda não estar na tabela, grave-o no início da execução do código
    DoCmd.RunCommand acCmdSave


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    lauzinho
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 09/12/2015

    MALA DIRETA VBA

    Mensagem  lauzinho em Qui 17 Dez 2015, 22:42

    Boa noite,
    Percebi que a mala direta pode gerar algumas instabilidades e diante disso, resolvo adotar um outro método para gerar o documento em word. Segue abaixo o código que estou usando. As palavras em negrito foram inseridas na minha base do word no local que devo substituir essa palavra pela que está no formulário VBA. usei (#) para indicar que esta palavra é diferenciada no texto. Bom para quem estava com o mesmo problema que eu, vejam esse vídeo: [Você precisa estar registrado e conectado para ver este link.]  no youtobe  do Renam Fernando Ruthes que vão entender melhor


    Private Sub CommandButton23_Click()

    Dim WORD As WORD.Application
       Dim DOC As WORD.Document
       
       Set WORD = CreateObject("Word.Application")
       WORD.Visible = True
       
       Set DOC = WORD.Documents.Open("C:\Users\Desktop\teste.docx")
       
       With DOC
           '*Dados locador

           .Application.Selection.Find.Text = "#COD"
           .Application.Selection.Find.Execute
           .Application.Selection.Range = UCase(txt_codigo)

         
           .Application.Selection.Find.Text = "#CPF"
           .Application.Selection.Find.Execute
           .Application.Selection.Range = txt_cpf
                 
           .Application.Selection.Find.Text = "#CERTIFIC"
           .Application.Selection.Find.Execute
           .Application.Selection.Range = certificado
           
           '*Dados locatário
           .Application.Selection.Find.Text = "#PARTICIPANTE"
           .Application.Selection.Find.Execute
           .Application.Selection.Range = UCase(nome)
           
           .Application.Selection.Find.Text = "#REGIME"
           .Application.Selection.Find.Execute
           .Application.Selection.Range = tributacao
                 
           .Application.Selection.Find.Text = "#PRODUT"
           .Application.Selection.Find.Execute
           .Application.Selection.Range = produto
         
               
       '.Close
       End With
       
       'WORD.Quit
       Set DOC = Nothing
       Set WORD = Nothing

    End Sub

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: [Resolvido]MALA DIRETA VBA

    Mensagem  Alexandre Neves em Sex 18 Dez 2015, 17:58

    Boa tarde,
    Se já tiver resolvido, marque no botão apropriado


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    lauzinho
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 09/12/2015

    Re: [Resolvido]MALA DIRETA VBA

    Mensagem  lauzinho em Seg 21 Dez 2015, 20:41

    Tudo certo!

      Data/hora atual: Dom 04 Dez 2016, 12:13