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


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 quarta parte do artigo implementamos a seleção e inclusão de uma nova imagem pelo usuário.

Neste artigo vamos implementar a funcionalidade do botão Salvar Detalhes da Imagem (cmdSalvarImagem) que irá fazer o seguinte:

- Pegar a última linha da planilha com dados e vai para a próxima linha vazia;
- Verificar se as informações da imagem inseridas nas caixas de texto estão completas;
- Salvar a imagem selecionada na pasta de destino
- Transferir as informações para a planilha;

Transferindo os dados e Salvando a imagem selecionada em uma pasta de destino

Após selecionar uma nova imagem e entrar com suas informações, o usuário deverá clicar no botão de comando - Salvar detalhes da imagem.

Nesse processo a imagem deverá ser salva e as informações deverão ser transferidas do formulário para a planilha Excel.

Para fazer isso, a primeira coisa que devemos fazer é selecionar a última célula da planilha que possui dados:

Por exemplo, na planilha acima a próxima célula vazia seria a linha 8 iniciando na célula A8.

Então definimos o código abaixo que primeiro seleciona a última célula da planilha com dados e incrementa uma linha para ir para a próxima célula vazia:

UltimaLinha = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Cells(UltimaLinha + 1, 1).Select

O número da linha com dados será armazenado na variável UltimaLinha, e adicionamos uma linha a esta linha para ir para linha onde os dados serão inseridos.

A seguir basta verificar se as informações nas caixas de texto foram digitadas, transferir os dados para a planilha e salvar a imagem na pasta de destino.

Vamos então implementar isso no evento Click do botão Salvar Detalhes da Imagem

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.

Após isso clique no objeto UserForm1 para exibir o UserForm e a seguir clique na guia Adicionar Foto, para ver o nosso formulário criado:

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

Neste evento inclua o código abaixo :

Private Sub cmdSalvarImagem_Click()
On Error GoTo Trata_Erro
'pega a última linha da planilha e seleciona
UltimaLinha = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Cells(UltimaLinha + 1, 1).Select
'verifica se existe uma caixa de texto sem dados
Dim ExisteCaixaTextoVazia As Boolean
ExisteCaixaTextoVazia = VerificaSeExisteCaixaTextoVazia()
If ExisteCaixaTextoVazia = True Then
   MsgBox "Uma caixa de texto vazia foi encontrada, informe todas as informações"
   Exit Sub
End If
'verifica se a combo esta com dados
If cbo_Camera.Text = "Camera" Or cbo_Camera.Text = "" Then
   MsgBox "Nenhuma câmera foi selecionada..."
   Exit Sub
End If
'verifica se os radiobuttons foram marcados
If opt_Flash1.Value = False And opt_Flash2.Value = False Then
   MsgBox "Nenhuma opção para Flash foi marcada"
   Exit Sub
End If
'define as variáveis para a pasta de origem da imagem e a pasta de destino
Dim DiretorioOrigemImagem As String
Dim DiretorioDestinoImagem As String
'define os locais da pasta de origem e destino da imagem
DiretorioDestinoImagem = "c:\Dados\Excel\"
DiretorioOrigemImagem = copiaImagem
'verifica se a pasta de origem é diferente da pasta de destino
If DiretorioOrigemImagem <> DiretorioDestinoImagem Then   
   'copia a imagem selecionada para a pasta de destino
    FileCopy DiretorioOrigemImagem, DiretorioDestinoImagem & txt_NomeArquivo.Text
   
    'transfere os dados do formulário para a planilha
    ActiveCell.Value = txt_NomeArquivo.Text
    ActiveCell.Offset(, 1).Value = txt_Data.Text
    ActiveCell.Offset(, 2).Value = txt_Informacao.Text
    ActiveCell.Offset(, 3).Value = txt_Dimensoes.Text
    ActiveCell.Offset(, 4).Value = txt_Tamanho.Text
    
    'define os valores dos radiobuttons
    If opt_Flash1.Value = True Then
       ActiveCell.Offset(, 6).Value = "Sim"
    ElseIf opt_Flash2.Value = True Then
       ActiveCell.Offset(, 6).Value = "Não"
    End If   
   'aviso o usuário que deu tudo certo
    MsgBox "Informações da imagem e nova imagem salva com sucesso na pasta de imagens"
End If
Exit Sub
'trata erros
Trata_Erro:
    MsgBox " Ocorreu um erro : " & Err.Description
End Sub

Vamos entender o código acima :

Temos o tratamento de erros neste código usando  comando  : On Error GoTo Trata_Erro

