Notifications
Clear all

Caminho da Imagem Variável

11 Posts
2 Usuários
0 Reactions
3,106 Visualizações
(@eltonpaulo)
Posts: 31
Eminent Member
Topic starter
 

Bem, tentei de várias formas e não consigo chegar a uma resposta, vamos lá.

Tenho um formulário de cadastro de membros que tem a função de selecionar uma imagem e salvar o seu caminho em uma célula de uma planilha. OK, ela faz isso.

Depois, na aba "FICHA", tem um controle ActiveX que puxa a imagem conforme o código digitado (tem um segundo problema que já abri outro tópico para resolver, mas não atrapalha em nada a resolução deste aqui). Ela puxa tudo corretamente.

PROBLEMA: Preciso que meu VBA por inteiro entenda que é necessário um diretório para que as imagens não fiquem no padrão C:userjoaoimg.jpg, tendo em vista que se eu mudar o arquivo xmls de computador já era planilha. Resumindo, preciso que o caminho seja a pasta "FOTOS" que fica na Raiz do Arquivo.

Como sou meio "fracão" em VBA, preciso da ajuda de vocês mais uma vez. Obrigado!

Segue um exemplo. (Para cadastrar, digite ao menos um nome e selecione uma imagem em JPG).

MUI GRATO!!!

 
Postado : 14/07/2017 10:47 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

elton, existe algumas formas de se resolver isto, mas depende de saber o seguinte.

Qdo diz mudar o arquivo de pc, este outro pc tambem tem a pasta FOTO por padrão ?

Uma dica, seria efetuar antes a verificação se a pasta existe e depois lincar com o nome da foto.

Se pesquisar por "Set caminho" ou "Path" encontrará alguns exemplos, de uma olhada no tópico abaixo e veja se consegue ajustar.
viewtopic.php?f=10&t=7885

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 15/07/2017 5:39 am
(@eltonpaulo)
Posts: 31
Eminent Member
Topic starter
 

Obrigado pelo retorno.

Sim, a pasta Foto terá em todos. Ex. Meu_Arquivo.xlms está na pasta "CADASTRO" e as fotos estão em "CADASTROFOTOS"

 
Postado : 15/07/2017 9:37 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

elton, se entendi, e para que funcione corretamente verifique se o endereço da pasta está correto conforme na rotina.

Para esta rotina, o caminho da Pasta está definido diretamente na linha :

pasta = "C:UsersCADASTROFOTOS"

E em vez de utilizar o caminho na Celula em "H1", na mesma tem de estar somente o nome da foto, sem a extensão "JPG",

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim pasta
    Dim NomeDaFoto
    Dim CaminhoCompleto
    Dim imgfoto11
    Dim sfoto As String
    
    'Lembrando que target é a referência para a célula modificada
    
    'verifica se a célula que contém o número do cliente foi modificada
    'Nesse caso é a célula B1
    If Target.Row = 3 And Target.Column = 3 Then
    
    'Carrega imagem de acordo com o caminho indicado na procura vertical
    'A função LoadPicture carrega um caminho de imagem na propriedade Picture
    'O seu uso é necessário
    On Error Resume Next
    'Caminho da Pasta Fotos
    pasta = "C:UsersCADASTROFOTOS"
    
    'Nome da Foto sem a extensão
    NomeDaFoto = Range("H1").Value
    
    'Montamos o cainho completo
    CaminhoCompleto = pasta & NomeDaFoto & ".jpg"

    On Error Resume Next
    sfoto = LoadPicture(CaminhoCompleto)
    
    If sfoto = "" Then
            
            'Nesta linha, se o caminho ou a foto não existirem
            'carrega a foto padrão e sai da rotina
            'Lembre-se de ajustar este caminho e nome da foto
            imgfoto11.Picture = LoadPicture("Caminho da foto Padrao")
            
        Exit Sub
        
        Else
            Sheets("FICHA").imgfoto11.Picture = LoadPicture(CaminhoCompleto)
        End If
    End If
    
End Sub

Faça os testes e qq duvida retorne.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 15/07/2017 10:15 pm
(@eltonpaulo)
Posts: 31
Eminent Member
Topic starter
 

Acho que não consegui me expressar bem, desculpe.

Preciso que funcione Mais ou menos como a busca de diretórios do HTML.
O Excel a grosso modo busca o caminho como C:userplanilhafotos, da forma que você fez.

Preciso que busque a informação em fotos, simplesmente. Não posso ter uma unidade C:, pois se eu quiser abrir em um pendrive não irei conseguir, ou talvez mudar ele para a nuvem ou simplesmente para outra unidade. Esse é meu dilema, até porque todo a minha planilha salva ou retorna os dados das fotos de uma busca em procv em um banco de pelo menos 400 fotos (Nome da Pessoa X Foto), ou seja, preciso que o caminho da imagem não tenha esse padrão C:userfoto.jpg, etc. Preciso colocar na célula apenas 01.jpg, 02.jpg, 03.jpg e que o excel saiba que estas imagens estão no diretório "fotos", uma pasta acima de onde está o arquivo em xlms.

