Richiesta di aiuto x sintassi : uso del nome della text box (mese)

di fcaliandro il
10 risposte

Buongiorno,

ho una maschera creata partendo da una query a campi incrociati dove i campi colonna sono i 12 mesi dell'anno.

Nominati a tre lettere in inglese: Jan, Feb, Mar, ..., Dec

I campi riga sono diversi nomi di fornitori legati al campo [VENDOR_NAME] di tipo stringa corta

Il mio scopo è quello di codificare in visual basic un evento su doppio click sul campo valore del campo incrociato. Quello che dovrei fare con il doppio click:

OpenForm LISTA EVENTI del fornitore [VENDOR_NAME] che hanno come data di inizio evento nel mese xxx (dove xxx è il nome del campo sul quale ho cliccato).

Quindi il codice dovrebbe essere circa:

DoCmd.OpenForm "LISTA_EVENTI", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" & "And Mese(Data_Inizio) = *nome della casella di testo*"

Il codice di sopra è indicativo.

Mi chiedo come valorizzare il nome della casella di testo all'interno del codice..

Ringrazio in anticipo

Saluti

10 Risposte

  • Nometuacolonna=Screen.ActiveControl.Name

    Se gennaio calcola dal 1/1 al 31/1

    Se febbraio .....

    Etc etc...

  • Grazie Andrea,

    spero di non incasinarmi con il mese espresso in tre lettere in lingua inglese.

    Altrimenti proverò ad usare il valore numerico 1-12...

    Ci provo

  • Guarda che ti restituisce il nome della colonna...

  • Ho dovuto cambiate il nome delle colonne con formato mese MM.

    Quindi 01,02,..., 12.

    Poi con il codice seguente funziona solo per le date con mese 10,11,12.

    Per record con mese compreso tra 1 e 9 non funziona...

    DoCmd.OpenForm "OLD-VMD-Summary", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" & " And Month([OLD-VMD-Summary].[OPEN_DATE])= Screen.ActiveControl.Name"

    Dovrei trovare il modo di avere in uscita alla funzione month il mese in formato a due cifre...

    Però non so come si fa..

  • Risolto con il seguente codice:

    aggiungendo Format( ... , '00)

    Grazie Andrea! 

    DoCmd.OpenForm "OSD-VMDR-Summary", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" & " And Format(Month([OSD-VMDR-Summary].[OPEN_DATE]),'00')= Screen.ActiveControl.Name"
  • 02/07/2026 - fcaliandro ha scritto:

    Risolto con il seguente codice:

    aggiungendo Format( ... , '00)

    Grazie Andrea! 

    DoCmd.OpenForm "OSD-VMDR-Summary", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" & " And Format(Month([OSD-VMDR-Summary].[OPEN_DATE]),'00')= Screen.ActiveControl.Name"

    Formalmente non si scrive una cosa simile... hai inserito all'interno di una sintassi SQL un elemento che richiede una risoluzione implicita, che nella regola di buonsenso deve essere evitata...

    DoCmd.OpenForm "OSD-VMDR-Summary", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "' And Format(Month([OSD-VMDR-Summary].[OPEN_DATE]),'00')= " & Screen.ActiveControl.Name
  • Comunque il mio suggerimento era un altro...

    Nometuacolonna=Screen.ActiveControl.Name

    Case Nometuacolonna

    Jan mese=1

    Feb mese=2

    Ecc...

    Poi

    DoCmd.OpenForm "OSD-VMDR-Summary", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "' And Format(Month([OSD-VMDR-Summary].[OPEN_DATE]),'00')= " & mese

    Così se vai sulla prima colonna (anche accidentalmente) mandi il messaggio di selezionare caselle relative alla colonna mese

    Evitando blocchi di errori

    P.s. supposto che la tabella sia del tipo

    Nominativo|gen|feb|...|dic

    Se vai sulla colonna nominativo il comando genera (o)errore.

    Se passi il nome colonna è lo gestisci col case (non fraintendere e non ridere) se becchi la colonna nominativo non fai nulla.

    In più puoi avere i mesi in tutte le lingue che vuoi, magari le cerchi in una select che contiene i mesi in tutte le lingue...o quasi.

  • Grazie Alex per la nota di correzione del codice (è un particolare che considererò da ora in poi per migliorare le prestazioni)

    Grazie Andrea.

    Il tuo suggerimento mi sembra molto utile per semplificare. Nella mia maschera/query a campi incrociati ho un evento click per ogni mese. Converrebbe forse creare un codice "pubblic" richiamabile all'occorrenza?

    In modo da uniformare il codice che mi ritrovo all'interno della mia maschera?

  • 13/07/2026 - fcaliandro ha scritto:

    Converrebbe forse creare un codice "pubblic" richiamabile all'occorrenza?

    Non so cosa fanno quei 12 codici (12 mesi) ma se cambia solo il mese io la scriverei unica.

    03/07/2026 - @Alex ha scritto:

    DoCmd.OpenForm "OSD-VMDR-Summary", , , "[VENDOR_NAME] = '" & Me.[VENDOR_NAME] & "' And Format(Month([OSD-VMDR-Summary].[OPEN_DATE]),'00')= " & Screen.ActiveControl.Name

    Se è sempre questa cambia solo il mese.

    Meseseleziomato = Month(DateValue("1-" & Screen.ActiveControl.Name & "-2000"))

    Quindi diventa

    Dim Meseselezionato As Integer
    
    Meseselezionato = Month(DateValue("1-" & Screen.ActiveControl.Name & "-2000"))
    
    DoCmd.OpenForm "LISTA EVENTI", , , _
        "[VENDOR_NAME]='" & Replace(Me!VENDOR_NAME, "'", "''") & _
            "' AND Month([OPEN_DATE])=" & Meseselezionato

    La.richiami una volta per tutte

  • Grazie Andrea,

    ottimo spunto. Ho provato e gira bene.

Devi accedere o registrarti per scrivere nel forum
10 risposte