Condividi tramite

Filtrare dati su maschera a 2 o più condizioni tramite InputBox

Anonimo
2015-01-16T11:16:11+00:00

Buongiorno a tutti (ho già creato sulla maschera principale diversi criteri di ricerca, appoggiandomi ad un altra maschera che fa questo e funziona benissimo), anche per mancanza di spazio sulla maschera dove effettuare il filtraggio dei dati di mio interesse, desidero tarmite una Inputbox poter decidere il filtraggio solo ed esclusivamente basandomi su due campi della mia maschera che si chiamano Matricola e Cognome_e_Nome.

Ho creato il codice sottostante che mi permette di filtrare solo su un campo, vi chiedo di poterlo fare basando il criterio di filtro sui due campi de quo in base a quanto si inserisce nella inputbox.

Cioè ottenere (chiedo a voi esperti se ciò si possa fare con la InputBox)  in base a quello che inserisco nella InputBox (si tratta sempre di dati stringa) filtrare i dati basando il criterio di filtro nel campo corrispondente.

Io non riesco a creare un codice che faciliti questo, l'ho in mente, penso che per voi esperti si fattibile e che per facilitarvi meglio la comprensione di quanto vi richiedo gentilemente vi dice che  Il campo Matricola è semore composto da 6 cifre ed una lettera finale es. 888555A;123466R e cosi via, quindi penso che per poter far capire al codice che, inserendo questi caratteri alfanumerici il campo su cui basare il filtro è il campo Matricola.

Spero di essere stato chiaro nella descrizione e comprensibile.