Se tiver um tempinho, pode dar uma olhada no anexo e ver mais ou menos como estão se comportando. Grato pelas tentativas.

 
Postado : 15/07/2017 10:22 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Acredito que aonde você for colocar o arquivo, nesta pasta exista a pasta de nome FOTOS, então, terá de capturar o caminho do arquivo e depois linkar a pasta fotos, de uma olhada no tópico abaixo, deve ajudar:

viewtopic.php?f=10&t=2324

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 15/07/2017 10:45 pm
(@eltonpaulo)
Posts: 31
Eminent Member
Topic starter
 

O máximo que consegui foi isso, mas sem chance de funcionar

Tentei assim, mas não deu

Sub abre()

Worksheet.Open ThisWorksheet.Path & "fotos"

End Sub


Private Sub Worksheet_Change(ByVal Target As Range)



Dim sfoto As String

If Target.Row = 3 And Target.Column = 3 Then


On Error Resume Next
sfoto = LoadPicture(Range("H1").Value)

If sfoto = "" Then

imgfoto11.Picture = LoadPicture("02.jpg")


Exit Sub

Else
sfoto = Range("H1").Value
imgfoto11.Picture = LoadPicture(sfoto)
End If

End If

End Sub
 
Postado : 17/07/2017 12:19 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

elton, pelo que me lembro do seu modelo, voce tem o "Caminho" na celula "H1", então tem de alterar tambem a linha :

sfoto = LoadPicture(Range("H1").Value)

Isto você pode fazer através de uma function, faça um teste com a abaixo, só para ver se o caminho está correto antes :
Cole em um módulo:

Function Caminho_Fotos() As String
    
    Caminho_Fotos = ThisWorkbook.Path & "Fotos"
    MsgBox (Caminho_Fotos)

End Function

Em uma celula escreva : =Caminho_Fotos()

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/07/2017 5:29 am
(@eltonpaulo)
Posts: 31
Eminent Member
Topic starter
 

puxou o caminho sim. Devo trabalhar com esse "caminho_fotos" então?

 
Postado : 18/07/2017 8:24 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

puxou o caminho sim. Devo trabalhar com esse "caminho_fotos" então?

Esta Function deve ser usada se for continuar a pegar o caminho na celula, ela serve para atualizar a celula.

Se quer sem utilizar a function, da forma que citei anteriormente, em vez do caminho na celula, é só usar a linha "

pasta = ThisWorkbook.Path & "fotos"

", e em "H1" sómente o nome da figura, acredito que a rotina abaixo irá servir :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim pasta
    Dim NomeDaFoto
    Dim CaminhoCompleto
    Dim imgfoto11
    Dim sfoto As String
    
    'Lembrando que target é a referência para a célula modificada
    
    'verifica se a célula que contém o número do cliente foi modificada
    'Nesse caso é a célula B1
    If Target.Row = 3 And Target.Column = 3 Then
    
    'Limpa a Imagem anterior
    Sheets("FICHA").imgfoto11.Picture = LoadPicture()
    
    'Carrega imagem de acordo com o caminho indicado na procura vertical
    'A função LoadPicture carrega um caminho de imagem na propriedade Picture
    'O seu uso é necessário
    On Error Resume Next
    'Caminho da Pasta Fotos
    
    'Captura o caminho em que o "xlsm" está e concatena com a pasta "fotos"
    pasta = ThisWorkbook.Path & "fotos"
    
    'Nome da Foto sem a extensão
    NomeDaFoto = Range("H1").Value
    
    'Montamos o cainho completo
    CaminhoCompleto = pasta & NomeDaFoto & ".jpg"

    On Error Resume Next
    sfoto = LoadPicture(CaminhoCompleto)
    
    If sfoto = "" Then
            
            'Nesta linha, se o caminho ou a foto não existirem
            'carrega a foto padrão e sai da rotina
            'Lembre-se de ajustar este caminho e nome da foto
            imgfoto11.Picture = LoadPicture("Caminho da foto Padrao")
            
        Exit Sub
        
        Else
            Sheets("FICHA").imgfoto11.Picture = LoadPicture(CaminhoCompleto)
        End If
    End If
    
End Sub

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/07/2017 10:43 am
(@eltonpaulo)
Posts: 31
Eminent Member
Topic starter
 

Muitíssimo Obrigado!!!! Funcionou perfeitamente. Você é o cara!1!!

 
Postado : 19/07/2017 11:45 am