Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Inserire immagine con VBA

Ultimo Aggiornamento: 15/05/2020 09:41
Post: 2
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
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
Post: 5.902
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
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
Post: 2
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
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..

Post: 5.904
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
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
Post: 3
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
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
Post: 2.784
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 5.907
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
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
Post: 4
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
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!😀

Post: 2.787
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 5
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
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à

Post: 4.410
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
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
Post: 6
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
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
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
Post: 2.818
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
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
Post: 7
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
15/05/2020 09:41

Ottimo, perfetto!
E'esattamente quello che cercavo.
Siete stati super gentili, grazie mille a tutti
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 12:49. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com