MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

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
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6244
    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
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6244
    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
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6244
    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: Qui 20 Jul 2017, 15:37