Excel Forum Per condividere esperienze su Microsoft Excel

Inserire immagine con VBA

  • Messaggi
  • OFFLINE
    alesc83
    Post: 2
    Registrato il: 07/05/2020
    Età: 40
    Utente Junior
    excel 2013
    00 07/05/2020 01:09
    Ciao a tutti.
    Con vba come posso fare in modo di inserire 2 immagini in due celle, inserendo il nome dell'immagine su un'altra cella?
    esempio pratico.
    Nella cella A1 scrivendo "auto", mi va a richiamare 2 immagini con il nome auto_front.png e auto_back.png posizionate in una cartella, che vengono poi inserite e visualizzate nella cella A2 e A3.

    Grazie
  • OFFLINE
    by sal
    Post: 5.902
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 07/05/2020 09:52
    Immagini
    Ciao alesc, ce ne sono molti post che parlano di immagini fai una ricerca e vedi se trovi quello che vuoi.

    Ciao By Sal [SM=x423051]

    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    alesc83
    Post: 2
    Registrato il: 07/05/2020
    Età: 40
    Utente Junior
    excel 2013
    00 07/05/2020 10:11
    Buongiorno by sal,
    si ho già fatto delle ricerche ma seguendo le indicazioni alcune non funzionano altre non fanno proprio al caso mio. Inoltre sono discussioni molto vecchie, ho pensato che non funzionavano perchè erano scritte su un excel più vecchio del mio.

    Grazie lo stesso, continuerò a cercare..

  • OFFLINE
    by sal
    Post: 5.904
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 07/05/2020 10:22
    Immagini
    Ciao intanto inserisci il tuo file con alcune immagini ed il risultato che vorresti anche a mano, almeno si ha una base di partenza, e chi vuole aiutarti lo potrà fare

    Ciao By Sal [SM=x423051]
    [Modificato da by sal 07/05/2020 10:23]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    alesc83
    Post: 3
    Registrato il: 07/05/2020
    Età: 40
    Utente Junior
    excel 2013
    00 07/05/2020 11:00
    Ciao,
    in allegato inserisco quello che vorrei ottenere.
    Cambiando la marca dell'auto, vorrei che la foto si aggiornasse e se l'immagine della marca non è nella cartella vorrei che scrivesse immagine non esistente.
    Ho inserito 2 modelli di esempio: xc40 e x1.

    Vorrei semplificarmi la vita al lavoro, ma purtroppo le macro e la programmazione non sono ancora in grado di gestirle.

    Grazie di tutto
  • OFFLINE
    dodo47
    Post: 2.784
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 07/05/2020 13:13
    ciao
    prova:
    Sub InsImg()
    ActiveSheet.Pictures.Delete
    Application.ScreenUpdating = False
    mPath = ActiveWorkbook.Path  'cartella con foto considera per default quella dove è il file
    If Range("A1") = "" Then Exit Sub
    tipo = Range("A1")
    mFront = tipo & "_front.jpg"
    mBack = tipo & "_back.jpg"
    
    mFoto = mFront
    Set Rng = Range("B1")
    
    For j = 1 To 2
        If Dir(mPath & "\" & mFoto) <> "" Then
            Rng.Select
            With ActiveSheet.Pictures.Insert(mPath & "\" & mFoto)
                .ShapeRange.LockAspectRatio = msoFalse
                mTop = ActiveCell.Top
                mLeft = ActiveCell.Left
                mHeight = Range(ActiveCell.Address & ":" & ActiveCell.Offset(6).Address).Height
                mWidth = Range(ActiveCell.Address & ":" & ActiveCell.Offset(, 2).Address).Width
                .Top = mTop
                .Left = mLeft
                .Width = mWidth
                .Height = mHeight
            End With
        Else
            If j = 1 Then
                Range("C1") = "Foto inesistente"
            Else
                Range("E1") = "Foto inesistente"
            End If
        End If
        Set Rng = Range("E1")
        mFoto = mBack
    Next j
    Application.ScreenUpdating = True
    Cancel = True
    End Sub


    Lascia le celle con le dimensioni naturali di excel, le due foto vengono adattate ciascuna per 3 colonne e 7 righe a partire rispettivamente da B1 e E1

    Se non vuoi ogni volta cliccare su un pulsante, potresti inserire il codice nell'evento change del foglio mirato alla cella A1.

    Sarebbe opportuno che tu inserissi le diachiarazioni delle variabili ed una gestione di errore.

    saluti





    [Modificato da dodo47 07/05/2020 13:16]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    by sal
    Post: 5.907
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 07/05/2020 13:20
    Immagini
    Ciao ecco il file, ho creato la cartella immagine dove vanno inserite le immagini

    nel file guarda il foglio Immagini come inserire i nomi delle immagini e delle auto.

    se inserisci altre dovrai allungare la convalida altrimenti non legge le auto.

    Ciao By Sal [SM=x423051]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    alesc83
    Post: 4
    Registrato il: 07/05/2020
    Età: 40
    Utente Junior
    excel 2013
    00 07/05/2020 18:25
    Grazie, entrambi sono funzionanti!
    Il codice di dodo47 mi sembra "più snello" se non fosse che ogni volta devo eseguire la macro; quello di By Sal, l'idea di avere un altro foglio con l'archivio di tutti i nomi non mi fa impazzire (ogni volta dovrei aggiornarla) per il resto è perfetto.

    Come posso inserire il codice nell'evento change del foglio in modo da non cliccare ogni volta un pulsante?

    Cosa intendi per gestione dell'errore?

    Comunque mille grazie ancora, sono già a buon punto!😀

  • OFFLINE
    dodo47
    Post: 2.787
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 07/05/2020 20:08
    Re:
    alesc83, 07/05/2020 18:25:

    ...
    Il codice di dodo47 .......... se non fosse che ogni volta devo eseguire la macro.....



    Ciao
    non a caso ti ho scritto:
    dodo47:

    Se non vuoi ogni volta cliccare su un pulsante, potresti inserire il codice nell'evento change del foglio mirato alla cella A1.

    .
    Che "tradotto" significa metti il codice nell'evento change del foglio, con le opportune modifiche e la macro si avvierà automaticamente ad ogni cambio di A1.

    saluti



    [Modificato da dodo47 08/05/2020 10:30]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    alesc83
    Post: 5
    Registrato il: 07/05/2020
    Età: 40
    Utente Junior
    excel 2013
    00 13/05/2020 18:47
    Esatto, ma è proprio quello che non so fare.
    Come faccio a mettere il codice nell'evento change del foglio?

    Ringrazio della tua disponibilità

  • ONLINE
    alfrimpa
    Post: 4.410
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 13/05/2020 18:50
    Guarda qui

    https://www.forumexcel.it/forum/threads/inserire-scrivere-una-macro-nel-modulo-del-foglio-di-lavoro.13862/

    Alfredo
  • OFFLINE
    alesc83
    Post: 6
    Registrato il: 07/05/2020
    Età: 40
    Utente Junior
    excel 2013
    00 13/05/2020 22:56
    Ottimo, seguendo le indicazioni ora funziona.
    Ora però, quando inserisco un codice non esistente mi va in errore excel e si chiude.
    Vi invio il nuovo .xlsm

    Grazie
  • ABCDEF@Excel
    00 14/05/2020 01:14
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
    '''
    codice dodo47
    '''
    End if
    End Sub
  • OFFLINE
    dodo47
    Post: 2.818
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 14/05/2020 09:55
    ciao
    oltre quanto suggerito da ABCD.... devi disabilitare gli eventi, ovvero ad inizio macro metti:
    Application.EnableEvents = False
    e alla fine
    Application.EnableEvents = True
    (cancella quel Cancel = True alla fine, deve essere un refuso

    Pertanto:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Application.EnableEvents = False
        ActiveSheet.Pictures.Delete
        Application.ScreenUpdating = False
    .......
    .......
    .......
        Next j
        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End If
    End Sub


    Qualora al posto della scritta "Foto inesistente" volessi l'immagine "Manca.jpg", devi modificare il codice.

    saluti




    [Modificato da dodo47 14/05/2020 10:42]
    Domenico
    Win 10 - Excel 2016
  • ABCDEF@Excel
    00 14/05/2020 11:16
    >>>Qualora al posto della scritta "Foto inesistente" volessi l'immagine "Manca.jpg"
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
    Application.EnableEvents = False
    ActiveSheet.Pictures.Delete
    Application.ScreenUpdating = False
    mPath = ActiveWorkbook.Path  'cartella con foto considera per default quella dove è il file
    If Range("A1") = "" Then Exit Sub
    tipo = Range("A1")
    mFront = tipo & "_front.jpg"
    mBack = tipo & "_back.jpg"
    mFoto = mFront
    Set Rng = Range("B1")
    For j = 1 To 2
        If Dir(mPath & "\" & mFoto) = "" Then
            mFoto = "Manca.jpg"
        End If
        If Dir(mPath & "\" & mFoto) <> "" Then
            Rng.Select
            With ActiveSheet.Pictures.Insert(mPath & "\" & mFoto)
                .ShapeRange.LockAspectRatio = msoFalse
                mTop = ActiveCell.Top
                mLeft = ActiveCell.Left
                mHeight = Range(ActiveCell.Address & ":" & ActiveCell.Offset(6).Address).Height
                mWidth = Range(ActiveCell.Address & ":" & ActiveCell.Offset(, 2).Address).Width
                .Top = mTop
                .Left = mLeft
                .Width = mWidth
                .Height = mHeight
            End With
        End If
        Set Rng = Range("E1")
        mFoto = mBack
    Next j
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    End If
    End Sub
    
  • OFFLINE
    alesc83
    Post: 7
    Registrato il: 07/05/2020
    Età: 40
    Utente Junior
    excel 2013
    00 15/05/2020 09:41
    Ottimo, perfetto!
    E'esattamente quello che cercavo.
    Siete stati super gentili, grazie mille a tutti