Campo visibile in base alla scelta su 2 cbo

di il
4 risposte

Campo visibile in base alla scelta su 2 cbo

Ciao a tutti e complimenti ancora per la piattaforma.
Vi chiedo per favore un aiutino su vba per semplificare una necessità di controllo.
Allora, in una maschera ho 2 combobox, la prima chiamata cboTipologia, la seconda cboFIltroTipologia, con cboTipologia si sceglie la un articolo, con cboFIltroTipologia si sceglie il filtro in base alla lista che si aggiorna in base alla scelta fatta su cboTipologia e fin qui nessun problema. Ho creato poi 1 casella di controllo "Anni" che in base alla scelta fatta su cboTipologia e cboFIltroTipologia questa si visualizza o no (.Visible).
Con il codice ho creato un If Then elementare fatto così: (nb. il codice fa riferimento agli ID nelle tabelle richiamate dalle cbo)
'
Private Sub cboFiltroTipologia_AfterUpdate()
Me!Anni.Value = 0
If (Nz(Me!cboTipologia) = 1) And _
((Nz(Me!cboFiltroTipologia) = 1) Or _
(Nz(Me!cboFiltroTipologia) = 2) Or _
(Nz(Me!cboFiltroTipologia) = 9) Or _
(Nz(Me!cboFiltroTipologia) = 11) Or _
(Nz(Me!cboFiltroTipologia) = 16)) Or _
(Nz(Me!cboTipologia) = 56) And _
((Nz(Me!cboFiltroTipologia) = 1) Or _
(Nz(Me!cboFiltroTipologia) = 2) Or _
(Nz(Me!cboFiltroTipologia) = 11)) Or _
(Nz(Me!cboTipologia) = 65) And _
((Nz(Me!cboFiltroTipologia) = 1) Or _
(Nz(Me!cboFiltroTipologia) = 2) Or _
(Nz(Me!cboFiltroTipologia) = 11)) Or _
(Nz(Me!cboTipologia) = 2) And _
((Nz(Me!cboFiltroTipologia) = 1) Or _
(Nz(Me!cboFiltroTipologia) = 2) Or _
(Nz(Me!cboFiltroTipologia) = 11) Or _
(Nz(Me!cboFiltroTipologia) = 16)) Or _
(Nz(Me!cboTipologia) = 59) And _
((Nz(Me!cboFiltroTipologia) = 1) Or _
(Nz(Me!cboFiltroTipologia) = 2) Or _
(Nz(Me!cboFiltroTipologia) = 12)) Or _
(Nz(Me!cboTipologia) = 42) And _
(Nz(Me!cboFiltroTipologia) = 4) Then
Me!Anni.Visible = True
Else
Me!Anni.Visible = False
End If
End Sub
'
Tutto funziona perfettamente ma è pesantissimo e brutto scritto così e il problema è che dovrei inserirne ancora diversi e sono già al limite massimo degli Or e And in una sola condizione.
Cercherei quindi una soluzione più semplice e più versatile che tradurrebbe "teoricamente" un codice scritto così:
'
tipo = 1,2,4,42,56,65
filtro = 1,2,4,9,11,12,16
If ((cboTipologia = tipo) And (cboFiltroTipologia = filtro)) Then
Me!Anni = True
Else
Me!Anni = False
End If
'
Spero di essermi spiegato bene, sono giorni e giorni che cerco una soluzione diversa tra esempi di variabili Dim ma non trovo quella giusta e non funziona mai.
Vi ringrazio tantissimo per l'aiuto.
A presto. MaxM

4 Risposte

  • Re: Campo visibile in base alla scelta su 2 cbo

    Fai esattamente come hai detto...
    Puoi usare 2 stringhe es:
    
    Dim strTIPO As String
    Dim strFILTRO As String
    strTIPO="1,2,4,42,56,65,"
    strFILTRO="1,2,4,9,11,12,16,"
    
    If instr(strTIPO,Me!caotico & ",")>0 AND instr(....filtro) then
    Fai attenzione che ho sfruttato la virgola anche in finale per non incappare nel 1-11 o sottostringhe...

    Oppure 2 collection... ma forse ti risulta piu complesso...
  • Re: Campo visibile in base alla scelta su 2 cbo

    Ciao @Alex, piacere di averti riletto e grazie davvero delle tue risposte sempre risolutive.
    Funziona perfettamente, ho testato inizialmente con 2 combinazioni e nei numeri definiti il campo appare mentre negli altri no.
    A combinazioni tutte inserite però mi faceva un problema solo con gli ID della cboFiltro a una cifra (nonostante la "," finale sulla variabile che mi avevi detto) che in delle combinazioni faceva apparire il campo dove non doveva, alla fine ho risolto duplicando ed eliminando le righe con ID a una cifra dalle 2 tabelle ricorreggendo tutti i riferimenti delle altre tabelle e ora è perfetto.
    Ti ringrazio davvero molto (e avanzi qualche caffè )
    Ciao a presto.
    MM
  • Re: Campo visibile in base alla scelta su 2 cbo

    Potevi mettere la virgola anche all'inizio e cercare sempre ",ID," in questo modo risolveva.
  • Re: Campo visibile in base alla scelta su 2 cbo

    Accidenti @Alex hai ragione... Però visto la dimenticanza ora riprendo il BE originale che avevo copiato prima di cambiare gli ID, rinomino i files e torna tutto come prima con gli ID a singola cifra e faccio questa modifica della virgola
Devi accedere o registrarti per scrivere nel forum
4 risposte