Arquivo da tag: Imagem

VBA – Carregando uma Imagem no UserForm

Está aí uma dúvida mais comum do que esperava. Carregar uma imagem num UserForm (ou planilha se preferir)? Siga os passos abaixo:

Abra o VBA (Alt+F11 com o Excel aberto)

Insira um UserForm:

Insira um UserForm
Insira um UserForm

Insira um controle de imagem no UserForm:

Insira um controle de imagem no UserForm
Insira um controle de imagem no UserForm

Arraste um botão de comando logo abaixo da Imagem:

Arraste um botão de comando logo abaixo da Imagem
Arraste um botão de comando logo abaixo da Imagem

Selecione o botão e na caixa de propriedades (clique em F4 se ela não estiver aparecendo), mude o texto do botão (Caption):

Selecione o botão e na caixa de propriedades mude o texto do botão
Selecione o botão e na caixa de propriedades mude o texto do botão

Clique duas vezes no botão para gerar o evento de Click:

Clique duas vezes no botão para gerar o evento de Click
Clique duas vezes no botão para gerar o evento de Click

E finalmente, o código:

Private Sub CommandButton1_Click()
    caminhoArquivo = Application.GetOpenFilename(FileFilter:="Image Files(*.jpg), *.jpg")
    Me.Image1.Picture = LoadPicture(caminhoArquivo)
End Sub

Execute o UserForm clicando em F5 e ao clicar no botão “Buscar Imagem”, você será apresentado a uma tela de escolha de arquivo como essa (já filtrando por arquivos de imagem. Reparei no filtro feito no código na linha 2):

Selecionando sua imagem
Selecionando sua imagem

Após selecionar a imagem, o resultado será parecido com este:

O resultado
O resultado

O mais atentos saberão que o código contém um bug. Se quiser saber a resposta, veja este link.

Arquivo: Carregar_Imagem_UserForm

Em vídeo!

Bom proveito!

VBA – Exportando uma planilha para uma imagem

Uma sacada de gênio! O colega Gary Student do fórum (ou quase isso) stackoverflow, em resposta à pergunta “Como exportar uma planilha de Excel para uma Imagem”, em tradução literal. Bem, o código dele foi quase que sublime! Veja abaixo o resultado e depois explico:

Sub PictureSaver()
    Dim ch As Chart
    Charts.Add
    Set ch = ActiveChart
    Sheets("Sheet4").Select
    Range("A1:D4").Select
    Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    ch.Select
    ch.Paste
    ch.Export Filename:="sample.jpg"
    Application.DisplayAlerts = False
        ch.Delete
    Application.DisplayAlerts = True
End Sub

Em suma, ele está “trapaceando” com o Excel para conseguir o feito. Ele adiciona uma planilha do tipo gráfico, seleciona uma área (células) de uma planilha, copia para a área de transferência, cola sobre o gráfico usando a função CopyPicture, que produz dentro o Excel uma imagem referente à área de selecionada e em seguida, exporta o conteúdo do gráfico, que agora contém uma figura da planilha para uma imagem. Por fim, ele excluir a planilha de gráfico para não deixar sujeira.

Saída de mestre! O post original é: https://stackoverflow.com/questions/21759417/how-can-i-export-an-excel-worksheet-as-image/21761619#21761619

Vídeo Dicas Rápidas – Inserindo imagens em comentários no Excel


Salve pessoal! Mais um vídeo da seção Dicas Rápidas! Desta vez, vamos explorar um recurso existente no Excel e estendê-lo em nosso favor. Comentários em células com imagens!

Aproveite para se inscrever no canal e ficar de olho em todas as novidades que são publicadas: http://youtube.com/tomamais

Bom proveito!

VBA – Carregando o controle Imagem através de uma URL

Mais uma do fórum.

Em alguns sistemas, é comum precisar carregar uma imagem do disco local para mostrá-la num formulário VBA. A tarefa é simples e comum de ser fazer aos programadores VBA:

Imagem.Picture = LoadPicture("CaminhoLocal")

Simples. Porém, o método LoadPicture não dá suporte a carregar imagens da internet. Ao tentar colocar no parâmetro filename o um endereço de internet, o código gera um erro.  Nas andanças da Internet, chegamos a um código que, sendo  uma adaptação do LoadPicture, faz o dito trabalho (mantive os comentários originais para garantir a autoria):

Option Explicit
 
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
    "URLDownloadToFileA" (ByVal pCaller As Long, _
    ByVal szURL As String, ByVal szFileName As String, _
    ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
 
Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
    Alias "DeleteUrlCacheEntryA" ( _
    ByVal lpszUrlName As String) As Long
 
Private Declare Function GetTempFileName Lib "kernel32" Alias _
    "GetTempFileNameA" (ByVal lpszPath As String, _
    ByVal lpPrefixString As String, ByVal wUnique As Long, _
    ByVal lpTempFileName As String) As Long
 
Private Declare Function SetFileAttributes Lib "kernel32" Alias _
    "SetFileAttributesA" (ByVal lpFileName As String, _
    ByVal dwFileAttributes As Long) As Long
 
 
Private Const ERROR_SUCCESS As Long = 0
Private Const BINDF_GETNEWESTVERSION As Long = &H10
Private Const INTERNET_FLAG_RELOAD As Long = &H80000000
Private Const FILE_ATTRIBUTE_TEMPORARY = &H100
 
 
Private Function DownloadFile(sSourceUrl As String, _
                              sLocalFile As String) As Boolean
 
  'Download the file. BINDF_GETNEWESTVERSION forces
  'the API to download from the specified source.
  'Passing 0& as dwReserved causes the locally-cached
  'copy to be downloaded, if available. If the API
  'returns ERROR_SUCCESS (0), DownloadFile returns True.
   DownloadFile = URLDownloadToFile(0&, _
                                    sSourceUrl, _
                                    sLocalFile, _
                                    BINDF_GETNEWESTVERSION, _
                                    0&) = ERROR_SUCCESS
 
End Function
 
Function LoadPictureUrl(sSourceUrl As String) As IPictureDisp
   Dim sLocalFile As String
 
   On Error GoTo err_h
 
   'Create a buffer
   sLocalFile = String(260, 0)
   'Get a temporary filename
   GetTempFileName "C:\", "KPD", 0, sLocalFile
   'Remove all the unnecessary chr$(0)'s
   sLocalFile = Left$(sLocalFile, InStr(1, sLocalFile, Chr$(0)) - 1)
   'Set the file attributes
   SetFileAttributes sLocalFile, FILE_ATTRIBUTE_TEMPORARY
 
  'Attempt to delete any cached version of the file.
   DeleteUrlCacheEntry sSourceUrl
 
   If DownloadFile(sSourceUrl, sLocalFile) = True Then
 
      'hfile = FreeFile
      'Open sLocalFile For Input As #hfile
      'Text1.Text = Input$(LOF(hfile), hfile)
      'Close #hfile
      Set LoadPictureUrl = LoadPicture(sLocalFile)
      Kill sLocalFile
   Else
      'Create a bogus error
      Err.Raise 999
   End If
 
   Exit Function
err_h:
   Set LoadPictureUrl = LoadPicture("")
End Function

Um exemplo de código bem simples que faz o trabalho seria:

Private Sub UserForm_Initialize()
    Me.Image1.Picture = LoadPictureUrl("http://www.tomasvasquez.com.br/images/Logo_Tomas.gif")
End Sub

Um viva a comunidade de VBA!

Referências

http://www.mrexcel.com/forum/showthread.php?t=116387