Condividi tramite

Combo box su più righe

Anonimo
2020-05-09T19:38:48+00:00

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".

https://1drv.ms/x/s!Ag5PxG6vbpeiolf8CzjPSEdwsAjZ?e=dAG70f

Grazie a chi sapà rispondere!

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2020-05-10T00:07:55+00:00

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".

https://1drv.ms/x/s!Ag5PxG6vbpeiolf8CzjPSEdwsAjZ?e=dAG70f

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

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2020-05-10T11:57:01+00:00

    Ciao Alecroma,

    sei stato velocissimo ed efficientissimo!

    Hai risolto perfettamente il mio quesito, il codice funziona alla perfezione.

    Sono alle prime armi con VBA e anche spendendo un po' di tempo in ricerche su internet non ci sarei mai arrivata.

    Per fortuna che si trova gente disponibile come te.

    Grazie mille,

    Ti ringrazio per il cortese riscontro.

    Alla prossima.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2020-05-10T11:03:26+00:00

    Ciao Norman,

    sei stato velocissimo ed efficientissimo!

    Hai risolto perfettamente il mio quesito, il codice funziona alla perfezione.

    Sono alle prime armi con VBA e anche spendendo un po' di tempo in ricerche su internet non ci sarei mai arrivata.

    Per fortuna che si trova gente disponibile come te.

    Grazie mille,

    Alecroma

    La risposta è stata utile?

    0 commenti Nessun commento