VBA (Excel) - Criando um visualizador de imagens - III


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 segunda parte do artigo implementamos a carga das informações da planilha Plan1 no formulário UserForm incluindo a exibição da imagem. Vamos agora implementar a navegação pelas informações e imagens da planilha.

Implementando a navegação pelas 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 e a seguir na guia Ver Fotos, veremos o nosso formulário criado no artigo anterior.

Vamos incluir o código que irá permitir navegar pelas imagens existentes. Para isso vamos usar o evento Click dos botões de comando Imagem Anterior e Imagem Posterior.

Clique duas vezes sobre o botão de comando - << Imagem Anterior - para abrir o evento Click associado a esse controle.

Neste evento inclua o código abaixo:

Private Sub cmdAnterior_Click()
ActiveCell.Offset(-1, 0).Select
If ActiveCell.Row = 1 Then
   MsgBox "Primeira Linha"
   ActiveCell.Offset(1, 0).Select
   Exit Sub
Else
  Call PegaDadosPlanilha
  Call PegaValoresBotoes
  Call ObtemImagens
End If
End Sub

Para se mover para a imagem anterior na planilha basta usar o comando : ActiveCell.Offset(-1, 0).Select

Onde Offset(-1,0) move para célula anterior da planilha onde -1 refere-se ao valor da Linha(Row) e o 0 ao valor da coluna (Column) e assim retornamos uma linha na mesma coluna.

Depois verificamos se estamos na primeira linha (Row=1)  e em caso positivo exibimos uma mensagem de que estamos na primeira linha e usamos comando para posicionarmos nesta linha:  ActiveCell.Offset(1, 0).Select

Se não estivermos na primeira linha então chamamos as rotinas para pegar os dados da planilha, exibir os valores dos botões de rádio e exibir as imagens:

  Call PegaDadosPlanilha
  Call PegaValoresBotoes
  Call ObtemImagens

Agora clique duas vezes sobre o botão de comando - << Imagem Posterior - para abrir o evento Click associado a esse controle.

Neste evento inclua o código abaixo:

Private Sub cmdPosterior_Click()
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value = "" Then
   MsgBox "Última Linha"
   ActiveCell.Offset(-1, 0).Select
   Exit Sub
Else
  Call PegaDadosPlanilha
  Call PegaValoresBotoes
  Call ObtemImagens
End If
End Sub

A lógica usado no código acima é a mesma do código anterior a diferença é que nos movemos para a imagem posterior da planilha usando o comando: ActiveCell.Offset(1, 0).Select

Depois verificamos se estamos na última linha (Row="")  e em caso positivo exibimos uma mensagem de que estamos na última linha e usamos comando para nos posicionarmos nesta linha:  ActiveCell.Offset(-1, 0).Select

Agora já temos a funcionalidade completa.

Dessa forma o código completo do nosso UserForm até agora é o seguinte:

Private Sub cmdAnterior_Click()
ActiveCell.Offset(-1, 0).Select
If ActiveCell.Row = 1 Then
   MsgBox "Primeira Linha"
   ActiveCell.Offset(1, 0).Select
   Exit Sub
Else
  Call PegaDadosPlanilha
  Call PegaValoresBotoes
  Call ObtemImagens
End If
End Sub

Private Sub cmdPosterior_Click()
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value = "" Then
   MsgBox "Última Linha"
   ActiveCell.Offset(-1, 0).Select
   Exit Sub
Else
  Call PegaDadosPlanilha
  Call PegaValoresBotoes
  Call ObtemImagens
End If
End Sub
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
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

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

Private Sub UserForm_Initialize()
'============================================
'desabilita os botões para navegar e salvar
'============================================
cmdAnterior.Enabled = False
cmdPosterior.Enabled = False
cmdSalvarImagem.Enabled = False
'=======================================
' Inclui itens na caixa de combinação
'========================================
cbo_Camara.AddItem "Samsung GT-I9100"
cbo_Camara.AddItem "iPhone"
cbo_Camara.AddItem "Canon EOS"
cbo_Camara.AddItem "Samsung Galasy 5 S"
End Sub

Executando o UserForm  e clicando no botão para carregar informação da imagem  e realizando a navegação teremos o seguinte resultado:

Agora já podemos visualizar as informações e todas as imagens da planilha.

Assim concluímos a terceira parte deste artigo onde implementamos a navegação pelas informações e pelas imagens.

Na próxima parte do artigo iremos implementar a inclusão de uma nova imagem, onde o usuário poderá selecionar uma nova imagem.

E os que são de Cristo crucificaram a carne com as suas paixões e concupiscências.
Gálatas 5:24

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