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

Revista PROGRAMAR - Edição 31 Outubro de 2011


(clica para download)

Neste mês de Outubro, ainda com o calor à porta, a equipa da Revista PROGRAMAR não se importa de suar para lhe trazer uma nova edição.

Nesta edição continuaremos também a premiar os autores dos três melhores artigos, dado o sucesso na edição anterior. E os leitores devem dar a sua opinião para que possamos premiar correctamente. Para isso vote em http://tiny.cc/ProgramarED31_V

Assim nesta edição trazemos até si, como artigo de capa, um artigo sobre NHibernate com técnicas para software melhor e mais rápido, com a colaboração da comunidade NetPonto. Nesta 31ª edição pode ainda encontrar os seguintes artigos:

  • Geração de Números Aleatórios - Parte 1
    • O primeiro de 4 artigos do mesmo autor da excelente série «Programação em Lua», desta vez sobre geração de números aleatórios.
  •  Programar para Windows Azure
    • Conheça alguns detalhes bem como alguns cuidados que deveremos ter em conta quando desenvolvemos para esta plataforma.
  • Programação Orientada a Objectos em Java 6
    • Saiba algumas das melhores práticas e métodos de programação neste paradigma em Java 6.
  • DataBinding em Silverlight 4
    • Conheça o conceito de Databinding na plataforma Silverlight.
  • VISUAL (NOT) BASIC - Primeiros Passos com GDI+
    • Saiba mais sobre a API responsável por tudo o que nos «chega aos olhos» no mundo Windows.
  • CORE DUMP - Martelo <=> Inépcia
    • Neste artigo de opinião, conheça segundo o autor, a origem das falhas nas bases de muitos profissionais de TI.
E ainda em colaboração com a comunidade SharePointPT:
  • Padrão alternativo de Sharepoint
    • Neste artigo da comunidade SharePointPT, saiba como desconstruir as abordagens mais tradicionais, através de uma solução pouco comum através de uma arquitectura que optimiza os módulos de maior interesse para o cenário apresentado.
Mais informação


Excel: Dicas de VBA - Personalizar o Friso I

Num artigo anterior referi como executar uma macro usando uma determinada combinação de teclas. É uma funcionalidade muito prática, pois permite muito rapidamente e facilmente executar um determinado código. No entanto nem sempre é a melhor solução, uma vez que não é uma opção visível, ou seja, o utilizador nem sempre sabe que essa opção está disponível.

Uma solução muito interessante é personalizar o friso (ribbon), colocando à disposição do utilizador as diversas opções possíveis. Além de simples implementação, é uma solução visualmente muito agradável.

A personalização do friso pode ser feita individualmente para cada ficheiro ou para todos os ficheiros. Neste artigo iremos ver como fazer para apenas um ficheiro.

Existem diversos programas que permitem efectuar a personalização do friso, mas neste artigo irá ser utilizado o Custom UI Editor for Microsoft Office, que além de gratuito, é muito simples de utilizar.

Após instalar o programa fica disponível um simples editor.

image

Na opção File - Open escolhemos o ficheiro de Excel que queremos personalizar o friso. Caso o ficheiro ainda não tenha qualquer personalização, adicionamos, usando o botão direito do rato, uma UI Part (User Interface Part), como mostra a seguinte imagem.

image

Será então adicionado um ficheiro XML com o nome customUI14.xml. Usando o menu InsertSample XML escolhemos a opção Custom Tab. Será então adicionado o código XML que será a definição do nosso friso (ribbon).

Neste código (previamente formatado/alinhado), podemos verificar alguns elementos que constituem o novo separador: Tab, Group e um Button.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="customTab" label="Custom Tab">
<group id="customGroup" label="Custom Group">
<button id="customButton"
label="Custom Button"
imageMso="HappyFace"
size="large"
onAction="Callback" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

Podemos a partir daqui alterar de acordo com o pretendido.

Podemos ainda adicionar imagens que serão depois utilizadas pelos diversos elementos. Para adicionar imagens podemos usar a opção InsertIcons e escolhemos as imagens que queremos. Neste exemplo foram utilizadas duas imagens com a resolução de 48x48.

 

accept

clock

accept

clock

Existem duas formas de definir a imagem, cujo nome será o nome da imagem adicionada:

Após pequenas alterações, podemos criar um simples exemplo, tendo em atenção que o ID não pode ser repetido. Atenção ainda à designação definida no atributo onAction que será o nome da macro e ao nome da imagem que foi definida.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="customTab" label="VBTuga">
<group id="customGroup" label="Custom Buttons">
<button id="customButton1"
label="Aceitar"
image="accept"
size="large"
onAction="btnAccept" />
<button id="customButton2"
label="Data/Hora"
image="clock"
size="large"
onAction="btnData" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

Na toolbar existe uma opção para validar o código XML. É importante executá-la sempre que se fazem alterações, antes de gravar, de modo a verifica se tudo está correcto, caso contrário, o novo friso não irá ficar visível.

