Rieccomi dopo parecchio tempo. Saluto Mauro Gamberini che in passato mi ha davvero dato un sacco di aiuto.
Vorrei migliorare il mio codice ma non so come intervenire.
In pratica il mio codice carica immagini dinamiche prese dalla cartella dove si trova il file xls. A seconda di certi valori che inserisco in apposite celle, vengono caricate delle immagini.
Vorrei adesso inserire un controllo delle immagini caricate. Vorrei in pratica verificare che le immagini inserite siano corrette. Per fare questo ho pensato che l'ideale sarebbe se riuscissi a sapere il nome del file che viene caricato. Quindi:
1: inserisco un valore in una cella (poniamo A4)
2: l'immagine viene caricata in A38
a questo punto vorrei avvenisse una terza cosa che non so come fare a realizzare:
3: viene inserito in un'altra cella il nome dell'immagine effettivamente caricata - in questo modo potrei verificare tramite altri step, che il programma abbia trovato l'immagine giusta, perché potrebbe non essere stata disponibile e nessuno però se ne sarebbe
accorto (perché semplicemente il programma non ha trovato l'immagine ed ha lasciato la precedente senza avvisarmi)
Copio il mio codice qui sotto e ringrazio anticipatamente per il supporto tecnico e morale.
Saluti, Alessio.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sPathName As String, sFileName As String, sPicName As String, sPicAddr As String
Dim LarghezzaInCentimetri As Single
If Intersect(Target, Range("a4,AM4,AN4")) Is Nothing Then Exit Sub
'--- il nome dell'immagine è composto così:
'--- 'Immagine' + indirizzo cella destinazione es: ImmagineA1, ImmagineAJ14
With Target
sPathName = ThisWorkbook.Path & ""
sPicName = CStr(.Value)
If Len(sPicName) Then
If .Address(0, 0) = "A4" Then
sPicAddr = "A38"
sFileName = sPathName & .Value & ".jpg"
sPicName = "Immagine" & sPicAddr
LarghezzaInCentimetri = 14
ElseIf .Address(0, 0) = "AM4" Then
sPicAddr = "A61"
sFileName = sPathName & .Value & ".jpg"
sPicName = "Immagine" & sPicAddr
LarghezzaInCentimetri = 8
ElseIf .Address(0, 0) = "AN4" Then
sPicAddr = "U61"
sFileName = sPathName & .Value & ".jpg"
sPicName = "Immagine" & sPicAddr
LarghezzaInCentimetri = 7
End If
End If
End With
'--- carica immagine, se esiste il file, nella posizione stabilita e ridimensionala
If Len(Dir(sFileName)) Then
On Error Resume Next
Me.Shapes(sPicName).Delete
On Error GoTo 0
With Me.Pictures.Insert(sFileName)
.Name = sPicName
.Top = Range(sPicAddr).Top
.Left = Range(sPicAddr).Left
.ShapeRange.LockAspectRatio = msoTrue
.Width = Application.CentimetersToPoints(LarghezzaInCentimetri)
End With
End If