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: Dicas de VBA - Eventos

Os próximos artigos vão mostrar como se iniciar em VBA – Microsoft Excel – e algumas melhorias, dicas e sugestões que podem ser feitas para melhorar o código.

A execução de macros em Excel, está normalmente associada a um botão ou um objecto, no entanto existem diversas formas de executar macros, que podem simplificar bastante a automação na folha de calculo. Este artigo pretende mostrar alguns exemplos simples de alguns dos eventos mais importantes e mais utilizados em VBA.

NOTA: Neste artigo será usado o Microsoft Excel 2010 mas o mesmo se aplica a versões anteriores com o Microsoft Excel 2003 ou o Microsoft Excel 2007.

Quando entramos no editor de VBA, o VBE (Visual Basic Editor), existem alguns objectos no explorador do projecto: um objecto por cada folha disponível (Sheet), e um objecto global (ThisWorkBook).

Objecto Sheet

No objecto Sheet, temos os eventos relativos apenas para essa folha, como por exemplo:

  • Change: Quando é efectuada alguma alteração em alguma célula;
  • SelectionChange: Quando é alterada a selecção;
  • BeforeRightClick: Antes de clicar com o botão direito;
  • Calculate: Quando é efectuada uma operação que obrigue a cálculos;

Existem mais disponíveis mas estes são talvez os mais utilizados. Por exemplo, o BeforeRightClick permite-nos criar um menu personalizado quando clicamos com o botão direito do rato, o Calculate permite-nos correr um código quando existem cálculos, etc, etc.

Por exemplo, se queremos executar qualquer código quando alteramos um valor numa determinada área, podemos utilizar o evento Change. Deste modo verificamos se a nossa área – range - coincide com a célula alterada, utilizando a função Intersect(), e executamos o nosso código.

    Private Sub Worksheet_Change(ByVal Target As Range)

        ' Verifica se a célula modificada está entre o range B2:B10
        If Not Intersect(Range("B2:B10"), Target) Is Nothing Then
            MsgBox("Executar código!")
        End If

    End Sub


Objecto ThisWorkBook

No objecto ThisWorkBook estão os eventos comuns a todas as folhas e os eventos gerais, como por exemplo:

  • Workbook_Open: Quando o documento é aberto
  • Workbook_BeforeClose: Quando o documento é fechado (antes de fechar)
  • Workbook_BeforeSave: Quando o documento vai ser gravado
  • Workbook_NewSheet: Quando é adicionada uma nova folha
  • Workbook_SheetChange: Quando é alterado qualquer célula em qualquer folha
  • Workbook_SheetActivate: Quando uma folha é activada

Estes são apenas alguns dos eventos que estão disponíveis e que podem ser utilizados.

Por exemplo, se queremos saber qual a folha – Worksheet – que foi seleccionada, podemos fazer:

    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
        Dim sheet As Worksheet
        sheet = Sh

        MsgBox(sheet.Name)
    End Sub

Ou ainda, evitar que o documento seja fechado:

    Private Sub Workbook_BeforeClose(ByVal Cancel As Boolean)
        Dim msg As String
        msg = "Deseja fechar o documento ?"

        ' Cancela o encerramento do documento
        If MsgBox(msg, vbYesNo) <> vbYes Then
            Cancel = True
        End If

    End Sub

Como podem ver, existem vários eventos que podemos utilizar para melhorar os nossas folhas de cálculo, através do VBA, e com bastantes aplicações.

Para breve mais dicas de como melhorar o código em VBA!


Comunidade NetPonto – Apresentação + 2ª Reunião Presencial

“A comunidade NetPonto é uma iniciativa independente e sem fins lucrativos, que tem como simples e único objectivo a partilha de conhecimento na área de arquitectura e desenvolvimento de software na plataforma .NET, na tentativa de disseminar o conhecimento diferenciado de cada um de seus membros.

Cada um de nós tem diferentes talentos, e com as dezenas de tecnologias que são lançadas todos os dias, é muito difícil (para não dizer impossível) estar por dentro de tudo, e essa é uma das principais vantagens em fazer parte de uma comunidade de pessoas ligadas à nossa área.

Podemos aprender mais, e mais rápido, com as experiências de cada um. “

A primeira reunião decorreu no dia 15 de Agosto de 2009 e foi a primeira reunião presencial da comunidade NetPonto. A próxima reunião irá decorrer já no dia 19 de Setembro, em Lisboa, mas já estão prevista mais reuniões/apresentações

Agenda (19 de Setembro de 2009)

09:30 - Recepção dos participantes
10:00 - Apresentação da Comunidade NetPonto - Henrry Pires
10:15 - Introdução ao eXtreme Programming (XP) - Paulo Correia
11:30 - Coffee-break
11:45 - ASP .NET MVC na Prática - Caio Proiete
13:00 - Painel de Discussão

Para mais informações, participação nas reuniões ou para acompanharem esta comunidade, usem os seguintes endereços:

