locked
Como abrir um arquivo jpg no excel via VBA? RRS feed

  • Pergunta

  • Oi, em meu formulário, gostaria de abrir uma imagem pelo visualizador de imagens do windows. Mais ou menos assim: o formulário possui um multipage com miniaturas da imagem. Ao dar um clique duplo (Private.... DblClick), a imagem original sera aberta, cujo endereço é salvo em uma variável CatalogoImagens(i), com i sendo o número da página no multipage -
    Acho que já tenho tudo, falta mesmo as funções para abrir o jpg pelo visualizador de imagens do windows.
    Encontrei alguns códigos na internet, porém específicos para abrir arquivos office ou .exe


    O código que encontrei abaixo funciona, porém abre no paint e minimizado:

    Function OpenImage(sFileFullPathAndName)
    On Error GoTo Error_Handler
    
    Shell Chr(34) & "C:\Windows\System32\mspaint.exe" & Chr(34) & " " & _
    Chr(34) & sFileFullPathAndName & Chr(34), 1
    
    If Err.Number = 0 Then Exit Function
    
    Error_Handler:
    MsgBox "erro"
    Exit Function
    End Function
    quinta-feira, 26 de maio de 2011 16:45

Respostas

  • Boa Tarde,

        O Visualizador de imagens do windows não é um executável, e sim uma dll, (shimgvw.dll)

    Espero ter ajudado em algo.

    Até

     

     

     


    Rafael Hoffmann
    • Marcado como Resposta Marlon Saveri sexta-feira, 27 de maio de 2011 12:51
    quinta-feira, 26 de maio de 2011 20:06
  • Olá Marlon,

    Basta usar o segundo parâmetro da função Shell com o valor 3, e não com 1, como você está usando:

    Shell(pathname[,windowstyle])

    vbHide                         0  A janela fica oculta e o foco é passado para a janela oculta. A constante vbHide não se aplica à plataformas Macintosh.

    vbNormalFocus                  1  A janela tem foco e é restaurada para seu tamanho e posição originais.

    vbMinimizedFocus               2  A janela é exibida como um ícone com foco.

    vbMaximizedFocus               3  A janela é maximizada com foco.

    vbNormalNoFocus                4  A janela é restaurada para seu tamanho e posição mais recentes. A janela atualmente ativa permanece ativa.

    vbMinimizedNoFocus             6  A janela é exibida como um ícone. A janela atualmente ativa permanece ativa

    Se quiser abrir no visualizador do Windows, use a API ShellExecute, descrita em: http://www.ambienteoffice.com.br/officevba/abrir_arquivos_programaticamente/


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    • Marcado como Resposta Marlon Saveri sexta-feira, 27 de maio de 2011 12:51
    sexta-feira, 27 de maio de 2011 12:03
    Moderador

Todas as Respostas

  • Boa Tarde,

        O Visualizador de imagens do windows não é um executável, e sim uma dll, (shimgvw.dll)

    Espero ter ajudado em algo.

    Até

     

     

     


    Rafael Hoffmann
    • Marcado como Resposta Marlon Saveri sexta-feira, 27 de maio de 2011 12:51
    quinta-feira, 26 de maio de 2011 20:06
  • Hum, mas tem como abrir um jpg através do dll a partir do vba?
    sexta-feira, 27 de maio de 2011 02:47
  • Olá Marlon,

    Basta usar o segundo parâmetro da função Shell com o valor 3, e não com 1, como você está usando:

    Shell(pathname[,windowstyle])

    vbHide                         0  A janela fica oculta e o foco é passado para a janela oculta. A constante vbHide não se aplica à plataformas Macintosh.

    vbNormalFocus                  1  A janela tem foco e é restaurada para seu tamanho e posição originais.

    vbMinimizedFocus               2  A janela é exibida como um ícone com foco.

    vbMaximizedFocus               3  A janela é maximizada com foco.

    vbNormalNoFocus                4  A janela é restaurada para seu tamanho e posição mais recentes. A janela atualmente ativa permanece ativa.

    vbMinimizedNoFocus             6  A janela é exibida como um ícone. A janela atualmente ativa permanece ativa

    Se quiser abrir no visualizador do Windows, use a API ShellExecute, descrita em: http://www.ambienteoffice.com.br/officevba/abrir_arquivos_programaticamente/


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    • Marcado como Resposta Marlon Saveri sexta-feira, 27 de maio de 2011 12:51
    sexta-feira, 27 de maio de 2011 12:03
    Moderador
  • Obrigado mais uma vez.

    Funcionou com

    Private Declare PtrSafe Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" _
    
      (ByVal hwnd As LongPtr, _
    
      ByVal lpOperation As String, _
    
      ByVal lpFile As String, _
    
      ByVal lpParameters As String, _
    
      ByVal lpDirectory As String, _
    
      ByVal nShowCmd As LongPtr) As LongPtr
    
    
    Sub TesteShellExecute()
    
     ShellExecute Application.hwnd, "open", catalogo(MultiPage1.value), vbNullString, "C:\", 3
    
    End Sub
    
    
    Perfeito.
    sexta-feira, 27 de maio de 2011 12:56
  • Eu utilizei o cód abaixo e abre qualquer tipo de arquivo,

    Eu usei em um botão do formulário que carrega o local do arquivo cadastrado.

    Private Sub CommandButtonABRIR_ARQUIVO_Click()

    Dim myShell As Object
    Dim Arquivo As String

    Arquivo = CadastrodeCertificado_Consulta.textCertificado.Text
    If Arquivo = "" Then
    MsgBox "Não há arquivo cadastrado", vbOKOnly, "Erro"
    GoTo a:
    End If
    Set myShell = CreateObject("WScript.Shell")
    myShell.Run Arquivo

    :a End Sub

    quarta-feira, 2 de julho de 2014 16:17