Um Excel Add-In é um ficheiro com a extensão *.xla que tem funções personalizadas, utilizando código VBA, e que inicia automaticamente quando o Excel é aberto. Estas funções personalizadas, também designadas por UDF’s (User Defined Functions), permitem ser executadas independentemente do documento que esteja aberto. Ou seja, podemos criar uma macro/função para um determinado ficheiro de Excel, mas se necessitarmos de uma macro/função que seja necessário funcionar em qualquer documento, usamos um Add-In.
Para mostrar a criação e implementação de um Add-In irá ser mostrado um exemplo de como criar um novo menu e executar um ciclo que irá apagar datas, numa lista, inferiores à data actual.
Para criarmos então um Add-In no Excel deveremos fazer o seguinte:
1 – Iniciar o Excel e abrir o Editor de Visual Basic (Tools – Macros – Visual Basic Editor ou ALT+F11)
2 – Com o Visual Basic Editor aberto fazer um duplo clique no ThisWorkbook (que é onde se insere o código comum a todas as folhas ou WorkSheets) e insere-se o seguinte código:
' Quando o Workbook é aberto, usando o evento Open()
Private Sub Workbook_Open()' Insere um novo separador e um menu no final da posição 6 (Menu Tools)
With Application.MenuBars(xlWorksheet).Menus(6).MenuItems
.Add Caption:="-"
.Add Caption:="&Apagar Datas", OnAction:="ApagarDatas"
End WithEnd Sub
Este código irá criar um novo separador e um novo menu que executa o Sub (procedimento) ApagarDatas().
3 – Adiciona-se um novo módulo e inserir o seguinte código:
' -------------------------------------------------------------------------------------------------
' Apaga as linhas em que a data da coluna A é inferior à data actual
' -------------------------------------------------------------------------------------------------
Public Sub ApagarDatas()
Dim msg As String
msg = "Deseja apagar as datas da lista inferiores à actual ?"
' Pergunta ao utilizar se pretende continuar, seleccionando por defeito o botão "No"
If MsgBox(msg, vbYesNo + vbQuestion + vbDefaultButton2) = vbYes Then' Desactiva as actualizações no ecrã e altera os cálculos
' para manual. Como existem dados aleatórios na folha, sempre
' que se apagava uma linha actualizava tudo
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual' Declaração de variáveis
Dim firstRow As Long, lastRow As Long
Dim x As LongfirstRow = 2
' Calcula qual a ultima linha preenchida
lastRow = Cells(65536, 1).End(XlDirection.xlUp).Row()' Inicia um ciclo que irá percorrer os dados. Como se trata de
' apagar linha deve-se começar de baixo para cima
For x = lastRow To firstRow Step -1' Verifica se é uma data válida
If IsDate(Cells(x, 1).Value) Then' Compara com a data actual e caso seja inferior apaga a linha
If CDate(Cells(x, 1).Value) < Date Then
Cells(x, 1).EntireRow.Delete
End IfEnd If
Next x
' Repõe as actualizações/cálculos
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End If
End Sub
Este código fará então um ciclo na folha ou WorkSheet seleccionada, em todas as linhas, e verificará na coluna “A” se a data existente é inferior à actual. Caso seja inferior apagará a linha.
4 – No Visual Basic Editor ou na folha de cálculo fazer um Save As e no tipo de ficheiro seleccionar “Microsoft Office Excel Add-In (*.xla). Podemos ainda no menu Tools – VBAProject Properties indicar detalhes sobre o nosso Add-In e definir uma password. Com a password o Add-In funcionará na mesma apenas bloqueia a visualização do código.
5 – Ir ao Menu Tools – Add-Ins, seleccionar Browse e escolher o ficheiro criado.
6 – Reiniciar o Excel
Se todos os passos forem cumpridos, quando iniciarmos o Excel estará disponível um novo menu com a descrição “Apagar Datas”. Para testar esta nova opção vamos construir um ficheiro com as seguintes formulas:
a) Inserir na célula A1 a seguinte formula e copiar até à A50 para criar uma data aleatória entre os dias 1 e 28 de qualquer mês do corrente ano:
=DATE(2008;RANDBETWEEN(1;12);RANDBETWEEN(1;28))
b) Inserir na célula B2 a seguinte formula e copiar até B50 e depois para as colunas C,D,E, etc. Esta formula irá criar um número aleatório entre 1 e 1000.
=RANDBETWEEN(1;1000)
Executar a nova opção – ApagarDatas() – e verificar os resultados/funcionamento.
O objectivo deste artigo é mostrar como criar um Add-In no Excel, a sua utilidade e aplicação. Mostrar também como fazer um ciclo numa lista de valores, verificando qual a última linha preenchida e efectuar algumas verificações para eliminar dados. Este exemplo serve como demonstração e poderá ser adaptado de acordo com as diversas necessidades.
PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!
7 comentários:
Essa do Application.ScreenUpdating é interessante, vai servir para acelerar uma macro que tenho no excel, e que têm que aplicar a muitas linhas. Continua o bom trabalho.
Olá!
Gostaria de saber como consigo obter determinadas células que estejam selecionadas. Por exemplo: da célula A1 até a célula B10, há dados que eu queira verificar, como no exemplo do artigo. Como faço pra verificar somente os valores selecionados por mim?
Agradecido desde já!
E muito bom o artigo, continuem assim.
=)
Olá,
Podes criar um ciclo em todas as células seleccionada. Por exemplo:
Dim r As Range
For Each r In Selection
' r.Value
Next
Olá,
Antes de mais, parabéns pela explicação, está muito boa!
Apenas uma questão, após a criação do ficheiro *.xla, se pretendermos editar o ficheiro *.xla, ao abrir o ficheiro, apenas é executado o Excel sem nenhum livro aberto! O problema é que, após modificar as macros, se por esquecimento se fechar o VBA sem gravar, todo o trabalho desenvolvido é perdido. Não existe nenhuma forma de antes de fechar o VBA este nos perguntar se queremos gravar?
Obrigado!
Olá,
Mas tu não alteras no ficheiro *.xla. Deves fazer as alterações no *.xls e depois gravas como *.xla.
Olá boa noite,
estou com dificuldade pois meu excel 2010 nao possui a opção de salvar em xla, alguem pode me esclarecer sobre o assunto?
Olá,
Se procurar bem deve encontrar no final, pois está disponível.
Mas de qualquer forma para a versão 2007 e superior deve ser extensão ".xlam" (Excel Add-ins Macro Enabled)
Enviar um comentário