Immagine in funzione al risultato
Hai un problema con Excel? 
Immagine in funzione al risultato
di Luca4Excel (utente non iscritto) data: 06/05/2014 16:58:58
Ciao a tutti,
mi accosto ora al VBA nel tentativo di generare una funzione non prevista con le semplici formule di Excel.
Vi prego anticipatamente di portare pazienza se non comprenderò immediatamente quello che mi scriverete in risposta.
Premetto che prima di scrivere ho provato a documentarmi per tutta la mattinata, senza però riuscire a trovare la soluzione definitiva.
Ecco la richiesta.
Vorrei creare una macro che mi esegua una istruzione per riportare in una determinata posizione del foglio una certa immagine caricata in una specifica cartella.
Ovvero, se nella cella A1 è presente un valore X, allora visualizzo nella cella A10 l'immagine X.jgp.
Se invece la cella A1 riporta il valore Y, allora visualizzo nella cella A10 l'immagine Y.jpg.
Quello che sono riuscito a fare fino ad ora lo riporto qui sotto.
Ciò che non riesco a fare è:
- determinare la posizione dell'immagine nel foglio
- evitare che le immagini si sovrappongono ad ogni esecuzione della macro
- mi piacerebbe eseguire automaticamente la macro ogni qualvolta variasse il valore di A1
GRAZIE 1000 a chiunque vorrà aiutarmi!
Luca.
Public Sub Prova()
Dim sImmagine As String
Dim sPath As String
Dim c As Range
Dim rng As Range
Dim sh As Worksheet
Dim lLarghezza As Long
sPath = "C:Documents and SettingsutenteDesktopOggetti"
Set sh = Worksheets("Foglio1")
With sh
Set rng = .Range("a1")
For Each c In rng
If c.Value <> "" Then
sImmagine = ""
sImmagine = sPath & c.Value & ".jpg"
If Dir(sImmagine) <> "" Then
c.Select
.Pictures.Insert(sImmagine).Select
Selection.ShapeRange.Width = c.Width
End If
End If
Next
End With
Set c = Nothing
Set rng = Nothing
Set sh = Nothing
End Sub
|
di Luca4Excel (utente non iscritto) data: 08/05/2014 22:22:10
up...
di Raffaele_53 (utente non iscritto) data: 09/05/2014 20:45:53
Riletto (con le foto sono scarso).
Mi domandavo se era solo per 5/10 foto oppure centinaia di foto.
Come pensi di visualizzarle? In una cella oppure in base alle dimensioni che prendesse lo spazio di 10/20 celle?
Ex bandierine in una cella OK, ma per visualizzare bene una foto ci vuole una dimensione adeguata.
Ps. i pid e le dimessioni delle foto devono essere adeguati con un certo valore, oppure vengono distorte.
di Textomb data: 09/05/2014 22:30:33
La richiesta è un pò carente di informazioni. Comunque ci provo lo stesso...
Questa macro va inserita all'interno del foglio su cui vuoi effettuare questo controllo.
ciao
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dRng As Range
Dim Sh As Worksheet
Dim sPath As String
Dim sImmagine As String
sPath = "C:Documents and SettingsutenteDesktopOggetti"
sImmagine = sPath & [a1] & ".jpg"
Set Sh = ActiveSheet
Set dRng = Range("a10")
With Sh
On Error Resume Next
.Shapes(1).Delete
On Error GoTo 0
On Error Resume Next
.Shapes.AddPicture sImmagine, True, False, Left:=dRng.Left, Top:=dRng.Top, Width:=dRng.Width, Height:=100
If Err.Number <> 0 Then
MsgBox "Immagine non trovata!", vbCritical: Err.Number = 0
End If
End With
Set Sh = Nothing
Set dRng = Nothing
End Sub
|
di Luca4Excel (utente non iscritto) data: 13/05/2014 09:14:46
Innanzi tutto grazie per le risposte .
Ho modificato il mio codice utilizzando la soluzione di Textomb ed il risultato è ottimo
L'immagine si posiziona correttamente ed i risultati non si sovrappongono.
Rimane aperta ancora la questione dell'esecuzione automatica della macro al variare del contenuto nella casella A1.
Esiste un modo per farlo?
Grazie ancora,
Luca.
di Raffaele_53 (utente non iscritto) data: 13/05/2014 21:47:31
>>>Rimane aperta ancora la questione dell'esecuzione automatica della macro al variare del contenuto nella casella A1.
>>>Sub Worksheet_Change(ByVal Target As Range) - OK perfetto
>>>sImmagine = sPath & [a1] & ".jpg" - OK per la cella A1
>>>sPath = "C:Documents and SettingsutenteDesktopOggetti"-->(per XP), per inferiori altro indirizzo.
sPath = "C:UsersXXXXXXXXXXXDesktopOggetti" 'per Windows superiori a XP
Vuoi Approfondire?