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 :

  • Criar um visualizador de imagens

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# ??


José Carlos Macoratti