| | 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 | |
Ciao alesc, ce ne sono molti post che parlano di immagini fai una ricerca e vedi se trovi quello che vuoi.
Ciao By Sal
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 | |
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 [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 | |
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 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 | |
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 |
|
|