vorrei sapere se ᅵ possibile far sᅵ che l'utente del foglio excel
possa, ad es tramite menu a discesa (casella combinata?), modificare
l'immagine (es. a caso: un cane, un gatto o un cavallo) a cui ᅵ
assegnata una macro (sempre la stessa).
Lo scopo ᅵ solo estetico, esiste una soluzione semplice per farlo?
Grazie.
Swap.
Dove si trova questa immmagine?
Sul foglio?
--
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads
Scusa per la risposta tardiva, non ho avuto accesso al NG.
Sᅵ, l'immagine ᅵ sul foglio, ma non sono sicuro di capire dove altro
potrebbe essere.
Inserisci tre immagini, uguali per dimensione,
nel foglio.
Excel, se sono le uniche tre immagini,
darᅵ loro i seguenti nomi:
Immagine 1
Immagine 2
Immagine 3
Adesso, nell'editor del vb(ALT+F11)
inseriamo una UserForm: Inserisci-->UserForm
Nella UserForm mettiamo una ComboBox.
Questo il codice della UserForm:
'evento scatenato all'avvio della UserForm
Private Sub UserForm_Initialize()
'metto i nomi delle mie immagini
'nella ComboBox
With Me.ComboBox1
.AddItem ("Immagine 1")
.AddItem ("Immagine 2")
.AddItem ("Immagine 3")
End With
End Sub
Private Sub ComboBox1_Click()
'dichiaro le variabili
Dim wk As Workbook
Dim sh As Worksheet
Dim sp As Shape
'metto un riferimento al workbook
'che contiene il codice
Set wk = ThisWorkbook
'metto un riferimento al foglio
'che contiene le immagini
'(qui Foglio1)
With wk
Set sh = .Worksheets("Foglio1")
End With
With sh
'ciclo le immagini
For Each sp In .Shapes
'nascondo le immagini con il nome
'diverso da quell selezionato nella ComboBox
If sp.Name <> Me.ComboBox1.Text Then
sp.Visible = False
Else
'visualizzo quella con il
'nome uguale a quello selezionato
'nella ComboBox
sp.Visible = True
End If
Next
End With
'Set a Nothing delle variabili oggetto
Set sp = Nothing
Set sh = Nothing
Set wk = Nothing
End Sub
In un modulo standard(Inserisci-->Modulo)
mettiamo questo codice:
Public Sub m()
UserForm1.Show
End Sub
Public Sub mMacro()
MsgBox "Ciao"
End Sub
ALT+F11 e torniamo in Excel.
ALT+F8 e visualizziamo le macro
disponibili nel file.
Seleziona: m
Opzioni
assegna un tasto di scelta rapida, esempio: a
(questo serve per richiamare la UserForm al bisogno)
Seleziona la prima immagine.
Click sopra con il tasto dx del mouse
Seleziona: Assegna macro
Assegna la macro mMacro
Ripeti la stessa operazione com le altre immagini.
Posiziona le tre immagini una sopra all'altra.
CTRL+a e visualizzi la UserForm.
Seleziona un'immmagine.
Click sull'immagine selezionata.
Qui trovi il file utilizzato per l'esempio:
http://www.maurogsc.eu/esemping10/cambiaimmagine.zip
Per problemi, per favore resta sempre in
questo thread.
Grazie per l'attenzione.
--
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
'dichiaro vle variabili
'visibili da tutta la UserForm
Dim wk As Workbook
Dim sh As Worksheet
Dim sp As Shape
'evento scatenato all'avvio della UserForm
Private Sub UserForm_Initialize()
'metto un riferimento al workbook
'che contiene il codice
Set wk = ThisWorkbook
'metto un riferimento al foglio
'che contiene le immagini
'(qui Foglio1)
With wk
Set sh = .Worksheets("Foglio1")
End With
'metto i nomi delle mie immagini
'nella ComboBox
With Me.ComboBox1
For Each sp In sh.Shapes
.AddItem sp.Name
Next
End With
End Sub
Private Sub ComboBox1_Click()
With sh
'ciclo le immagini
For Each sp In .Shapes
sp.Visible = True
'nascondo le immagini con il nome
'diverso da quell selezionato nella ComboBox
If sp.Name <> Me.ComboBox1.Text Then
sp.Visible = False
Else
'visualizzo quella con il
'nome uguale a quello selezionato
'nella ComboBox
sp.Visible = True
End If
Next
End With
End Sub
'evento scatenato alla distruzione della UserForm
Private Sub UserForm_Terminate()
'Set a Nothing delle variabili oggetto
Set sp = Nothing
Set sh = Nothing
Set wk = Nothing
End Sub
--
Grazie mille, persino l'esempio giᅵ fatto da scaricare!
Davvero gentilissimo.
Avrei una domanda, secondo te potrei ottenere un effetto simile
utilizzando una Casella combinata di tipo modulo, non una userform, +
una macro sull'evento change della cella che essa controllerebbe?
Lo chiedo perchᅵ, non essendo pratico degli userform, non ne so
valutare i pro/contro.
Grazie.
Grazie a te per il gentile riscontro.
> Avrei una domanda, secondo te potrei ottenere un effetto simile
> utilizzando una Casella combinata di tipo modulo, non una userform, + una
> macro sull'evento change della cella che essa controllerebbe?
> Lo chiedo perch�, non essendo pratico degli userform, non ne so valutare i
> pro/contro.
>
Non utilizzo mai i moduli,
sono(quasi) ingestibili.
Al limite si potrebbe utilizzare
una ComboBox direttamente sul
foglio.
Visualizza-->Barre degli stumenti-->Strumenti di controllo
Questi oggetti ActiveX si comportano nel 99%
dei casi come gli omonimi controlli che hai sulla UserForm
e sono pi� gestibili rispetto ai controlli modulo.
Prova ad aggiungere una ComboBox
(ActiveX ComboBox) e una serie di immagini
al Foglio1.
Questo il codice del modulo *DEL FOGLIO*
dove hai ComboBox e immagini:
'evento scatenato alla selezione del foglio
Private Sub Worksheet_Activate()
'dichiaro le variabili
Dim sp As Shape
With Me.ComboBox1
'pulisco la ComboBox
.Clear
'ciclo le Shapes
For Each sp In Me.Shapes
'se � una Shape immagine
If sp.Type = CStr(13) Then
'le aggiungo alla ComboBox
.AddItem sp.Name
End If
Next
End With
'Set a Nothing della variabile oggetto
Set sp = Nothing
End Sub
'evento scatenato al click sulla ComboBox
Private Sub ComboBox1_Click()
'dichiaro le variabili
Dim sp As Shape
With Me
'ciclo le immagini
For Each sp In .Shapes
'nascondo le immagini con il nome
'diverso da quell selezionato nella ComboBox
If sp.Name <> Me.ComboBox1.Text Then
'se � una Shape immagine
If sp.Type = 13 Then
'la nascondo
sp.Visible = False
End If
Else
'visualizzo quella con il
'nome uguale a quello selezionato
'nella ComboBox
sp.Visible = True
End If
Next
End With
'Set a Nothing della variabile oggetto
Set sp = Nothing
End Sub
Cosᅵ ᅵ esattamente come l'avrei voluta, grazie di nuovo.
Ciao
Grazie a te per il riscontro
e buon lavoro.