image

Na última opção da pequena toolbar deste editor, existe um botão para gerar as chamadas (Generate Callbacks). Esta opção irá então gerar o código de deveremos colocar num módulo do nosso ficheiro de Excel.

image

Podemos agora copiar o código VBA e salvar as alterações.

Abrimos o ficheiro alterado no Excel e colocamos o código copiado num módulo. Neste exemplo, será apenas adicionada uma mensagem:

Sub btnAccept(control As IRibbonControl)
MsgBox "Aceitar usando o botão: " & control.ID, vbInformation
End Sub

Sub btnData(control As IRibbonControl)
MsgBox "Data e Hora: " & Now, vbInformation
End Sub

 
E o resultado final é o seguinte:

image

Este é apenas um pequeno artigo de introdução à personalização do friso no Excel, mas existem inúmeras alterações que podemos fazer e tornar desta forma os ficheiros mais profissionais/funcionais. É possível também usar diferentes controlos no friso, personalizar o Backstage View, criar menus de contexto (baseados na selecção), etc.

Algumas destas opções serão abordadas em próximos artigos.


Excel: Dicas de VBA - Criando Teclas de Atalho

Quando criamos código em VBA necessitamos de o executar e isso pode ser feito de diversas formas:

  • Através de Eventos
  • Através de funções personalizadas (UDF)
  • Através de um objecto que irá chamar o nosso código (quer esteja na worksheet ou na ribbon)
  • Através de teclas de atalho (shortcuts)

A possibilidade de utilizar determinadas teclas para chamar o código que criamos é muito prático e muito útil. Neste pequeno artigo iremos ver algumas formas e exemplos de como associar teclas de atalho a procedimentos e ver as principais diferenças entre os dois métodos disponíveis.

A maneira mais simples e mais usada pela maioria dos utilizadores, é seleccionando o separador Developer e escolhendo a opção Macros (ou pressionando as teclas Alt+F8)

New Picture

Na janela com as macros disponíveis, seleccionamos a macro pretendida e escolhemos a opção Options.

New Picture (2)

Irá abrir então uma nova janela onde podemos indicar que tecla de atalho iremos associar à macro seleccionada.

New Picture (1)

Neste exemplo, visível na imagem anterior, para chamar a Macro1, a combinação definida é Ctrl+a. Podemos indicar diversas letras (apenas letras) e se indicarmos uma letra em minúscula a combinação associada será Ctrl+a (por exemplo) e se indicarmos a letra em maiúscula a combinação associada será Ctrl+Shift+a.

Alguns exemplos:

a = Ctrl + a
u = Ctrl + u
A = Ctrl + Shift + a
U = Ctrl + Shift + u

Muito simples e muito prático!

No entanto isto limita-nos à utilização de determinadas combinações de teclas o que poderá ser, em alguns casos, um problema. Além disso não permite a atribuição dinâmica e a utilização de teclas especiais. Mas isto pode ser resolvido utilizando VBA.

Para atribuir uma tecla de atalho a uma macro, utilizamos o método Application.OnKey()

Application.OnKey “combinação”, “procedimento a associar”

Exemplo:

Application.OnKey "^a", "Macro1"

Neste caso é associada a combinação Ctrl+a à Macro1.

Mas vejamos a tabela de códigos de teclas especiais, que além das letras e números podem ser utilizados:

Tecla Código
BACKSPACE {BACKSPACE} ou {BS}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
CLEAR {CLEAR}
DELETE ou DEL {DELETE} ou {DEL}
DOWN ARROW {DOWN}
END {END}

ENTER (teclado numérico)

{ENTER}
ENTER ~ (tilde)
ESC {ESCAPE} ou {ESC}
HELP {HELP}
HOME {HOME}
INS {INSERT}
LEFT ARROW {LEFT}

NUM LOCK

{NUMLOCK}
PAGE DOWN {PGDN}

PAGE UP

{PGUP}
RETURN {RETURN}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
F1 a F15 {F1} até {F15}

E as teclas que são usadas para combinar:

Tecla Código
SHIFT + (adicção)
CTRL ^ (acento circunflexo)
ALT % (percentagem)

Assim, com a lista de códigos, podemos combinar e associar conjuntos de teclas a macros que tenhamos criado/gravado. Podemos utilizar o evento Workbook_Open(), que é executado quando o ficheiro de Excel é aberto, e definir no arranque as associações que queremos. Por exemplo:

Private Sub Workbook_Open()
Application.OnKey "+^{UP}", "MostraResultado"
Application.OnKey "%{INSERT}", "CopiaDados"
End Sub


Neste caso, a combinação Shift+Ctrl+Seta Cima chama o procedimento MostraResultado e a combinação Alt+Insert chama o procedimento CopiaDados.

No entanto estas atribuições funcionam se os procedimentos estiverem definidos num módulo, pois se estiverem definidos no Workbook ou em determinado Worksheet não irá funcionar. Nestes casos é necessário definir o caminho para eles, como é possível ver no exemplo seguinte:

