Immagine in funzione al risultato



  • 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