Onde a rotina Trata_Erro irá exibir as mensagens de erros que ocorrem na execução do código.

Abaixo temos o código da rotina Trata_Erro:

Trata_Erro:
    MsgBox " Ocorreu um erro : " & Err.Description

1- Obtemos a última linha da planilha com dados e adicionamos uma linha para ir para a próxima linha onde iremos inserir os dados

UltimaLinha = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Cells(UltimaLinha + 1, 1).Select

2- Verificamos se as informações inseridas pelo usuário nas caixas de texto estão todas completas:

Dim ExisteCaixaTextoVazia As Boolean
ExisteCaixaTextoVazia = VerificaSeExisteCaixaTextoVazia()
If ExisteCaixaTextoVazia = True Then
   MsgBox "Uma caixa de texto vazia foi encontrada, informe todas as informações"
   Exit Sub
End If

Neste código criamos a rotina VerificaSeExisteCaixaTextoVazia() que retorna True se existir uma caixa de texto vazia.

Private Function VerificaSeExisteCaixaTextoVazia() As Boolean
ExisteCaixaTextoVazia = False
If txt_NomeArquivo.Text = "" Then
    ExisteCaixaTextoVazia = True
    Exit Function
End If
If txt_Data.Text = "" Then
    ExisteCaixaTextoVazia = True
    Exit Function
End If
If txt_Tamanho.Text = "" Then
    ExisteCaixaTextoVazia = True
    Exit Function
End If
If txt_Dimensoes.Text = "" Then
    ExisteCaixaTextoVazia = True
    Exit Function
End If
End Function

3- Verificamos as informações na combobox e nos radiobuttons

If cbo_Camera.Text = "Camera" Or cbo_Camera.Text = "" Then
    MsgBox "Nenhuma câmera foi selecionada..."
    Exit Sub
End If

If opt_Flash1.Value = False And opt_Flash2.Value = False Then
    MsgBox "Nenhuma opção para Flash foi marcada"
    Exit Sub
End If


4- Definimos o local de origem e de destino da imagem e usamos o comando FileCopy para copiar a imagem da pasta de origem para a pasta de destino:

Dim DiretorioOrigemImagem As String
Dim DiretorioDestinoImagem As String
DiretorioDestinoImagem = "c:\Dados\Excel\"
DiretorioOrigemImagem = copiaImagem
If DiretorioOrigemImagem <> DiretorioDestinoImagem Then   
    FileCopy DiretorioOrigemImagem, DiretorioDestinoImagem & txt_NomeArquivo.Text

5- A seguir transferimos as informações para a planilha, atualizamos os valores dos radiobuttons e avisamos o usuário:

ActiveCell.Value = txt_NomeArquivo.Text
ActiveCell.Offset(, 1).Value = txt_Data.Text
ActiveCell.Offset(, 2).Value = txt_Informacao.Text
ActiveCell.Offset(, 3).Value = txt_Dimensoes.Text
ActiveCell.Offset(, 4).Value = txt_Tamanho.Text

If opt_Flash1.Value = True Then
ActiveCell.Offset(, 6).Value = "Sim"
ElseIf opt_Flash2.Value = True Then
ActiveCell.Offset(, 6).Value = "Não"
End If

MsgBox "Informações da imagem e nova imagem salva com sucesso na pasta de imagens"

End If

Nota: A pasta de destino das imagens foi definida como sendo : c:\dados\Excel mas você pode alterar conforme o seu critério.

O comando FileCopy possui a seguinte sintaxe:

FileCopy source, destination

Onde :

source - é o local de origem do arquivo
destination - é o local de destino do arquivo

Obs: Se o arquivo de origem estiver aberto vai ocorrer um erro durante a cópia.

Executando o UserForm  e selecionando uma imagem e digitando suas informações nas caixas de texto teremos o seguinte resultado:

Clicando no botão para Salvar detalhes da Imagem veremos as informações na planilha e caixa de mensagem informando que a imagem foi salva com sucesso:

Abrindo a pasta de destino das imagens (c:\Dados\Excel) iremos constatar que o arquivo imagem foi salvo realmente:

É assim concluímos o nosso visualizador de imagens e suas informações com a ajuda do Excel e do VBA.

Você pode incrementar o projeto de diversas formas e adaptá-lo para suas necessidades.

Pegue a planilha aqui : VBA_VisualizadorImagens.zip

Dando graças ao Pai que nos fez idôneos para participar da herança dos santos na luz;
O qual nos tirou da potestade das trevas, e nos transportou para o reino do Filho do seu amor;
Colossenses 1:12,13

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 


José Carlos Macoratti