Private Sub Workbook_Open()
Application.OnKey "+^{UP}", "ThisWorkbook.MostraResultado"
Application.OnKey "%{INSERT}", "Sheet1.CopiaDados"
End Sub

Aqui estamos a indicar que o procedimento MostraResultado está criado em ThisWorkbook e o procedimento CopiaDados está criado no código da Sheet1.

Mas atenção que determinadas combinações, especialmente usando a tecla Alt mais uma letra ou número, não funcionam, pois são usadas como teclas de atalho do próprio Excel. É importante testar sempre!

Muito importante também verificar se não estamos a utilizar uma combinação do próprio sistema operativo. Por exemplo, a combinação Ctrl+C (“^c”) serve para copiar informação(copy), assim como o Ctrl+V (“^v”) serve para colar informação (paste). Se atribuirmos estas combinações a diferentes procedimentos, é sobreposto o funcionamento normal (neste caso o copy/paste) e passará a chamar os procedimentos que definimos. Isto pode ser desagradável para muitos utilizadores.

Um exemplo muito simples para que testem rapidamente e entendam o problema de algumas associações. Coloquem o seguinte código num módulo e executem o procedimento AssociaTeclas.

Sub AssociaTeclas()
Application.OnKey "~", "Opps"
End Sub

Sub Opps()
MsgBox "Opps !!!"
End Sub


Agora, no Excel, sempre que carregarem na tecla Enter aparecerá uma mensagem com a informação “Opps !!!”.

Mas podemos também desabilitar as associações que definidas. Para tal, basta não definir o segundo argumento do método OnKey() que é opcional.

Sub DesabilitaTeclas()
Application.OnKey "~"
Application.OnKey "^v"
Application.OnKey "^v"
Application.OnKey "%{INSERT}"
Application.OnKey "+^{UP}"
End Sub


Após executar o procedimento DesabilitaTeclas as associações definidas deixariam de funcionar e, neste caso, o Enter voltaria a funcionar como antes, assim como o Ctrl+c e o Ctrl+v.

Neste pequeno artigo vimos como é simples atribuir teclas de atalho para chamar procedimentos, utilizando as opções já disponíveis e através de código, e alguns dos problemas que as associações podem causar.

É sem dúvida uma forma muito prática de chamar código VBA.


Feliz Aniversário Comunidade NetPonto! 2 Anos!!

No próximo dia 24 de Setembro de 2011 a Comunidade NetPonto comemora o seu segundo aniversário, e convida todos os seus membros (e futuros membros) a celebrar com uma edição especial. O evento será realizado no dia 24/09/2011 (próximo Sábado!), e para participar, precisa apenas efectuar o registo(grátis).

23ª Reunião Presencial da Comunidade NetPonto em Lisboa

Para esta ocasião especial decidimos realizar um evento num formato diferente das nossas reuniões tradicionais, e contaremos com quase quinze oradores diferentes, todos eles membros da Comunidade NetPonto e que decidiram partilhar connosco alguns temas que conhecem e gostam, em pequenas sessões de 15 a 30 minutos no máximo.

Agenda

09:45 - Recepção dos participantes
10:00 - Boas-vindas e Apresentação da Comunidade - Caio Proiete [MVP], Bruno Lopes
10:20 - What's New in Windows Azure Platform - Virgílio Esteves
10:40 - ASP .NET WebForms - TagMapping e a reciclagem / reutilização de aplicações - Nuno Gomes [MVP]
11:10 - FluentValidation: Build validation rules for your business objects - Luís Amorim
11:30 - Coffee-break gratuito (Bolos, salgados, sumos, etc...)
12:10 - Know your SQL Server: Dynamic Management Views (DMVs) - Vitor Pombeiro 12:30 - BizTalk Mapper: Como funcionam os mapas em BizTalk Server 2010 - Sandro Pereira [MVP]
13:00 - Quartz.NET - Agendamento de execução de tarefas - Vitor Paulino
13:20 - Cross-platform Mobile Development with C# - Andreia Gaita
13:40 - The Clean Coder: A Code of Conduct for Professional Programmers - João Manso
14:10 - Almoço gratuito (Pizzas!!!)
15:00 - Getting Async with C# 5.0 + Visual Studio 11 - Paulo Morgado [MVP]
15:20 - Criar uma aplicação Silverlight para Windows 8 - Paulo Aboim Pinto
15:40 - Introdução ao Exchange Web Services API - João Tito Livio [MVP]
16:00 - Formas de Herança em Javascript - Filipe Almeida
16:20 - Entity Framework "Code-First" - Vitor Tomaz
16:50 - Who needs Stored Procedures anyway? - Niko Neugebauer [MVP]
17:10 - Sorteio de prémios aos participantes

Nota: Com o apoio da Microsoft Portugal, haverá pizzas na hora do almoço e todos os participantes são convidados a aproveitar este momento de convívio, se desejarem.

Parabéns NetPonto !!!




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