Escolar Documentos
Profissional Documentos
Cultura Documentos
D V
O
V A
A V (U - )
A M (B - )
I B M B
I B
M B
F E VBA
G M
E C
I –T -E
F –N
D –W –L /D –U –L
S
F –E –N
S C S
G S
W S
CAPÍTULO 4 – TRATAMENTO DE ERROS
E
E
E
B (B )
C C (C B )
C S (C B )
B O (O B )
C L (L B )
CAPÍTULO 6 – FUNÇÕES
I
D B R B V
CAPÍTULO 7– FORMULÁRIOS
Todo o código que será ensinado nos capítulos a seguir deverá ser inserido
dentro da Sub Aprendizado, para efeitos de teste e aprendizado, desta
forma a palavra [algoritmo] será apagada, para dar lugar aos códigos
desejados.
Ao pressionar ALT + F11 é possível acessar o editor de VBA do Excel, outra
maneira é acessar a guia desenvolvedor e clicar em no botão Visual Basic.
Caso a guia desenvolvedor não esteja disponível, é possível adiciona-la da
seguinte maneira:
C lique na guia Arquivo.
Clique em Opções.
Clique em Personalizar Faixa de Opções.
Em Personalizar a Faixa de Opções e em Guias Principais,
marque a caixa de seleção Desenvolvedor.
Com a guia desenvolvedor disponível, basta acessa-la pelo menu superior,
da seguinte maneira:
É Importante notar que o depurador está parado na quinta linha, uma vez
que F8 seja pressionado novamente, a quinta linha será lida e a célula A3
será preenchida de acordo com as instruções dadas.
É possível também marcar um ponto de interrupção, através da tecla F9,
ou u lizando o menu superior em Depurar>A var/Desa var pontos de
interrupção, e ao dar “Play” na macro ela irá ler todas as linhas até chegar
na linha de interrupção, a qual é graficamente marcada pela bola vermelha
e o texto vermelho, conforme exemplo abaixo:
Ou
Ou
Range(Cells(1,1),Cells(2,2)).Select
Ou
Sheets(“Plan1”).select
Ou
Sheets(1).select
Ou
Workbooks(1).Ac vate
É possível copiar uma coluna ou uma linha por inteiro, com os códigos a
seguir:
Copiar a primeira linha e colar na segunda:
Rows(1).Copy Des na on:= Rows(2)
Copiar a primeira coluna e colar na segunda:
Columns (1).Copy Des na on:= Columns (2)
Para colar com operação basta u lizar o termo “Opera on”, após virgula,
da seguinte maneira:
*Por padrão o excel desloca a coluna selecionada (no exemplo a coluna 4, equivalente a “D”, para
direita)
O mesmo código também poderia ser u lizado com o código Cut ao invés
de copy, desta forma a coluna trocaria de posição conforme com a imagem
a seguir:
Columns(2).Cut
Columns(4).Select
Selec on.Insert
Formatação em VBA
Para formatar células em VBA basta aplicar os métodos aos objetos do po
célula, seja através do Range(), Cells(), Selec on, Rows() ou Columns(),
todos esses vão aceitar o método das formatações que serão aplicadas a
seguir. Esse processo é extremamente importante para o tratamento de
dados brutos extraídos de banco de dados, para organização das planilhas
e demais obje vos ligados à formatação de células. Basicamente todos as
formas de formatação que são permi das pela interface do Excel, também
são possíveis de serem acessadas através das instruções em VBA.
A tabela abaixo apresenta os principais métodos para formatação das
células em VBA:
Explicação:
xlEdgeLe – Borda externa esquerda
xlEdgeRight – Borda externa direita
xlEdgeBo om – Borda externa inferior
xlEdgeTop – Borda externa superior
xlInsideHorizontal – Borda interna horizontal
xlInsideVer cal – Borda interna Ver cal
O trecho xlCon nuous determina que é uma linha con nua, pode ser
subs tuído por:
xlDash para linha tracejada
ou
xlDot para linha pon lhada
Exemplo 2:
Sub Aprendizado()
Dim Selecao_1 As Range
Selecao_1 = Range(“A1”)
Selecao_1 = 10
End sub
No exemplo anterior, a par r do momento que Selecao_1 recebe
Range(“A1”), é possível se referir a célula A1 através da variável Selecao_1,
então u lizar Selecao_1 = 10, é o mesmo que u lizar Range(“A1”) = 10.
Obs: Neste exemplo não foi declarado a Worksheet que está sendo
referida, desta forma o Excel entende a planilha u lizada como a que está
selecionada. Poderia também ser u lizado no lugar de Range(“A1”), a
forma mais complete: Worksheets(“Plan1”).Range(“A1”).
É importante citar que para as Sub’s, caso a variável não seja declarada, no
momento da depuração, o compilador consegue atribuir um po de
variável de acordo a u lização no código, porém para um funcionamento
correto e desempenho sa sfatório, é altamente recomendado a declaração
de acordo com a necessidade de aplicação no algoritmo.
É possível atribuir um valor a uma variável dentro do próprio código, ou
trazer seus valores das planilhas do Excel, combinado com os códigos dos
capítulos anteriores, como no exemplo a seguir:
O VBA interage com o Excel tanto para receber as variáveis, quanto para
colocar as variáveis na planilha, essa interação é extremamente importante
para a mecânica de funcionamento das macros e para os exemplos que
serão apresentados nos capítulos seguintes.
Variáveis em Array
Variáveis podem ser declaradas de forma vetorial e matricial, portanto,
uma mesma variável pode alocar diversos dados diferentes.
Array Vetorial (Uni-direcionais)
Uma variável pode receber informações da maneira vetorial, desta forma,
é possível alocar e retornar os dados através de índices que são indexados
numericamente em uma lista.
É possível fazer analogia com um armário de diversas gavetas, onde em
cada gaveta uma única informação pode ser alocada, supondo que a
variável ArrayVetor seja declarada para possuir 7 elementos, a declaração
se dá da seguinte maneira:
Exemplo:
Dim ArrayVetor(6) As integer
O VBA entende a estrutura da seguinte forma:
Explicação:
Variável Nomes declarada como vetor de 3 posições.
Variável Nomes com índice 0 recebe o nome Clara
Variável Nomes com índice 1 recebe o nome João
Variável Nomes com índice 2 recebe o nome Maria
Mensagem com os nomes armazenados, Chr(13) é um código u lizado para pular
linha.
Explicação:
Variável ArrayMatriz declarada como matriz de 2,2 posições
Variável ArrayMatriz com índice 0,0 recebe a letra A
Variável ArrayMatriz com índice 0,1 recebe a letra B
Variável ArrayMatriz com índice 1,0 recebe a letra C
Variável ArrayMatriz com índice 1,1 recebe a letra D
Mensagem com as Letras armazenadas.
InputBox e MsgBox
Ambos os recursos são responsáveis por realizar uma interação com o
usuário através de interface gráfica, InputBox, será responsável por enviar
uma mensagem de texto ao usuário através de uma janela, solicitando
uma entrada de informação, o MsgBox por sua vez, tem o obje vo de
enviar uma mensagem ao usuário, solicitando a sua confirmação através
de botões.
InputBox
Sintaxe
InputBox(prompt[, tle] [, default] [, xpos] [, ypos] [, helpfile, context])
Dos parâmetros solicitados, apenas o prompt é obrigatório, nele é
necessário escrever o texto que será informado ao usuário, é importante
também u lizar uma variável que receberá o valor que o usuário digitar,
conforme exemplo a seguir:
Valor = InputBox("Digite o valor desejado")
Exemplo de u lização 2:
Sub Aprendizado()
Dim Total As Integer
Total = Applica on.WorksheetFunc on.SumIf(Range("A:A"), ">5",
Range("A:A"))
MsgBox Total
End Sub
O código tem o mesmo resultado, porém fica com uma melhor aparência e
organização, é uma prá ca altamente recomendada em programação, não
apenas para um melhor desempenho do algoritmo, mas também para
permi r futuras modificações e facilitar o entendimento para outros
usuários.
Exemplo Prá co 3:
Neste exemplo 3, é demonstrado que a estrutura If – Else – End if pode ser
u lizada com total integração com as planilhas, aplicando verificações com
variáveis, ou dentro da própria planilha.
For – Next
A estrutura For Next é uma das mais importantes dentro do VBA, ela
permite executar ciclos de estruturas de acordo com contadores pré-
definidos, onde a estrutura se comporta da seguinte maneira:
For [Inicialização do Contador] To [Valor ] Step [Valor a Incrementar]
[Instruções a realizar em cada iteração]
Next
As letras i, j, k são muito u lizadas em variáveis de contadores por
convenção e boa prá ca em programação, mas pode ser u lizada qualquer
variável, desta forma um modelo padrão de u lizar o contador do For –
Next pode ser:
For i = 1 To 10
[Instruções a realizar em cada iteração]
Next i
É importante observar que uma vez que o Step não seja escrito, o VBA
adota o valor padrão de Step 1, desta forma ele realizará ciclos somando 1
a variável i em cada ciclo. Neste exemplo, o ciclo será executado 10 vezes,
no primeiro ciclo a variável i tem o valor 1, no segundo ciclo obtém o valor
2 e assim sucessivamente.
Em exemplo semelhante:
For i = 0 To 10 Step 5
[Instruções a realizar em cada iteração]
Next i
Como neste exemplo o Step é declarado e vale 5, o ciclo é executado
incrementando 5 unidades em cada rotação, a primeira rotação, inicia com
o valor atribuído no contador de 0, o segundo ciclo soma 5, ficando i = 5,
no terceiro e úl mo ciclo é incrementado 5 ficando i = 10.
Exemplo Prá co 1:
É importante notar no exemplo anterior, que a variável i foi u lizada dentro
do range, para tanto, é necessário fechar às aspas no primeiro termo que
representa a coluna e usar & para concatenar com a variável, no caso a
variável i.
Para quando i = 1
O código vai ler da seguinte maneira:
Range(“A1”) = 1
Para quando i = 2
Range(“A2”) = 2
E assim sucessivamente, ao rodar o código por completo, ele repe rá este
processo 10 vezes, desta maneira as 10 células da coluna A são
preenchidas.
Outra forma interessante de u lizar os ciclos é u lizar a outra forma de se
referir a células, u lizando Cells(1,1) por exemplo para se referir a
Range(“A1”). Uma vez que se u liza Cells, pode se u lizar variáveis
numéricas para se referir a colunas. No exemplo a seguir, serão
preenchidos valores em linhas e colunas u lizando Cells:
Exemplo Prá co 2:
Como pode ser observado o comando Cells, permite uma flexibilidade
maior, uma vez que é possível u lizar variáveis numéricas tanto para as
linhas quanto para colunas, diferente do exemplo anterior, o valor
atribuído para cada célula é a soma de i + j, com isso o valor de cada célula
que vai da linha 1 até a 10, coluna 1 até a 3, tem o valor atribuído a soma
de i + j.
Este exemplo demonstra claramente como os ciclos de contadores com For
Next podem interagir com o Excel.
Do – While – Loop / Do – Un l – Loop
De forma semelhante ao For Next, a estrutura Do While, vai realizar ciclo
de instruções, porém a diferença é que ao invés de u lizar um contador,
será u lizada uma condição para qual enquanto for sa sfeita, o looping
será executado. Com Un l o processo é semelhante, porém o looping é
executado até a condição ser sa sfeita.
Sintaxe
Do While [Condição]
[Instruções a realizar em cada iteração]
Loop
Do Un l [Condição]
[Instruções a realizar em cada iteração]
Loop
Funcionamento:
A Macro tem as seguintes instruções:
Declara a variável “Planilha” como Worksheet
For-Each, para cada planilha dentro do conjunto de objetos de
planilhas, realizar as instruções.
Seleciona a Planilha
Nome da planilha = entrada de dados do usuário
Seleciona o próximo objeto do conjunto.
Sub Aprendizado()
Dim Var1 As Integer
Dim Var2 As Integer
Var1 = 3
Var2 = 4
O With por sua vez separa o objeto da aplicação do método, desta forma o
objeto é citado apenas uma vez da seguinte maneira:
Sub Aprendizado()
With Range("C5", "I24")
.Interior.Color = vbWhite
.Font.Bold = True
.Font.Name = "Arial"
.Font.ColorIndex = 5
End With
End Sub
Capítulo 4 – Tratamento de erros
Durante o processo de programação, é muito comum se deparar com uma
série de erros, os quais podem possuir diferentes caracterís cas e origens.
Alguns são extremamente fáceis de serem encontrados, visto que o
próprio editor VBA indica a origem do erro, indicando inclusive em
determinados casos a linha onde o erro está efe vamente ocorrendo.
No VBA existem 3 pos principais de erros:
a) Erros lógicos
b) Erro de compilação
c) Erro de execução
Erro lógico
Este é o erro mais di cil de se localizar, visto que neste po de erro, toda
execução do código será realizada normalmente, porém o resultado final
não será aquele esperado. Desta forma é preciso realizar uma leitura
detalhada do código para encontrar o erro procurado, o famoso “Bug” do
código. O VBA facilita está procura através das ferramentas de depuração,
como citado nas primeiras seções deste livro, é possível realizar uma
leitura “passo a passo” do código através da depuração, para tanto, basta
u lizar o atalho F8, para que o código seja lido em etapas e desta forma
possa se verificar o resultado ob do pelas variáveis de maneira gradual ou
o resultado que está sendo apresentado na planilha em cada linha de
código.
Erro de compilação
Este é o erro mais simples de ser iden ficado, uma vez que o código não
será nem mesmo compilado enquanto o erro não for solucionado. O VBA
exige que as sintaxes estejam adequadas para poder efetuar a compilação,
desta maneira, qualquer código escrito de maneira errada será apontado
pelo editor assim que o usuário trocar para próxima linha, o código errado
será marcado de vermelho e só será possível compilar após a resolução do
mesmo.
No exemplo a seguir, o editor encontra um erro pela falta de um parêntese
que fecha a região do Range, a linha é destacada e é informado também a
falta do parêntese “)”.
Erro de execução
Este po de erro, permite a execução do código, porém durante a
execução, um erro será encontrado e o editor oferecerá ao usuário a opção
de parar a execução ou de depurar o código para corrigir o problema.
Existem diversas origens para o erro de execução, alguns exemplos que
causam o erro de execução com seu respec vo código:
Uma vez que o objeto esteja dentro da planilha, ele poderá apenas ser
manipulado, através da a vação do botão Modo Design no menu superior:
Obs: Para grande maioria dos casos, apenas a declaração Click será o
suficiente.
Botão (Bu on)
Principais propriedades:
Exemplo Prá co 2:
No segundo exemplo é demonstrada a criação de um botão que é
associado a um código que exibe e oculta a aba Plan2, desta forma, ao
clicar no botão, o mesmo faz uma verificação se a aba está oculta ou não,
reexibindo caso esteja e ocultando em caso contrario.
Obs:
Para poder clicar no botão corretamente é preciso desa var o botão
“Modo Design”
Caixa de Combinação (Combo Box)
Principais propriedades:
O ListFillRange foi preenchido com as células: G1:G5, logo a lista irá exibir
essas opções para o usuário. Supondo que os dados es vessem na Plan2,
bastaria colocar dentro de ListFillRange Plan2!G1:G5, ar cio que é muito
u lizado para esconder os dados que alimentam a caixa de seleção.
Código u lizado:
Caixa de Seleção (Check Box)
Explicação:
Em propriedades só o “cap on” foi alterado, para os nomes: Plan1, Plan2 e
Plan3. O nome dos objetos permaneceu no padrão CheckBox1, CheckBox2
e CheckBox3.
Esta mesma estrutura se repete por mais duas vezes, apenas trocando para
as demais planilhas.
Explicação:
Private Sub Resp1_Click()
If Resp1.Value = True Then
Range("C16") = "Errado"
Range("C16").Font.ColorIndex = 3
End If
End Sub
Esta mesma estrutura se repete por mais três vezes, apenas trocando para
as demais planilhas e alterando de errado para certo no objeto Resp2.
Caixa de Listagem (ListBox)
Principais propriedades:
Principais Métodos:
For i = 0 To Lista2.ListCount - 1
Fruta = Lista2.List(i)
SubTotal = Applica on.WorksheetFunc on.VLookup(Fruta, Plan1.Range("A3:B14"), 2, False) +
Range("H16")
Range("H16") = SubTotal
Next
End Sub
Explicação:
Sub Aprendizado()
Dim x As Integer
x = 10
Call Calc (x)
MsgBox x
End Sub
Sub Aprendizado()
Dim x As Integer
x = 10
Call Calc (x)
MsgBox x
End Sub
Modo Código:
Explicação:
SubRo na para o evento de click no botão “CommandBu on1”
Se o índice da planilha selecionada (posição), for igual ao
numero total de planilhas, selecionar a planilha 1.
Caso contrario, selecionar a planilha(índice da atual + 1 )
Termina condicional
Exemplo:
Sub Send_Mail()
Dim OutApp As Object
Dim OutMail As Object
Dim bMessage As String
Set OutApp = CreateObject("Outlook.Applica on")
Set OutMail = OutApp.CreateItem(0)
bMessage = "Digite a primeira linha" & vbNewLine & _
"Digite a segunda linha" & vbNewLine & _
"Digite a Terceira linha"
On Error Resume Next
With OutMail
.to = "exemplo@email.com"
.CC = "copia@email.com"
.BCC = "copiaoculta@email.com"
.Subject = "Assunto do email"
.Body = bMessage
.A achments.Add ("C:\exemplo.txt")
.Send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Sub Aprendizado()
Dim objWord As Object
Dim objDoc As Object
Dim strValue As String
Set objWord = CreateObject("Word.Applica on")
objWord.Visible = True
Set objDoc = objWord.documents.Add
Dim i As Integer
For i = 1 To 10
objDoc.Ac vate
strValue = Cells(i, 1)
objWord.Selec on.TypeText Text:=strValue
objWord.Selec on.TypeParagraph
Next i
End Sub
Formulário de pesquisa:
Uma vez que toda a interface de usuário já está pronta, pode-se começar a
programar as funções relacionadas a cada elemento do projeto.
Formulários
FORM_CADASTRO
FORM_PESQUISAR
Botões
BT_INSERIR
BT_SALVAR
BT_EXCLUIR
BT_LIMPAR
Caixas de texto
TXT_COD
TXT_NOME
TXT_CIDADE
TXT_ENDERECO
TXT_RG
TXT_CPF
TXT_TELEFONE
TXT_CEL
Caixa de combinação
CB_UF
Caixa de listagem
LB_CLIENTES
Arquivo
WKB_CADASTRO
ARQ_CADASTRO
Private Sub Workbook_Open()
FORM_CADASTRO.Show
End Sub
1. WorkBook
Declaração para Open no “WorkBook”
Para abrir o formulário quando o arquivo do Excel
for aberto, basta u lizar o objeto WKB_CADASTRO
com declaração Open.
FORM_CADASTRO
Public cod, nome, uf, cidade, endereco, rg, cpf, telefone, celular As String
Public numlinhas As Long
Public ChangesOK As Boolean
1. Variáveis
Variáveis do po string que receberão as informações da
caixa de texto
Variável do po long que receberá o numero total de
linhas do banco de dados
Variável do po booleana que permi rá ou não a leitura
do código dentro da Sub “LB_CLIENTES_Change” que será
apresentada posteriormente
2. Formulário Cadastro
Sub relacionada a abertura do formulário [Declaração
UserForm.Ini alize()]
A variável ChangesOK recebe inicialmente o valor verdadeiro
A fonte de linhas é atualizada com o total de linhas
preenchidas na planilha do Excel que está armazenando
os dados, através da função CountA + 1
O algoritmo sugere um código para o cadastro do próximo
cliente, u lizando o número de linhas já preenchidas +1
Private Sub BT_INSERIR_Click()
numlinhas = Applica on.WorksheetFunc on.CountA(Range("A:A")) + 1
TXT_COD = Applica on.WorksheetFunc on.Max(Range("A:A")) + 1
Call UpdateText
If nome = "" Or cpf = "" Or endereco = "" Then
MsgBox ("Formulário incompleto")
Else
Call Insert
LB_CLIENTES.RowSource = "Cadastro!A2:I" & Applica on.WorksheetFunc on.CountA(Range("A2",
"A1048576")) + 1
End If
LB_CLIENTES.Selected(LB_CLIENTES.ListCount - 1) = True
End Sub
3. Botão Inserir
Declaração para click no botão Inserir
A variávei numlinhas recebe o numero total de linhas
através da função “CountA”, isso é necessário para
inserir a nova informação apenas na úl ma linha +1
A caixa de texto do código recebe o código referente
ao numero de linhas +1, apenas um padrão para este
formulário
Posteriormente a Sub “UpdateText” é chamada para
associar os valores e textos inseridos para variáveis
do po String (Sub apresentada abaixo)
Caso CPF ou endereço estejam vazios, é enviada uma
mensagem de formulário incompleto, neste
exemplo, apenas os dois são exigências de cadastro
Caso CPF e endereço tenham sido adequadamente
preenchidos a Sub “Insert” é chamada para inserir os
valores preenchidos nas linhas correspondentes
A fonte de linhas que alimenta a Caixa de listagem
(listbox) é atualizada da célula A2, até a célula I &
numero te linhas totais (encontrada na função
CountA) + 1.
Apenas para fins de uma interface mais intui va, a
nova linha é selecionada.
4. Sub Ro na UpdateText()
A subro na UpdateText(), tem por obje vo atribuir os textos/valores
inseridos nas caixas de texto às variáveis já declaradas previamente.
Public Sub Insert()
Range("A" & numlinhas) = numlinhas
Range("B" & numlinhas) = nome
Range("C" & numlinhas) = uf
Range("D" & numlinhas) = cidade
Range("E" & numlinhas) = endereco
Range("F" & numlinhas) = rg
Range("G" & numlinhas) = cpf
Range("H" & numlinhas) = telefone
Range("I" & numlinhas) = celular
End Sub
5. Sub Ro na Insert()
A subro na Insert(), tem por obje vo atribuir os textos/valores das
variáveis, nas linhas e colunas do Excel, que funcionará como um
banco de dados para armazenamento das informações.
Private Sub BT_SALVAR_Click()
ChangesOK = False
pos = LB_CLIENTES.ListIndex + 2
Range("A" & pos) = TXT_COD.Value
Range("B" & pos) = TXT_NOME.Value
Range("C" & pos) = CB_UF.Value
Range("D" & pos) = TXT_CIDADE.Value
Range("E" & pos) = TXT_ENDERECO.Value
Range("F" & pos) = TXT_RG.Value
Range("G" & pos) = TXT_CPF.Value
Range("H" & pos) = TXT_TELEFONE.Value
Range("I" & pos) = TXT_CEL.Value
ChangesOK = True
LB_CLIENTES.Selected(pos - 2) = True
End Sub
6. Botão Salvar
Declaração para click no botão Limpar
O ar cio de u lizar a variável booleana ChangesOK funciona
para inibir a Sub que será apresentada a seguir: “LB_CLIENTES_Change()”,
uma vez que ela é chamada em qualquer modificação na seleção da caixa de
listagem
Posição na planilha equivale a posição do item na lista +2
(Devido ao fato da lista contar a par r de zero e na
planilha ter o cabeçalho, logo é preciso somar 2)
As células na planilha recebem os valores preenchidos na
caixa de texto
Private Sub LB_CLIENTES_Change()
If ChangesOK = False Then
Exit Sub
End If
TXT_COD.Value = LB_CLIENTES.List(LB_CLIENTES.ListIndex, 0)
TXT_NOME.Value = LB_CLIENTES.List(LB_CLIENTES.ListIndex, 1)
CB_UF.Value = LB_CLIENTES.List(LB_CLIENTES.ListIndex, 2)
TXT_CIDADE.Value = LB_CLIENTES.List(LB_CLIENTES.ListIndex, 3)
TXT_ENDERECO.Value = LB_CLIENTES.List(LB_CLIENTES.ListIndex, 4)
TXT_RG.Value = LB_CLIENTES.List(LB_CLIENTES.ListIndex, 5)
TXT_CPF.Value = LB_CLIENTES.List(LB_CLIENTES.ListIndex, 6)
TXT_TELEFONE.Value = LB_CLIENTES.List(LB_CLIENTES.ListIndex, 7)
TXT_CEL.Value = LB_CLIENTES.List(LB_CLIENTES.ListIndex, 8)
End Sub
7. Caixa de Listagem LB_CLIENTES_Change()
Declaração para alteração na caixa de listagem
Caso a variável ChangesOK seja falsa, significa que esta
sub está sendo chamada por causa da Sub SALVAR_Click,
desta forma, será lido o código Exit Sub, para sair da
mesma
Caso contrário, os valores das caixa de texto são
atualizados de acordo com a seleção do usuário na caixa
de listagem
Private Sub BT_EXCLUIR_Click()
RemoverLinha = LB_CLIENTES.ListIndex
Rows(RemoverLinha + 2).Delete
LB_CLIENTES.RowSource = "Cadastro!A2:I" & Applica on.WorksheetFunc on.CountA(Range("A2",
"A1048576")) + 1
On Error Resume Next
LB_CLIENTES.Selected(RemoverLinha - 1) = True
End Sub
8. Botão Excluir
Declaração para click no botão Excluir
Variável RemoverLinha recebe o valor
LB_CLIENTES.ListIndex, o qual equivale a quan dade de
linhas até a posição que será excluída
A linha na planilha que será deletada, equivale a
RemoverLinha +2, uma vez que é preciso considerar que a
ListIndex começa em Zero e na planilha tem o cabeçalho,
logo é preciso somar 2
Através do LB_CLIENTES.RowSource o quan ta vo de
linhas é atualizado, para tanto, se u liza a função CountA
Sempre que se excluir uma linha, a linha anterior a ela é
selecionada, apenas para fins de melhoramento de
interface, “On Error Resume Next” é u lizado para
impedir erro caso se esteja na primeira linha
9. Botão Limpar
Declaração para click no botão Limpar
Atribui o valor vazio para todas as Caixas de Texto
Private Sub BT_Pesquisar_Click()
FORM_PESQUISAR.Show
End Sub
FORM_PESQUISAR
Private Sub BT_Pesquisar_Click()
Dim Coluna As String
Dim Linha As String
Dim TextoProcura As String
TextoProcura = TXT_PESQUISA
On Error GoTo erro001
If IsNumeric(TextoProcura) Then
Linha = Applica on.WorksheetFunc on.Match(CLng(TextoProcura), Range(Coluna & ":" & Coluna), 0)
Else
Linha = Applica on.WorksheetFunc on.Match(CStr(TextoProcura), Range(Coluna & ":" & Coluna), 0)
End If
FORM_CADASTRO.LB_CLIENTES.Selected(Linha - 2) = True
Exit Sub
erro001:
MsgBox "Não Encontrado"
End Sub
1. Botão Pesquisar
FORM_CADASTRO
Public cod, nome, uf, cidade, endereco, rg, cpf, telefone, celular As String
Public numlinhas As Long
Public ChangesOK As Boolean
FORM_PESQUISAR
Private Sub BT_Pesquisar_Click()
Dim Coluna As String
Dim Linha As String
Dim TextoProcura As String
If OB_COD.Value = True Then
Coluna = "A"
ElseIf OB_NOME.Value = True Then
Coluna = "B"
ElseIf OB_CPF.Value = True Then
Coluna = "G"
ElseIf OB_RG.Value = True Then
Coluna = "F"
End If
TextoProcura = TXT_PESQUISA
On Error GoTo erro001
If IsNumeric(TextoProcura) Then
Linha = Applica on.WorksheetFunc on.Match(CLng(TextoProcura), Range(Coluna & ":" & Coluna), 0)
Else
Linha = Applica on.WorksheetFunc on.Match(CStr(TextoProcura), Range(Coluna & ":" & Coluna), 0)
End If
FORM_CADASTRO.LB_CLIENTES.Selected(Linha - 2) = True
Exit Sub
erro001:
MsgBox "Não Encontrado"
End Sub