[vba] Evento change elenco

Anonimo
2017-01-26T08:04:08+00:00

Ciao a tutti

Sto creando un file excel che deve leggere delle strutture alberghiere da un db sql server, creare un elenco, assegnare questo elenco a delle celle e quando si seleziona una struttura dall'elenco caricare dal db le camere associate.

Sono riuscito a leggere i dati, a creare l'elenco e assegnarlo alle celle.

Ora, è possibile intercettare l'evento change dell'elenco e individuare la posizione dell'elemento selezionato (Es. seleziono 'Hotel XXX' che si trova in posizione 5 nell'elenco e ricevo come risultato 5)?

Se non è possibile intercettare l'evento change, come posso caricare le camere di un hotel come elenco in una cella?

Grazie

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

5 risposte

Ordina per: Più utili
  1. Anonimo
    2017-01-27T11:10:44+00:00

    Adesso credo di aver capito.

    Ma temo che quello che chiedi non sia possibile se non affidandosi a delle listbox o combobox (activex).

    Magari aspettiamo anche la risposta di qualche altro più esperto di me :-)

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-01-27T08:16:54+00:00

    Img1. Nella cella C5 ho un elenco di hotel

    Img2. Nella cella C6 ho un elenco di hotel

    Img3. Nella cella C5 seleziono dall'elenco 'Hotel3'.

    Domanda: c'è un modo per intercettare l'evento change dell'elenco e avere la posizione dell'hotel selezionato nell'elenco? In questo caso ho selezionato 'Hotel3' e dovrò avere come posizione 3.

    Chiaro ora?

    Grazie mille

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-01-26T20:32:48+00:00

    Faccio fatica a capire come siano impostati i dati.

    Magari con un esempio la cosa sarebbe più comprensibile.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-01-26T17:24:18+00:00

    Ciao

    in realtà in ogni cella, per esempio, della colonna 'A' ho un elenco di strutture. Questo elenco viene creato con vba:

    -all'aperture del file leggo le strutture da un db sql server

    • creo una definizione di nomi e la chiamo 'Strutture'
    • Assegno alle celle della colonna 'A' la definizione di nomi 'Strutture'

    Ora, quando un utente seleziona una struttura dell'elenco devo caricare in una cella le camere associate alla quella struttura. Camere che si trovano nel db.

    Per far questo ho bisogno di intercettare l'evento change dell'elenco associato alla cella e conoscere la posizione dell'elemento selezionato all'interno dell'elenco.

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-01-26T16:55:57+00:00

    Ciao SviPla,

    in realtà non sono sicuro di aver compreso del tutto la tua esigenza ma provo a fornirti un esempio dove, sfruttando l'evento Worksheet_SelectionChange del foglio di lavoro individuo la posizione, nell'elenco, di una serie di dati.

    Nel Foglio1 è presente una sola colonna di dati (in colonna B) dove ho una intestazione (NOME HOTEL) e di seguito una serie di nomi (HOTEL POSIZIONE 1, HOTEL POSIZIONE 2, ...).

    Spostandosi di cella in cella, nell'ambito della colonna B, se la cella contiene un valore (non è vuota) viene lanciato un messaggio.

    Questo è il link al file di esempio:

    File Esempio

    E questo è il codice presente nel modulo VBA del Foglio1:

    '---

    Option Explicit

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

      Const PrimaRigaDati As Long = 5

      Const Delta As Long = PrimaRigaDati - 1

      Const ColonnaNomiHotel As String = "B"

      With Me

        If Target.Column = .Columns(ColonnaNomiHotel).Column And _

           Target.Row >= .Rows(PrimaRigaDati).Row And _

           Target.Value <> "" Then

          MsgBox "La posizione nell'elenco dell'hotel " & Chr(34) & Target.Value & Chr(34) & " è la n. " & Target.Row - Delta

        End If

      End With

    End Sub

    '---

    Prova a vedere se qualcosa del genere può fare al caso tuo.

    La risposta è stata utile?

    0 commenti Nessun commento