Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Alecroma,
Buonasera a tutti.
Scrivo per la prima volta qui sul forum.
Sto creando un file excel per tener traccia della mia giornata lavorativa e del tempo speso a fare una cosa o l'altra.
Il file sarà molto semplice, ma dovrà anche essere molto semplice e veloce da usare, perchè cambio spesso "incarico" (o meglio, mi viene chiesto :-P )
Riassumendo velocemente io vado a inserire ogni volta che comincio o finisco un'attività la data e l'ora (mi sono creata un'apposita macro) e di fianco devo inserire la descrizione dell'attività: inizio giornata, pausa, fine giornata o la descrizione delle varie attività di cui mi occupo (scuole, privati, bandi....).
Per le attività ho creato un elenco nel foglio 2. Ho poi inserito una combo box che mi restituisce il risultato nella casella, come si vede nell'immagine, ma vorrei poter applicare questa funzione a tutte le righe, utilizzando una sola combo box, sempre che sia possibile.
Ovvero io su tutte le celle della colonna D posso inserire i diversi valori dell'elenco presente nella combo box.
C'è da tenere in considerazione che i cambi di "incarico" sono molteplici nell'arco della giornata lavorativa e l'elenco degli incarichi sostanzioso (nel file allegato c'è solo una piccola parte!)
C'è ovviamente la soluzione "convalida dati", ma non ha le funzionalità di una combo box.
Il file è molto semplice, ma vi allego comunque quello da me creato per facilitarne lo "studio".
Nel modulo di codice del Foglio1, incolla il seguente codice:
'=========>>
Option Explicit
'--------->>
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim sStr As String
Dim CBox As OLEObject
Dim SH2 As Worksheet
Dim Rng_Lista As Range, Rng_Convalida As Range
Dim arr_Convalida As Variant
Const sLista_Convalida As String = "A1:A8" '<<=== Modifica
Const sIntervallo_Convalida_Dati As String = "D2:D25" '<<=== Modifica
Set Rng_Convalida = Intersect(Me.Range(sIntervallo_Convalida_Dati), Target)
Set CBox = Me.OLEObjects("ComboBox1")
CBox.Visible = False
If Rng_Convalida Is Nothing Then
CBox.Visible = False
Exit Sub
End If
Set SH2 = ThisWorkbook.Sheets("Foglio2")
Set Rng_Lista = SH2.Range(sLista_Convalida)
arr_Convalida = Rng_Lista.Value
On Error GoTo errHandler
If Target.Count > 1 Then GoTo errHandler
If CBox.Visible = True Then
With CBox
.Top = 10
.Left = 10
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
.Value = ""
End With
End If
Application.EnableEvents = False
With CBox
.Visible = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 15
.Height = Target.Height + 5
.Object.List = arr_Convalida
.LinkedCell = Target.Address
End With
CBox.Activate
Me.ComboBox1.DropDown
errHandler:
Application.EnableEvents = True
End Sub
'--------->>
Private Sub ComboBox1_KeyDown(ByVal _
KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
Select Case KeyCode
Case 9
ActiveCell.Offset(0, 1).Activate
Case 13
ActiveCell.Offset(1, 0).Activate
Case Else
End Select
End Sub
'<<=========
Con questo codice, la selezione di qualsiasi cella nell'intervallo D2: D25 su Foglio1 apre il comboBox che contiene l'elenco di valori nella colonna A di foglio2
Potresti scaricare il mio file di prova Alecroma20200510.xlsm
===
Regards,
Norman