VBA (Excel) - Criando um visualizador de imagens - II
Neste artigo vou mostrar como podemos automatizar o Microsoft Excel usando a linguagem VBA para realizar a seguinte tarefa :
|
Na primeira parte do artigo eu criei a interface com o usuário usando o Editor VBA e agora vamos implementar as funcionalidades para que a aplicação funcione como um visualizador de imagens.
Recuperando informações da planilha e exibindo imagens
Abra então o Excel 2007 e clique no menu Abrir e selecione a planilha que criamos no artigo anterior: VBA_VisualizadorImagens
Com a planilha Excel aberta pressione as teclas ALT+F11. Se preferir clique no menu Desenvolvedor e a seguir na opção Visual Basic.
Isso abrirá o Editor Visual Basic;
No menu Exibir clique em Project Explorer para visualizar os objetos do nosso projeto VBA.
Clicando no objeto UserForm1 veremos o nosso formulário criado no artigo anterior.
Agora clique com o botão direito do mouse sobre UserForm1 e a seguir em Exibir Código:
Na janela do Editor de Código, na parte superior, existem duas caixas de combinação.
Na primeira selecione UserForm e na segunda selecione Initialize. Isso criará um evento para inicializar o formulário chamado : Private Sub UserForm_Initialize() / End Sub
Vamos incluir o código neste evento para desabilitar os botões de comando para Salvar a imagem(cmdSalvarImagem) para navegar pelas imagens(cmdAnterior e cmdPosterior) e vamos incluir alguns itens no controle cbo_Camara para exibir no formulário;
Para isso digite o código abaixo neste evento :
Agora vamos retornar a exibir o nosso UserForm. Clique na guia Ver Fotos de forma a ver o formulário abaixo:
Clique duas vezes sobre o botão de comando - Carregar Informação da Imagem - para abrir o evento Click associado a esse controle.
Neste evento teremos que verificar se a célula ativa da planilha que contém os dados , ou seja, a planilha Plan1, possui um nome de imagem.
Se a célula ativa não estiver na coluna 1 ou na linha 1 ou estiver vazia então vamos selecionar a célula ativa como sendo a de linha 2 e coluna 1 (seria a célula A(2,1)):
Private Sub cmdCarregarImagem_Click()
'===================================================
'verifica se temos um nome de imagem na célula ativa
'====================================================
If ActiveCell.Column <> 1 Or ActiveCell.Row = 1 Or ActiveCell.Value = "" Then
Cells(2, 1).Select
End If
'=======================================================
' chama a rotina para pegar os dados da planilha Excel
'=======================================================
Call PegaDadosPlanilha
End Sub
|
Agora precisamos criar a rotina PegaDadosPlanilha no editor de código. Digite private sub PegaDadosPlanilha e tecle Enter para criar essa rotina.
A seguir inclua o código abaixo:
Private Sub PegaDadosPlanilha()
txtNomeArquivo.Text = ActiveCell.Value
txtData.Text = ActiveCell.Offset(, 1).Value
txtInformacao.Text = ActiveCell.Offset(, 2).Value
txtDimensoes.Text = ActiveCell.Offset(, 3).Value
txtTamanho.Text = ActiveCell.Offset(, 4).Value
txtCamera.Text = ActiveCell.Offset(, 5).Value
End Sub
|
Neste código estamos atribuindo os valores das células da planilha Plan1 para as caixas de texto do formulário iniciando com o valor da célula ativa (que é a célula A) - ActiveCell.Value e a seguir realizamos o deslocamento para a esquerda de uma posição para obter o valor da célula B - ActiveCell.Offset(, 1).Value , e continuamos até a célula F - ActiveCell.Offset(, 5).Value.
Assim o código completo do nosso UserForm até agora é o seguinte:
Executando o UserForm e clicando no botão para carregar informação da imagem iremos obter o seguinte resultado:
Precisamos agora obter os valores dos botões de rádio (radiobuttons) do formulário, e, para isso vamos chamar a rotina PegaValoresBotoes no evento Click do botão de comando para carregar as imagens.
Private Sub cmdCarregarImagem_Click()
'===================================================
'verifica se temos um nome de imagem na célula ativa
'====================================================
If ActiveCell.Column <> 1 Or ActiveCell.Row = 1 Or ActiveCell.Value = "" Then
Cells(2, 1).Select
End If
'=======================================================
' chama a rotina para pegar os dados da planilha Excel
'=======================================================
Call PegaDadosPlanilha
Call PegaValoresBotoes
End Sub
|
Agora vamos ter que criar uma rotina chamada PegaValoresBotoes, faça isso digitando o código abaixo:
Private Sub PegaValoresBotoes()
Dim ob As Variant
'pega o valor da célula G da planilha Plan1
ob = ActiveCell.Offset(, 6).Value
If ob = "SIM" Then
optFlash1.Value = True
Else
optFlash2.Value = True
End If
End Sub
|
Este código pega o valor da célula G (ActiveCell.Offset(, 6).Value) e verifica se o seu valor é SIM para ativar o respectivo botão de rádio do formulário ou não.
Carregando as Imagens da planilha
Agora temos que carregar as imagens definidas na planilha Plan1 no controle Image do nosso UserForm.
Para isso vamos invocar a rotina ObterImagens() no evento Click do botão de comando carregar imagens:
Private Sub cmdCarregarImagem_Click()
'===================================================
'verifica se temos um nome de imagem na célula ativa
'====================================================
If ActiveCell.Column <> 1 Or ActiveCell.Row = 1 Or ActiveCell.Value = "" Then
Cells(2, 1).Select
End If
'======================================================= ' chama a rotina para pegar os dados da planilha Excel '======================================================= Call PegaDadosPlanilha Call PegaValoresBotoes Call ObtemImagens() cmdAnterior.Enabled = True cmdPosterior.Enabled = True End Sub |
Observe que após carregar as imagens ativamos os botões de comando para permitir a navegação.
E a seguir criar a rotina ObtemImagens() com o seguinte código:
Private Sub ObtemImagens()
Dim DiretorioImagem As String
Dim CaminhoArquivo As String
Dim CaminhoCompletoImagem As String
Dim NomeImagem As String
'obtem o nome da imagem e o sua pasta
NomeImagem = ActiveCell.Value
DiretorioImagem = "c:\Dados\Excel\"
'obtem o caminho completo da imagem
CaminhoCompletoImagem = DiretorioImagem & NomeImagem
'carrega a imagem no controle
If Dir(CaminhoCompletoImagem) <> "" Then
PicImagem.Picture = LoadPicture(CaminhoCompletoImagem)
PicImagem.PictureSizeMode = 3
Else
MsgBox "Não foi possível carregar a imagem"
End If
End Sub
|
Vamos entender o código:
Ele obtém o nome da imagem da célula ativa : ActiveCell.Value.
Define o diretório onde as imagens estão armazenadas: "c:\Dados\Excel\"
Monta o caminho completo da imagem com seu nome : DiretorioImagem & NomeImagem
Verifica se o arquivo existe no diretório: If Dir(CaminhoCompletoImagem) <> ""
Carrega a imagem e define o modo de exibição no controle picImagem:
PicImagem.Picture
= LoadPicture(CaminhoCompletoImagem)
PicImagem.PictureSizeMode = 3
Agora executando o UserForm iremos obter o seguinte resultado após carregar a informação das imagens:
Nada mal...
Assim concluímos a segunda parte deste artigo onde implementamos a exibição das informações das imagens.
Na próxima parte do artigo iremos implementar navegação pelas informações e imagens.
Em
verdade, em verdade vos digo que vem a hora, e agora é, em que os mortos ouvirão
a voz do Filho de Deus, e os que a ouvirem viverão.
Porque, como o Pai tem a vida em si mesmo, assim deu também ao Filho ter a vida
em si mesmo;
E deu-lhe o poder de exercer o juízo, porque é o Filho do homem
João 5:25-27
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Visão geral do modelo de objeto Excel: http://msdn.microsoft.com/pt-br/library/wss56bz7.aspx