Query a campi incrociati con valori colonna da VBA

di il
2 risposte

Query a campi incrociati con valori colonna da VBA

Ciao,

Ho realizzato una query a campi incrociati che dato un intervallo mi spalma le ore delle varie attivita nell'arco delle settimane.
Quello che ora vorrei fare è sostituire il numero fisso delle colonne che va da 1 a 53 con un numero variabile che verrebbe stabilito mediante del codice VBA.

Ho fatto varie prove (ad esempio):
Public Function Calc_set()

If Calc_set = "" Then Calc_set = 1

If Calc_set < 5 Then
	Calc_set = Calc_set + 1
End If

End Function
oppure
Public Function Calc_set()
Calc_set = 1
while Calc_set < 5 Then
	Calc_set = Calc_set + 1
wend

End Function
ma in colonna mi restuisce sempre e solo l'ultimo valore calcolato, c'è modo per dirgli esegui la function n volte ed ogni volta che calcoli "Calc_set" usalo come nuovo valore colonna?

2 Risposte

  • Re: Query a campi incrociati con valori colonna da VBA

    bean_bandit ha scritto:


    ...
    Ho realizzato una query a campi incrociati che dato un intervallo mi spalma le ore delle varie attivita nell'arco delle settimane.
    ...
    di cui serve la sql per poter ragionare.
    Descrivi meglio il contenuto di questo nuovo valore colonna che deriva da Calc_set e che cosa dovrebbe fare la funzione.
    Immagino che poi sia tutto finalizzato alla stampa di un report. La butto subito qui perché a volte quello che non si riesce a "scrivere" (o meglio a veder scritto) nella query si può costruire nel report.
  • Re: Query a campi incrociati con valori colonna da VBA

    Non ho postato la query perche quello che voglio realizzare è prendere i valori per le colonne direttamente da una function che a sua volta li riceve da una form senza passare alcuna variabile dalla query:
    TRANSFORM ore_da_fare((Nz([Settimana])),(Nz([Data Fine prevista])),(Nz([% Comp Reale])),(Nz([Data Inzio])),(Nz([Sett_inizio_att])),(Nz([Sett_fine_att])),Nz([Ore_settimana])) AS Calcolo_ore
    SELECT [10 Commesse].[Nome progetto], [20 Macchine].[Macchina in Fornitura], [30 Attivita macchine].Attività, [30 Attivita macchine].Codice_Somma, [30 Attivita macchine].[Data Inzio], [30 Attivita macchine].[Data Fine prevista], [30 Attivita macchine].Sett_inizio_att, [30 Attivita macchine].Sett_fine_att, Format((Ore_settimanali((Nz([ore previste])),(Nz([ore extra])),(Nz([Ore interni])),(Nz([Ore Esterni])),(Nz([Sett_fine_att])),(Nz([Sett_inizio_att])))),0) AS Ore_settimana, [30 Attivita macchine].Ordine_operazione, [30 Attivita macchine]![ID_attivita_comune] Mod 2 AS PD
    FROM [10 Commesse] LEFT JOIN (([20 Macchine] LEFT JOIN [150 Settimane] ON [20 Macchine].Id_attivita_comune = [150 Settimane].Riferimenti) LEFT JOIN [30 Attivita macchine] ON [20 Macchine].ID = [30 Attivita macchine].Id_macchina_riferimento) ON [10 Commesse].ID = [20 Macchine].Progetto
    WHERE ((([20 Macchine].[Macchina in Fornitura])=1) AND (([10 Commesse].Stato)="In corso") AND (([20 Macchine].Perc_comp_reale)<>1 Or ([20 Macchine].Perc_comp_reale) Is Null))
    GROUP BY [10 Commesse].[Nome progetto], [20 Macchine].[Macchina in Fornitura], [30 Attivita macchine].Attività, [30 Attivita macchine].Codice_Somma, [30 Attivita macchine].[Data Inzio], [30 Attivita macchine].[Data Fine prevista], [30 Attivita macchine].Sett_inizio_att, [30 Attivita macchine].Sett_fine_att, Format((Ore_settimanali((Nz([ore previste])),(Nz([ore extra])),(Nz([Ore interni])),(Nz([Ore Esterni])),(Nz([Sett_fine_att])),(Nz([Sett_inizio_att])))),0), [30 Attivita macchine].Ordine_operazione, [30 Attivita macchine]![ID_attivita_comune] Mod 2, [30 Attivita macchine].[% Comp Reale], [20 Macchine].Perc_comp_reale
    ORDER BY [10 Commesse].[Nome progetto], [20 Macchine].[Macchina in Fornitura], [30 Attivita macchine].Ordine_operazione
    PIVOT Calc_set();
    
    In questo specifico caso si, il tutto è finalizzato alla costruzione di un report ma vorrei poi applicare questo metodo anche ad altre query che non prevedono report ma che vengono usate come "fogli di calcolo" per copiare ed incollare alcune righe del risultato su excel (lo so che non ha senso ma in questo caso devo piegarmi alla volonta degli utilizzatori)
Devi accedere o registrarti per scrivere nel forum
2 risposte