Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

Excel: Criação de Add-Ins

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 With

End 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 Long

    firstRow = 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 If

        End 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:

António Silva disse...

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.

Anónimo disse...

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.
=)

Unknown disse...

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

Helder disse...

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!

Jorge Paulino disse...

Olá,

Mas tu não alteras no ficheiro *.xla. Deves fazer as alterações no *.xls e depois gravas como *.xla.

Anónimo disse...

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?

Jorge Paulino disse...

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)



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject
Google-Translate-ChineseGoogle-Translate-Portuguese to FrenchGoogle-Translate-Portuguese to GermanGoogle-Translate-Portuguese to ItalianGoogle-Translate-Portuguese to JapaneseGoogle-Translate-Portuguese to EnglishGoogle-Translate-Portuguese to RussianGoogle-Translate-Portuguese to Spanish

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico