Immagini Combobox



  • Immagini Combobox
    di Pietro (utente non iscritto) data: 07/05/2013 22:42:19

    Ciao ragazzi,
    vorrei sapere come si fa ad apparire una immagine a seconda della scelta della combobox.

    Se in combobox compare "Pippo", nella useform deve uscire il disegno di Pippo, se compare Topolino, deve uscire Topolino.
    Grazie mille.



  • di Baz data: 08/05/2013 08:26:10

    Ciao,
    non hai detto dove risiede la tua ComboBox se in una UserForm o in un foglio; e dove desideri la tua immagine ... poi vediamo

    Hai già scritto del codice vba?



  • di totygno71 data: 08/05/2013 08:35:50

    Io ho supposto che la combo sia in una userfom e che voglia l'immagine nella stessa userform
    quindi farebbi così:

     
    Private Sub ComboBox1_Change()
    
        If ComboBox1.Value = "pippo" Then
            Image1.Picture = LoadPicture("C:DocumentiImmaginipippo.jpg")
        Else
            Image1.Picture = LoadPicture("C:DocumentiImmaginipluto.jpg")
        End If
    
    End Sub
    



  • di Vecchio Frac data: 08/05/2013 09:09:54

    cit. " e dove desideri la tua immagine"
    ---> Pietro dice: "Se in combobox compare "Pippo", nella userform deve uscire il disegno di Pippo".
    Quindi propongo una soluzione come segue.
    Esiste una cartella di immagini, le immagini hanno un nome predefinito, questi nomi vengono caricati nella combo del form all'avvio (si potrebbero anche far risiedere in un foglio), quindi i rispettivi i file vengono iniettati nel controllo immagine del form appena cambia la scelta nella combo.

    Tempo fa l'amico r aveva postato sul suo sito un'interessante soluzione che prevedeva immagini statiche nel un foglio, definiva i nomi e li leggeva dinamicamente associandoli ad un'immagine appena si sceglieva una voce da una combo residente sul foglio. Mi piacerebbe ritrovare il file, spero di riuscirci, era proprio interessante.
     
    Option Explicit
    
    Private Sub UserForm_Initialize()
    Dim v As Variant
        For Each v In Array("pippo", "pluto", "topolino", "paperino", "gastone", "nonna papera")
            ComboBox1.AddItem v
        Next
    End Sub
    
    Private Sub ComboBox1_Change()
        Image1.Picture = LoadPicture("C:cartella immagini" & ComboBox1 & ".jpg")
    End Sub





  • Immagini Combobox
    di Pietro (utente non iscritto) data: 08/05/2013 20:08:46

    Grazie vecchio Frac, proprio quello di cui avevo bisogno. Grazie anche a voi tutti.



  • di Vecchio Frac data: 08/05/2013 21:37:10

    A parziale consolazione della mia semidemenza senile :)
    Ho ritrovato quel file di cui parlavo qualche post fa, ma è sostanzialmente identico alla soluzione che ho già proposto :)
    Sarei però curioso di sapere se Baz aveva in mente un'idea diversa.




  • Immagini Combobox
    di Pietro (utente non iscritto) data: 08/05/2013 21:45:48

    c'è pero' una cosa che volevo chiederti sempre per quanto riguarda questa discussione.
    La combobox sta nella userform.
    Quando clicco su Ok l'immagine presente (scelta in base alla descrizione della combobox) deve essere inserita in una cella del foglio excel.
    Come posso fare?



  • di cristian (utente non iscritto) data: 08/05/2013 22:16:02

    ciao a tutti
    scusate se mi intrometto ero curioso di provare il codice, e non mi funziona sicuramente ho sbagliato qualche cosa nella creazione della userform, l'immagine dove dovrebbe apparire, in un box apposito della userform,
    mi dà errore in questo punto:
    ComboBox1.AddItem v (mi scrive variabile non definita)




  • di Vecchio Frac data: 08/05/2013 23:19:06

    @Pietro
    Davo per scontato che avessi un controllo immagine nello userform, entro cui caricare le immagini.
    Per aggiungere l'immagine al foglio devi utilizzare Shapes.AddPicture... ti lascio il compito di cercare da solo come si fa (poi se non riesci lo vediamo insieme).

    @cristian
    Rimango sorpreso dall'errore che riporti... nel momento in cui dichiari la variabile con "Dim v", questa è definita e la combobox aggiunge l'elemento che recupera ciclicamente dall'Array.
    Piuttosto, hai inserito una combobox di nome "Combobox1" nel tuo userform? E un controllo immagine non associata di nome Image1? ^_^




  • Immagini Combobox
    di Pietro (utente non iscritto) data: 09/05/2013 13:57:35

    ok vecchio frac, mi impegnero' a risolverlo da solo come giusto che sia, ti terro' al corrente.


  • Immagini Combobox
    di Pietro (utente non iscritto) data: 09/05/2013 21:34:20

    Ciao Vecchio Frac,
    sto analizzando il codice e il tuo suggerimento, ma non riesco a capire come utilizzare Shapes.AddPicture, devo inserirlo nel ciclo for each?
     
    Option Explicit
    
    Private Sub UserForm_Initialize()
    Dim v As Variant
        For Each v In Array("pippo", "pluto")
            ComboBox1.AddItem v
        Next
    End Sub
    
    Private Sub ComboBox1_Change()
        Image1.Picture = LoadPicture("C:cartella immagini" & ComboBox1 & ".jpg")
    End Sub


  • Immagini Combobox
    di Pietro (utente non iscritto) data: 12/05/2013 08:45:15

    niente, ci sto sbattendo la testa ma non ci riesco.



  • di Vecchio Frac data: 13/05/2013 19:55:18

    Prova il codice che segue, sempre nella zona codice del tuo userform.
     
    Option Explicit
    
    Private Sub CommandButton1_Click()
    Dim my_pic As Shape
        On Error Resume Next
        ActiveSheet.Shapes("my_picture").Delete
        On Error GoTo 0
        Set my_pic = ActiveSheet.Shapes.AddPicture("C:cartella immagini" & ComboBox1 & ".jpg", True, True, 50, 50, 70, 70)
        my_pic.Name = "my_picture"
    End Sub
    
    Private Sub UserForm_Initialize()
    Dim v As Variant
        For Each v In Array("pippo", "pluto")
            ComboBox1.AddItem v
        Next
    End Sub
    
    Private Sub ComboBox1_Change()
        Image1.Picture = LoadPicture("C:cartella immagini" & ComboBox1 & ".jpg")
    End Sub





  • Immagini Combobox
    di Pietro (utente non iscritto) data: 13/05/2013 20:18:49

    Perfetto Vecchio Frac, solo che l'immagine devo inserirla nella cella Q3, cosa devo aggiungere?



  • di Vecchio Frac data: 13/05/2013 20:24:36

    Devi modificare i numeretti che vedi, indicano la posizione x e y, espressa in punti, dell'angolo superiore sinistro dell'immagine relativamente all'angolo superiore sinistro del documento; gli ultimi due esprimono, in punti, la larghezza e l'altezza. Vedi la Guida in proposito per i dettagli :)
    Dovrai fare delle prove materialmente finchè non becchi la posizione giusta...




  • Immagini Combobox
    di Pietro (utente non iscritto) data: 14/05/2013 20:38:50

    Tutto ok Vecchio Frac, trovata combinazione giusta. Grazie mille


  • Immagini Combobox
    di Langdon74 data: 18/05/2013 07:03:34

    Ritorno su questa discussione Vecchio Frac, ho tolto la spunta su risolta, non so se ho fatto bene o devo aprirne un'altra di discussione.
    Ti volevo chiedere questo:
    Ok tutto quello mi hai consigliato e scritto in questo post, ma se ho necessita' (a seconda della scelta del testo della combobox) di andare a prendere l'immagine in un altro percorso?

    Cioè:
    se la scelta della combobox è "Topolino" vammi a prendere "Topolino" nel percorso C:Cartella ImmaginiAnimati
    se la scelta della combobox è "Phil Collins" vammi a prendere "Phil Collins" nella cartella C:Cartella ImmaginiPhil Collins

    Grazie mille



  • di Vecchio Frac data: 18/05/2013 10:51:59

    Così le cose si complicano un pochino.
    In linea di massima i file di risorse (immagini, suoni, ecc.) dovrebbero risiedere in una directory fissa e nota a priori.
    Naturalmente le esigenze possono variare e bisogna adattarsi :)
    Nel caso che hai illustrato bisogna associare il percorso ad ogni oggetto immagine.
    Come prima soluzione io farei così:
    - in un foglio (anche nascosto ma non importa per adesso) in una colonna scrivi i nomi delle immagini (uguali a quelli che figurano nella combobox), nella colonna a fianco il relativo percorso
    - quando scegli un valore dalla combobox, vai a cercarlo (Find) nella prima colonna di detto foglio, quindi recuperi il valore corrispondente (stessa riga, colonna a fianco)
    - adesso hai percorso + nome e puoi passarlo a LoadPicture o AddPicture

    Come seconda soluzione puoi fare così:
    - in fase di assegnazioni dei valori alla combobox, li inserisci nella seconda colonna di questa:
    Private Sub UserForm_Initialize()
    Dim v As Variant
    For Each v In Array("pippo:c:immaginipippo", "pluto:c:cartella di pluto", "topolino:c:percorsodi opolino")
    ComboBox1.AddItem split(v,":") & ";" & split(v,":")
    Next
    End Sub

    - dopo aver scelto il valore in combobox hai nella proprietà Columns da recuperare il valore del percorso associato al valore.

    Ho scritto al volo, ma il concetto è questo. Bisogna verificare sintassi ecc. L'idea è di costruire nome file + percorso in un array di stringhe separati da ":" che poi vengono recuperati mediante Split (un trucco semplice già usato in altre occasioni, in pratica un dizionario casereccio sulla moda di altri linguaggi più evoluti).

    L'inconveniente è che devi comunque sapere a priori nome e percorso delle risorse, per scriverli direttamente in fase di codice.
    Se il percorso deve essere dinamico, cioè da scegliere al volo, è un'altra storia e la cosa si complica ancora (e forse non ha neanche senso).