[Risolto] Visualizzare mese predefinito in due anni differenti.

di il
6 risposte

[Risolto] Visualizzare mese predefinito in due anni differenti.

Buonasera a tutti, sto riscontrando difficoltà a esportare in un mio file excel dei dati relativi a dei fatturati da mettere a confronto. vi faccio un esempio, necessito di visualizzare l'andamento da gennaio 2018 fino a maggio 2018 e rapportarlo a quello da gennaio 2017 a maggio 2017.
Tramite delle query a campi incrociati e successivamente inserendo dei filtri sul mese (Month(campodata)<=5) sono riuscito ad ottenere quello che volevo, ma andando ad automatizzare con una maschera e codice vba, la cosa non tunziona.
Io ho scritto questo codice:

   Dim dbs As Database
    Dim rs As Recordset
    Dim strSQL As String
    Set dbs = CurrentDb
    
    strSQL = "TRANSFORM Sum(ORDINI.NETTO) AS SommaDiNETTO Select ORDINI.FAMIGLIA FROM ORDINI WHERE (Month([DATA])<='" & Me.MESE & "') GROUP BY ORDINI.FAMIGLIA PIVOT Format([ORDINI.DATA], 'yyyy')"

    Me.MESE.SetFocus
    
    Set rs = dbs.OpenRecordset(strSQL)
    
    Dim oApp As Object
    Dim oExe As Workbook
    Set oApp = CreateObject("Excel.Application")
    Set oExe = oApp.Workbooks.Open(Application.CurrentProject.Path & "\TEST.xlsx")
    
    oExe.Application.Visible = True
        
    oExe.Application.Cells(1, 1) = "FAMIGLIA"
    oExe.Application.Cells(1, 2) = "ANNO PRECEDENTE"
    oExe.Application.Cells(1, 3) = "ANNO CORRENTE"
Specifico che in questo modo per l'anno precedente mi somma valori anche di periodi diversi dal mese da me selezionato, ma se trasformo la WHERECONDITION da (Month([DATA])<='" & Me.MESE & "') in (Month([DATA])='" & Me.MESE & "'), funziona correttamente mostrandomi solo il mese selezionato sia di un anno che dell'altro.
Qualcuno che ha capito cosa voglio fare riuscirebbe ad aiutarmi? Grazie.

6 Risposte

  • Re: [Risolto] Visualizzare mese predefinito in due anni differenti.

    Dici che vuoi confrontare i periodi, fra due anni diversi, ma nelle condizioni indicate non vai ad inserire il criterio in base all'anno (Year ...).
  • Re: [Risolto] Visualizzare mese predefinito in due anni differenti.

    willy55 ha scritto:


    Dici che vuoi confrontare i periodi, fra due anni diversi, ma nelle condizioni indicate non vai ad inserire il criterio in base all'anno (Year ...).
    Il punto è che la mia stringa fa da query a campi incrociati, dove i vari anni già raggruppati e divisi, vengono messi nelle colonne in automatico. Il problema è che creando una query tramite la creazione da struttura, il filtro sul solo mese funziona.
    Provo ad allegarti un paio di immagini per spiegarti meglio. La prima immagine mostra il semplicissimo criterio usato, mentre nella seconda il risultato che è effettivamente corretto.
    P.S.: per poter testare ho aggiunto record farlocchi con data a maggio 2019.
  • Re: [Risolto] Visualizzare mese predefinito in due anni differenti.

    Fai attenzione che vi è un errore fra quanto presentato nello screenshot (del tuo ultimo post) con il tuo codice SQL della query a campi incrociati (del primo post) in quanto hai impiegato la funzione Month, che restituisce un valore Variant (Integer) il quale viene confrontato con valore (Me.MESE) racchiuso fra apici (come fosse una stringa).
    Doveva essere qualcosa del genere:
    
    TRANSFORM Sum(Ordini.Netto) AS SommaDiNetto
    SELECT Ordini.Famiglia
    FROM Ordini
    WHERE (Month([DataOpr])<=5)
    GROUP BY Ordini.Famiglia
    PIVOT Format([DataOpr],"yyyy");
    
    Inoltre nella query a campi incrociati non sono stabiliti i due anni, quindi nel tempo (avendo i valori) si avrà un raggruppamento su tutti gli anni (2018, 2019, 2020, 2021, ecc.).
  • Re: [Risolto] Visualizzare mese predefinito in due anni differenti.

    willy55 ha scritto:


    Fai attenzione che vi è un errore fra quanto presentato nello screenshot (del tuo ultimo post) con il tuo codice SQL della query a campi incrociati (del primo post) in quanto hai impiegato la funzione Month, che restituisce un valore Variant (Integer) il quale viene confrontato con valore (Me.MESE) racchiuso fra apici (come fosse una stringa).
    Doveva essere qualcosa del genere:
    
    TRANSFORM Sum(Ordini.Netto) AS SommaDiNetto
    SELECT Ordini.Famiglia
    FROM Ordini
    WHERE (Month([DataOpr])<=5)
    GROUP BY Ordini.Famiglia
    PIVOT Format([DataOpr],"yyyy");
    
    Inoltre nella query a campi incrociati non sono stabiliti i due anni, quindi nel tempo (avendo i valori) si avrà un raggruppamento su tutti gli anni (2018, 2019, 2020, 2021, ecc.).
    Il punto è che dalla casella Me.Mese io seleziono il mese che voglio confrontare tra i due anni. Non mi serve inserire un valore fisso.
    Quindi secondo te vi è un conflitto tra il tipo di valore di Me.Mese e ciò che mi restituisce la funzione Month?
    Ora provo il tuo consiglio e ti faccio sapere.
    Per ora grazie mille!
  • Re: [Risolto] Visualizzare mese predefinito in due anni differenti.

    willy55 ha scritto:


    Fai attenzione che vi è un errore fra quanto presentato nello screenshot (del tuo ultimo post) con il tuo codice SQL della query a campi incrociati (del primo post) in quanto hai impiegato la funzione Month, che restituisce un valore Variant (Integer) il quale viene confrontato con valore (Me.MESE) racchiuso fra apici (come fosse una stringa).
    Doveva essere qualcosa del genere:
    
    TRANSFORM Sum(Ordini.Netto) AS SommaDiNetto
    SELECT Ordini.Famiglia
    FROM Ordini
    WHERE (Month([DataOpr])<=5)
    GROUP BY Ordini.Famiglia
    PIVOT Format([DataOpr],"yyyy");
    
    Inoltre nella query a campi incrociati non sono stabiliti i due anni, quindi nel tempo (avendo i valori) si avrà un raggruppamento su tutti gli anni (2018, 2019, 2020, 2021, ecc.).
    Ciao Willy, inizio già ringraziandoti, effettivamente il vero problema è il fatto che il valore virgolettato di me.mese restituisce un valore incompatibile con quello che restituisce Month. Hi provato a convertire il valore stringa di me.mese in integer, ma cmq il valore nn me lo prende se nn lo metto tra virgolette.
    Ti faccio l'esempio pratico. Per convertire uso questo metodo:
    
    Dim aDbl as Double
    Dim anInt as Integer
    aDbl=Me.MESE
    anInt=CInt(aDbl)
    
    Sono sicuro di sbagliare qualcosa e spero tu o qualcun altro possiate aiutarmi.
  • Re: [Risolto] Visualizzare mese predefinito in due anni differenti.

    Bene ragazzi sembra che abbia risolto semplicemente non mettendo le virgolette a Month(ORDINI.DATA)<=" & MeMESE & "
    Siete stati gentilissimi.
Devi accedere o registrarti per scrivere nel forum
6 risposte