Neste artigo, aprenderemos como automatizar a mala direta usando o VBA no Microsoft Excel.
Mala direta: - Esta é a fonte para mesclar as informações dos dados em texto e, em seguida, imprimir o documento. Para realizar tal operação, utilizamos o Microsoft Word.
Vamos entender com um exercício simples: -
Temos um formato de carta na folha de relatório e queremos aplicar a mala direta por meio do VBA, no qual também queremos alterar os detalhes da carta.
Temos 2 folhas. 1 folha contém dados com detalhes a quem queremos dar cartas. Nos primeiros dados, a coluna A contém o nome, a coluna B contém o endereço da rua, a coluna C contém a cidade, a coluna D região e a coluna E e a coluna F contêm o CEP. Existe um botão de comando para mover na folha de relatório.
2WL folha está tendo o formato de letra com 2 botões de comando; um botão para mover na planilha de dados e o segundo botão de comando deve funcionar para a mala direta
Primeiramente, iremos escrever o código VBA para o botão de comando dos Dados Principais. Precisamos seguir as etapas abaixo: -
- Primeiro, inseriremos o botão de comando na planilha.
- Vá para a guia Desenvolvedor e insira o botão de comando do Activexcontrol.
- Renomeie o botão de comando com o nome “Carta”, e agora atribua a macro mencionada abaixo: -
Private Sub Main_data_Click ()
Planilhas ("Relatório"). Ativar
Alcance ("A19"). Mostrar
End Sub
Agora, inseriremos o segundo botão de comando na folha de relatório e atribuiremos a macro para mover na primeira folha. Precisamos seguir as etapas abaixo: -
- Renomeie o botão de comando com o nome “Dados” e atribua a macro mencionada abaixo: -
Private Sub CommandButton2_Click ()
Planilhas ("Main_Data"). Ativar
Intervalo ("A1"). Mostrar
End Sub
Agora vamos escrever o código principal para mala direta seguindo as etapas abaixo: -
Insira o botão de comando e renomeie-o como “Letter Print” e atribua o código abaixo mencionado: -
Private Sub CommandButton1_Click ()
Dim StartrowAs Integer, lastrow As Integer
Dim MsgAs String
Dim TotalrecordsAs String
Dim name As String, Street_AddressAs String, city As String, region As String, country As String, postal As String
Totalrecords = "= counta (Main_Data! A: A)"
Faixa ("L1") = Total de registros
Dim mydate As Date
Definir WRP = Folhas ("Relatório")
mydate = Date
WRP.Range ("A9") = mydate
WRP.Range ("A9"). NumberFormat = "[$ -F800] dddd, mmmm, dd, aaaa"
WRP.Range ("A9"). HorizontalAlignment = xlLeft
Startrow = InputBox ("Digite o primeiro registro a ser impresso.")
lastrow = InputBox ("Digite o último registro para imprimir.")
If Startrow> lastrow Then
Msg = "ERROR" & vbCrLf & "A linha inicial deve ser menor que a última linha"
Msgbox Msg, vbCritical, "ExcelTip"
Fim se
Para i = Startrow para lastrow
name = Sheets ("Main_data"). Células (i, 1)
Street_Address = Folhas ("Main_data"). Células (i, 2)
cidade = Folhas ("Dados_principal"). Células (i, 3)
region = Sheets ("Main_data"). Células (i, 4)
country = Sheets ("Main_data"). Células (i, 5)
postal = Sheets ("Main_data"). Células (i, 6)
Planilhas ("Relatório"). Intervalo ("A7") = nome & vbCrLf & Street_Address & vbCrLf & cidade & região & país & vbCrLf & postal
Planilhas ("Relatório"). Intervalo ("A11") = "Prezado" & "" & nome & ","
CheckBox1 = Verdadeiro
If CheckBox1 Then
ActiveSheet.PrintPreview
Outro
ActiveSheet.PrintOut
Fim se
Proximo eu
End Sub
Explicação do código: - Primeiro, definiremos as variáveis, depois definiremos a data e o formato da data, depois definiremos a última linha e a linha inicial. Em seguida, criamos uma caixa de mensagem para transmitir a mensagem. Em seguida, definiremos os dados e o intervalo que queremos capturar na carta.
- Para executar o código, pressione a tecla F5 no teclado.
- Então você tem que inserir o primeiro ponto de registro. Depois disso, você receberá uma nova caixa de mensagem para inserir o último registro do ponto.
- E então você obterá o documento mostrado abaixo
- A carta será atualizada de acordo com os detalhes mencionados nos dados principais.
É assim que podemos automatizar a mala direta por meio do VBA no Microsoft Excel.