Macro per Aprire maschera con filtri

Anonimo
2023-11-11T10:58:11+00:00

Buongiorno a tutti,

chiedo il vostro aiuto perché non riesco applicare dei filtri con una macro quando apre una maschera, situazione

Ho creato una maschera dove al suo interno ho il raggruppamento e conteggio di dati di una tabella in questo formato (tipo, luogo e quantità)

Mele Milano 5

Pere Milano 2

Pesche Bologna 3

Dopo cliccando sul numero (quantità) mi dovrebbe apre la maschera mostrandomi solo i record di tipo e luogo, esempio cliccando su 2 (Pere Milano) mi mostri in questa maschera i due record

Ho usato una macro solo perchè ho delle macro/azioni simili che aprono una maschera di un determinato record, ma potrei usare anche una VBA, aggiungo che se nella condizione where metto valori fissi come Tipo = "pere" and Luogo = "milano" la maschera si apre con i record giusti.

Alla fine non riesco solo dire alla condizione where che mi deve applicare il filtro di quei due campi (tipo e luogo) di quel record

Come posso fare per indicare quali record mi deve prendere per filtrare ?

Grazie

Laura

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

3 risposte

Ordina per: Più utili
  1. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2023-11-12T11:59:49+00:00

    Ciao Laura,

    provo a rispondere alla tua prima domanda, campi nulli:

    Private Sub Form_Load()

    Dim strTipo As String

    Dim strLuogo As String

    'Recupera i valori di Tipo e Luogo dal record selezionato nella maschera precedente

    strTipo = Forms![NomeMascheraPrecedente]![CampoTipo]

    strLuogo = Forms![NomeMascheraPrecedente]![CampoLuogo]

    'Applica i filtri alla maschera corrente

    If Len(strTipo & "") > 0 Then
    
       If Len(strLuogo & "") > 0 Then
    
           Me.Filter = "Tipo = '" & strTipo & "' AND Luogo = '" & strLuogo & "'"
    
       else
    
           Me.Filter = "Tipo = '" & strTipo 
    
       end If
    
    Else
    
       If Len(strLuogo & "") > 0 Then
    
           Me.Filter = "Luogo = '" & strLuogo & "'"
    
       else
    
           Me.FilterOn = False
    
           Exit Sub 
    
       end If 
    
    Me.FilterOn = True
    

    End Sub

    Per il secondo problema, se ho capito la maschera di attivazione potrebbe essere diversa quindi vuoi sapere come poter fare riferimento ai campi con un diverso nome di maschera nelle due istruzioni:

    strTipo = Forms![NomeMascheraPrecedente]![CampoTipo]

    strLuogo = Forms![NomeMascheraPrecedente]![CampoLuogo]

    Potresti utilizzare il parametro OpenArgs nell'Istruzione DoCmd.OpenForm per passare il nome della maschera chiamante cioè Me.Name e utilizzare questo OpenArgs nella maschera chiamata invece del nome fisso NomeMascheraPrecedente.

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-11-11T13:33:19+00:00

    Ciao Sandro,

    grazie della risposta funziona!

    ti faccio due domande veloci

    • Se uno dei due campi è vuoto (nullo) come posso evitare l'errore?
    • Dato che la maschera che mostra i conteggi è stata "clonata" per fare altri tipi di conteggi (stessi campi) ma con filtri iniziali differenti, volevo riutilizzare sempre l'ultima maschera senza clonarla ma come posso fare se al caricamento ho impostato il valore "NomeMascheraPrecedente" ?

    Grazie

    Laura

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2023-11-11T11:33:00+00:00

    Ciao Laura,

    per applicare i filtri alla maschera quando viene aperta tramite una macro, puoi utilizzare il seguente codice VBA:

    
    Private Sub Form\_Load()
    
        Dim strTipo As String
    
        Dim strLuogo As String
    
        'Recupera i valori di Tipo e Luogo dal record selezionato nella maschera precedente
    
        strTipo = Forms![NomeMascheraPrecedente]![CampoTipo]
    
        strLuogo = Forms![NomeMascheraPrecedente]![CampoLuogo]
    
        'Applica i filtri alla maschera corrente
    
        Me.Filter = "Tipo = '" & strTipo & "' AND Luogo = '" & strLuogo & "'"
    
        Me.FilterOn = True
    
    End Sub
    
    

    Assicurati di sostituire "NomeMascheraPrecedente", "CampoTipo" e "CampoLuogo" con i nomi corretti della maschera precedente e dei campi che contengono i valori di Tipo e Luogo. In questo modo, quando la maschera viene aperta tramite la macro, i filtri verranno applicati automaticamente in base ai valori di Tipo e Luogo del record selezionato nella maschera precedente.

    Sandro

    La risposta è stata utile?

    0 commenti Nessun commento