http://www.netponto.pt/ (página oficial)
http://twitter.com/netponto (twitter)
http://groups.google.com/group/netponto (grupo de discussão)


MSDN Magazine/Revista PROGRAMAR – Setembro 2009

MSDN Magazine

Já está disponível a MSDN Magazine de Setembro 2009, que coincide também com uma remodelação da página MSDN Magazine.

Alguns artigos disponíveis:

Revista PROGRAMAR

Disponível também a revista Portuguesa de programação, já na 21ª edição (em formato pdf), com vários artigos sobre diversas temas, como a construção de diagramas de blocos, acesso de BD’s remotas a partir em Windows Mobile 6, a linguagem de programação Lua e o sistema de templates T4.

Estes são alguns dos temas abordados na revista

Link directo para Download

Página oficial da revista PROGRAMAR

Divulgação na comunidade Portugal-a-Programar

VB.NET: XML Literals - Parte IV (Modificar, Inserir e Eliminar)

Este é o último artigo, por agora, sobre XML Literals. Os artigos anteriores mostraram diversas coisas importantes, como por exemplo, criar um ficheiro XML, ler e pesquisar informação (usando LINQ e Lambda Expressions), mas até agora ainda não foram referidos alguns pontos essenciais para a manipulação deste tipo de ficheiros: modificação, inserção e eliminação.

Neste artigo será mostrado como fazer estas operações com base no seguinte ficheiro XML, que terá o nome “myFile.xml”

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!--Lista de livros e revistas>
<
library
     <
books
         <
book name="Crepúsculo"author="Stephenie Meyer" /> 
         <
book name="Equador"author="Miguel S. Tavares" /> 
         <
book name="O Sétimo Selo"author="José R. dos Santos" /> 
    </
books
    <
magazine
        <
magazineName>MSDN Magazine</magazineName>  
        <
magazineName>Code Magazine</magazineName>
     </
magazine>
</
library>

Modificar

Para modificar um ficheiro XML, depois de o ler, é apenas necessário escolher o elemento a modificar e atribuir um novo valor. De acordo com o ficheiro base, e para alterar no grupo “Magazine” de “MSDN Magazine” para outro valor, podíamos fazer:

Dim xmlFile = XDocument.Load(strFileName)
xmlFile...<magazineName>.Value = "Novo Valor"

Isto irá modificar o primeiro elemento que encontrar, uma vez que utilizamos a propriedade descendantes, que neste caso é a que pretendemos. Para modificar um elemento especifico, podemos uma vez mais recorrer a Lambda ou LINQ, e seleccionar apenas esse, como por exemplo, modificar um atributo no grupo “books”

Dim xmlFile = XDocument.Load(strFileName)
Dim element = xmlFile.<library>.<books>.<book>.Where(Function(f) _
                                                                             f.@name = "Equador")
element.@author = "Jorge Paulino"

Este exemplo indica o caminho completo, mas podemos, uma vez mais, usar a propriedade descendantes, simplificando o código (apenas em duas linhas):

Dim xmlFile = XDocument.Load(strFileName)
xmlFile...<book>.Where(Function(f) _
                                 f.@name = "Equador").@author = "Jorge Paulino"


Inserir

Para inserirmos um novo elemento no ficheiro XML, é necessário “construir” o novo XElement, e depois adiciona-lo à posição correcta. Podemos fazer isto pelo menos de duas formas: criando um XElement e os respectivos(caso existam) XAtributes:

Dim xmlFile = XDocument.Load(strFileName)
Dim element = New XElement("book", _
                                  New XAttribute("name", "XML Literals"), _
                                 New XAttribute("author", "Jorge Paulino"))
Dim parent = xmlFile...<books>.FirstOrDefault()
parent.Add(element)

Ou directamente no código:

Dim xmlFile = XDocument.Load(strFileName)
Dim element = <book name="XML Literals" author="Jorge Paulino"/>
Dim parent = xmlFile...<books>.FirstOrDefault()
parent.Add(element)

Neste segundo exemplo, e caso queiramos substituir o valor dos atributos por uma variável, podemos usar Embedded Expressions, utilizando as tags <%= %>, como já explicado num artigo anterior.

Eliminar

Eliminar um elemento é bastante simples e semelhante à modificação.

Dim xmlFile = XDocument.Load(strFileName)
xmlFile...<magazineName>.Remove()

Este exemplo mostra como remover os elementos com a tag “magazineName”. Mas atenção, este exemplo elimina todos os elementos com a tag indicada. Para apagarmos apenas um elemento especifico, temos de indicar qual.

Dim xmlFile = XDocument.Load(strFileName)
xmlFile...<book>.Where(Function(f) f.@author = "Stephenie Meyer").Remove()

 

Em todos os exemplos mostrados, é necessário gravar as alterações efectuadas, usando simplemente:

xmlFile.Save(strFileName)


E para já é tudo!

Espero que estes exemplos de XML Literals, em conjunto com Lambda e LINQ, tenham ajudado a uma mais fácil utilização de ficheiros XML.




Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico