[RISOLTO] Funzione dlookup con 2 criteri

di il
5 risposte

[RISOLTO] Funzione dlookup con 2 criteri

Rieccomi alle prese con un altro problema.

nel controllo casella di testo di una maschera scrivo la seguente istruzione:

=DLookUp(WeekdayName(Weekday(Date();2);Falso;2);"Tb_menù";"Settimana=" & DatePart("ww";Date();2;1) Mod 4+1 And "pr/se='" & "pr'")

dalla tabella "Tb_menù" (la quale contiene, tra gli altri, il campo numerico "Settimana" ed il campo di tipo testo "pr/se" mi deve mostrare il campo il cui nome è restituito dalle tre funzioni concatenate weekdayname, weekday e Date (in pratica ho altri 7 campi denominati come i giorni della settimana, ed il campo che mi serve ogni giorno è quello del giorno corrente), del record che soddisfa contemporaneamente 2 criteri:

primo criterio: il numero della settimana deve essere quello dato dal resto della divisione tra il numero della settimana dell'anno e 4, aumentato di un'unità (settimana da 1 a 4)

secondo criterio: il campo "pr/se" deve avere il valore "pr".

tra tutte le cose il problema ce l'ho sull' AND e/o sulla sintassi del secondo criterio.

dove sto sbagliando?

grazie mille

5 Risposte

  • Re: [RISOLTO] Funzione dlookup con 2 criteri

    Carmine Sepe ha scritto:


    tra tutte le cose il problema ce l'ho sull' AND
    perché l'hai lasciato "fuori" dalla stringa di costruzione della where condition. Deve entrare anche lui a far parte della stringa che ne deve risultare.
    Detto in un altro modo: il doppio apice non va prima di [pr/se='] ma prima di AND, ricordando di anteporre anche lo spazio, in modo che la where condition possa risultare del tipo
    "primo criterio AND secondo criterio"
    e non
    "primo criterioAND secondo criterio"
  • Re: [RISOLTO] Funzione dlookup con 2 criteri

    Spero tu sappia che il calcolo della Settimana, come lo hai fatto espone ad un Baco, nella prima o nell'ultima di anni particolari...
    Vedi questo:
    https://support.microsoft.com/it-it/help/20029

    Detto ciò, questa funzione dovrebbe risolvere
    
    Public Function Date2Week(Optional dtmDate As Variant) As Byte
        ' ------------------------------------------------------
        ' Calcolo formato ISO 8601:1988 standard
        ' Verificati i casi da KB [OK]
        ' [url]https://support.microsoft.com/it-it/kb/200299[/url]
        ' ------------------------------------------------------
        Dim Jan1             As Date
        Dim Sub1             As Boolean
        Dim Ret              As Byte
     
        If IsMissing(dtmDate) Then
            Jan1 = DateSerial(year(Date), 1, 1)
        Else
            Jan1 = DateSerial(year(dtmDate), 1, 1)
        End If
         
        Sub1 = (Format(Jan1, "ww", VBA.VbDayOfWeek.vbUseSystemDayOfWeek, VBA.VbFirstWeekOfYear.vbUseSystem) = 1)
        Ret = DatePart("ww", dtmDate, VBA.VbDayOfWeek.vbUseSystemDayOfWeek, VBA.VbFirstWeekOfYear.vbUseSystem) + Sub1
         
        Date2Week = Ret
    End Function
    La tua sintassi è errata proprio nella Condizione:
    
    "Settimana=" & DatePart("ww";Date();2;1) Mod 4+1 And "pr/se='" & "pr'"
    Tuttavia fatico a capire:
    1) Hai un campo che si chiama [pr/se]...? Male, non si usano caratteri speciali nei NOMI
    2) Il valore [pr] da usare per il confronto con il campo da dove arriva...?
  • Re: [RISOLTO] Funzione dlookup con 2 criteri

    Alex,
    sul baco di fine anno della funzione ne sono consapevole e dover mettere mano al codice al cambio di anno l'ho messo in preventivo. (essendo una mensa scolastica in quel periodo i clienti sono chiusi per cui potrò fare manutenzione senza intoppi).
    Ovviamente ti sono grato per la segnalazione.

    sull'utilizzo del carattere speciale effettivamente non è il massimo---->cambio in pr_se
    il campo pr_se puo' assumere ol il valore "pr" (primo piatto) o il valore "se" (secondo piatto), non lo faccio di tipo booleano poiché potrei in futuro dover inserire anche frutta e dolce...

    il Campo "pr/se" (recte pr_se) è un campo della Tb_menù, ed i valori li immetto io (mi serve per distinguere le due "tipologie" di record)




    @Phil


    =DLookUp(WeekdayName(Weekday(Date();2);Falso;2);"Tb_menù";"Settimana=" & DatePart("ww";Date();2;1) Mod 4+1 " And pr/se='" & "pr'")

    con questo codice l'AND mi va nella stringa di costruzione, ho lasciato anche lo spazio ma mi viene errore di operando senza operatore
  • Re: [RISOLTO] Funzione dlookup con 2 criteri

    [Risolto]

    il codice di phil è corretto (grazie mille)

    rinominando il campo pr/se in pr_se va tutto liscio (Grazie Alex per le dritte).
  • Re: [RISOLTO] Funzione dlookup con 2 criteri

    Carmine Sepe ha scritto:


    Alex,
    sul baco di fine anno della funzione ne sono consapevole e dover mettere mano al codice al cambio di anno l'ho messo in preventivo. (essendo una mensa scolastica in quel periodo i clienti sono chiusi per cui potrò fare manutenzione senza intoppi).
    Ovviamente ti sono grato per la segnalazione.
    La mia segnalazione conteneva la SOLUZIONE per evitare quel problema, ti basta scrivere la Funzione che ti ho allegato in un Modulo e chiamare quella al posto di DatePart... ma probabilmente preferisci intervenire anche quando si può evitare... e su queste scelte io sarei, sono, drastico .

    Carmine Sepe ha scritto:


    sull'utilizzo del carattere speciale effettivamente non è il massimo---->cambio in pr_se
    Il ragionamento NON è estetico... hai usato il DIVISO, che è un carattere riservato per il cui utilizzo ti esponi a possibili ERRORI da parte dell'interprete..., ma anche quì se tanto mi da tanto... correggerai.

    Carmine Sepe ha scritto:


    il campo pr_se puo' assumere ol il valore "pr" (primo piatto) o il valore "se" (secondo piatto), non lo faccio di tipo booleano poiché potrei in futuro dover inserire anche frutta e dolce...

    il Campo "pr/se" (recte pr_se) è un campo della Tb_menù, ed i valori li immetto io (mi serve per distinguere le due "tipologie" di record)
    La sintassi della condizione è questa, ne hai sbagliate una serie di cose... guardaci bene:
    =DLookUp(WeekdayName(Weekday(Date();2);Falso;2);"Tb_menù";"Settimana=" & DatePart("ww";Date();2;1) Mod 4+1 & " And [pr_se]='pr'")
Devi accedere o registrarti per scrivere nel forum
5 risposte