Ho scelto l'opzione della InputBox poichè l'ho ritenuta più utile al mio Db ( ha controlli bloccati all'apertura del Form , quindi utilizzare altro metodo di filtro mi obbligherebbe e sbloccare il controllo e poi proseguire con altre operazion eecc.).

questo è il codice che ho ncreato.

Private Sub cmdFiltra_Click()

Dim Ricerca As String

  Ricerca = InputBox("Inserisci il dato da Filtrare")

  Me.Filter = "[Matricola] = Ricerca"

  Me.FilterOn = True

End Sub

Vi chiedo inoltre se ci sia la possibilità di inserire del codice che mi avvisi che il dato da filtrare non esite.

Ringrazio tutti coloro che vorranno aiutarmi in questo.

Ciao, Nicola.

P.S. Ho effettuato varie ricerce nel forum ma non ho trovato domande uguali alla mia richiesta di aiuto.

Microsoft 365 e Office | Access | 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
2015-01-16T14:56:03+00:00

Ho leggermente modificato il tuo codice ma non l'ho testato:

Option Compare Database

Option Explicit

Private Sub cmdFiltra_Click()

  Dim Ricerca As String

  Dim varReturn As Variant

  Dim varReturn1 As Variant

  Ricerca = InputBox("Inserisci il dato da Filtrare")

  Ricerca = Trim(Ricerca)                            ' elimina spazi in eccesso

  If Ricerca <> "" Then                              ' se è stato digitato qualcosa

     If IsNumeric(Mid(Ricerca, 1, 6)) = False Then   ' che non è numerico nei primi 6 caratteri

        varReturn1 = DLookup("Cognome_e_Nome", "TblAnagrafica", "[Cognome_e_Nome] =  '" & Ricerca & "'")

        If Not IsNull(varReturn1) Then

           Me.Filter = "[Cognome_e_Nome] = '" & Ricerca & "'"

           Me.FilterOn = True

        Else

           MsgBox "Record Non Trovato", vbInformation, "Assenza del dato Filtrato"

        End If

     Else

        varReturn = DLookup("Matricola", "TblAnagrafica", "[Matricola] =  '" & Ricerca & "'")

        If Not IsNull(varReturn) Then

           Me.Filter = "[Matricola] =  '" & Ricerca & "'"

           Me.FilterOn = True

        Else

            MsgBox "Record Non Trovato", vbInformation, "Assenza del dato Filtrato"

        End If

     End If

  End If

End Sub

Mimmo

La risposta è stata utile?

0 commenti Nessun commento

11 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-01-16T14:21:53+00:00

    Ciao Mimmo, grazie per il tuo intervento, ora testo il tuo codice e ti afccio sapere, ma per orgoglio personale, su consiglio di David per una precedente discussione, che mi inviatava (per imparare da solo ed apprendere meglio) arelaizzare a volte un po di codice da solo ecc. ti posto il codice che sto testando e che dovrebbe fare quello che desidero, tarnne nei punti remmati e che non riesco a combinare per ciò.

    Cioè, quello che sono riuscito a fare da solo e che funziona bene è questo:

    1. verificare se l'inputbox contiene del testo, in caso contrario si esce e qui ok lo fa il codice;

    2)Se digito la matricola correttamente  mi effettua bene il controllo, in caso di dato non corretto mi compare il messaggio: 'MsgBox "Record Non Trovato", vbInformation, "Assenza del dato Filtrato" equi tutto ok lo fa.

    1. quello che non riesco ad abbinare nel resto del codice è la procedura di filtraggio dei dati nella colonna Cognome e Nome quando si inseriscono i dati diversi dalla matricola, ho pensato anch'io a questo: 'If IsNumeric(Mid(Ricerca, 1, 6)) = False Then , e da questo punto in poi non riesco.

    Private Sub cmdFiltra_Click()

      Dim Ricerca As String

      Dim varReturn As Variant

      Dim myVariabile As Variant

      Dim varReturn1 As Variant

      Ricerca = Trim(Ricerca)

      Ricerca = InputBox("Inserisci il dato da Filtrare")

      varReturn = DLookup("Matricola", "TblAnagrafica", "[Matricola] =  '" & Ricerca & "'")

      varReturn1 = DLookup("Cognome_e_Nome", "TblAnagrafica", "[Cognome_e_Nome] =  '" & Ricerca & "'")

    If (Ricerca <> "") Then

    'If Not IsNull(varReturn1) Then

    'If IsNumeric(Mid(Ricerca, 1, 6)) = False Then

    'MsgBox "Not Numeric"

                'myVariabile = varReturn1

                'Me.Filter = "[Cognome_e_Nome] =  '" & Ricerca & "'"

                'Me.FilterOn = True

                'Else

                'MsgBox "Record Non Trovato", vbInformation, "Assenza del dato Filtrato"

                'Me.FilterOn = True

                'End If

                If Not IsNull(varReturn) Then

                myVariabile = varReturn

                Me.Filter = "[Matricola] =  '" & Ricerca & "'"

                Me.FilterOn = True

                Else

                MsgBox "Record Non Trovato", vbInformation, "Assenza del dato Filtrato"

                Me.FilterOn = True

                End If

    End If

    'End If

      End Sub

    Mimmo, per favore, ti prego, fammi capire cove sbaglio e cosa non va nel mio codice (di certo grazie ai vostri insegnamenti sono arrivato a tanto, da autodidatta) e se si può sistemare meglio per il mio obiettivo.

    Grazie, Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-01-16T14:02:02+00:00

    Ciao, ad esempio:

    If IsNumeric (Left(campoInInput, 5)) Then

       If DFirst("Matricola", "nomeTabella", "Matricola = '" & Ricerca & "'") Is Null Then

          msgbox "Matricola inesistente !",vbInformation

       else

            Me.Filter = "[Matricola] = '" &  Ricerca & "'"

       end If 

    else

       If DFirst("Cognome_e_Nome", "nomeTabella", "Cognome_e_Nome= '" & Ricerca & "'") Is Null Then

          msgbox "Nominativo inesistente !",vbInformation

       else

            Me.Filter = "[Cognome_e_Nome] = '" & Ricerca & "'"

       end If 

    End If

    Non l'ho testato!!!

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-01-16T12:35:36+00:00

    Ciao Mimmo, dammi uno spunto per poter (se ci riesco da solo), insieme al tuo consiglio ( mi riferisco a DlookUp per ricercare se esite oppure no il dato filtrato) avere al possibilià di poter avere du ediversce scelte di filtro dati a seconda di quanto si inserisce nella InputBox tenendo presnete questo:

    Matricola è sempre composto da 6 cifre ed una lettera finale es. 888555A;123466R e cosi via, quindi penso che per poter far capire al codice che, inserendo questi caratteri alfanumerici il campo su cui basare il filtro è il campo Matricola diversamenet il campo su cui applicare il filtro sarà Cognome_e_Nome.

    Grazie come sempre Mimmo.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-01-16T12:15:48+00:00

    Ciao,

    cambia :

      Me.Filter = "[Matricola] = Ricerca"

    con

      Me.Filter = "[Matricola] = '" & Ricerca & "'"

    Per quanto riguarda il test di presenza puoi utilizzare una DLookUp oppure una DCount ecc....

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento