Condividi tramite

Filtrare le date per mese da combobox

Anonimo
2020-04-13T06:46:20+00:00

Ciao a tutti e Buona Pasquetta "storica"

ho una maschera continua con un elenco di record contenente un controllo DataScadenza ed ho inserito una combo con origine dati una tabella dove sono presenti i mesi, due colonne, idmese e nome_mese.

Dopo aggiornamento della combo vorrei filtrare i mesi dell'anno in corso.

Come potrei scrivere il codice nell'evento dopo aggiornamento della combo?

Grazie in anticipo a tutti Voi

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
2020-04-14T06:29:08+00:00

ciao Giuseppe,

devi concaternare la stringa che compone il filtro come detto in precedenza.

Prova come segue :

Sub setFilter()

Dim strFilter As String

With Me

    If Len(.cboAnnoScelta & vbNullString) > 0 Then strFilter = strFilter & " and txtyear='" & CStr(.cboAnnoScelta) & "'"

    If Len(.cboMeseScelta & vbNullString) > 0 Then strFilter = strFilter & " and txtmonth='" & Me.cboMeseScelta.Column(1) & "'"

    If Len(strFilter) > 0 Then

        .Filter = "1+1" + strFilter

    Else

        .Filter = vbNullString

    End If

    .FilterOn = True

End With

End Sub

Private Sub cboAnnoScelta_AfterUpdate()

setFilter

End Sub

Private Sub cboMeseScelta_AfterUpdate()

setFilter

End Sub

ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2020-04-13T09:42:48+00:00

…..se devi selezionare e filtrare gli anni tra quelli disponibili il predicato da assegnare alla combo sarà  :

SELECT DISTINCT Year([DataOrdine]) AS lngYear FROM Ordini ORDER BY Year([DataOrdine]);

ed il command button che attiva il filtro :

Private Sub cmdAnnoScelta_Click()

With Me

    .Filter = "txtyear='" & CStr(.cboAnnoScelta) & "'"

    .FilterOn = True

End With

End Sub

Se devi invece combinare gli anni con i mesi devi concatenare il filtro mese ed anno. 

come lo hai impostato :

 .Filter = "txtYear=" & CLng(.cboAnnoScelta) & " and txtyear='" & Format(VBA.Date, "yyyy") & "'"

concanteni l'anno due volte, ha poco senso chiedere: filtra per anno e per anno una volta numerico e una volta testo :-)

Ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2020-04-13T07:29:02+00:00

ciao Giuseppe,

la tabella che contiene i mesi si potrebbe anche omettere.

Supponendo la tabella contenente le date si chiami ordini puoi ottenere solo i mesi effettivamente presente con un predicato del tipo : 

SELECT DISTINCT Format$([DataOrdine],"mmmm") AS meseDesc, Month([dataOrdine]) AS meseN

FROM Ordini

ORDER BY Month([dataOrdine]);

questo campo calcolato :Format$([DataOrdine],"mmmm") AS meseDesc restuisce la descrizione del mese

questo campo calcolato :Month([dataOrdine]) AS meseN                         restuisce il numero del mese

quindi impostando un ordinamento crescente per il numero mese hai i mesi effettivamente presenti e non tutti in base alle date caricate.

Ovviamente nel caso in cui ci sia almeno una data presente per ogni mese la query restiuirà tutti i mesi da Gennaio a Dicembre.

ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2020-04-13T07:04:39+00:00

ciao Giuseppe,

è un po' la stessa minestra vista ieri qui :

https://answers.microsoft.com/it-it/msoffice/forum/all/filtrare-le-date-da-comando-in-maschera/872c3a11-8273-47e5-a4b0-f85170603055

quindi supponendo le stesse assunzioni del post di ieri e la tabella che contiene la descrizione testo dei mesi così concepita :

e una combo cboMeseScelta la cui origine riga è la tabella sopra mostrata, il codice da impostare per filtrare i mesi dell'anno in corso sarà :

Private Sub cboFiltraMeseScelta_Click()

With Me

    .Filter = "txtMonth=" & CLng(.cboMeseScelta) & " and txtyear='" & Format(VBA.Date, "yyyy") & "'"

    .FilterOn = True

End With

End Sub

Questo presuppone che nell'origine dati della form ci siano due campi calcolati che restituiscon il numero del mese e l'anno, esattamente come visto ieri i cui nomi sono txtMonth e TxtYear.

ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2020-04-13T07:19:00+00:00

    Ciao Sandro, esattamente sto lavorando ancora sullo scenario di ieri..

    Sono contento, avevo già creato una tabella come la tua...

    Ho appena inserito il codice da te postato e funziona alla perfezione...

    Grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento