|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
[excel] aggiornamento automatico conteggi su file generato al volo
Ciao a tutti. Spiego velocemente il mio problema.
Ho un file di excel che viene creato al volo con vba da una query di access. Dopo aver riportato nel foglio tutto il recordset di access, accodo ai record alcuni campi calcolati riepilogativi utilizzando la funzione conta.se in questo modo valore1 = xlApp.CountIf(xlSheet.Range(intervallo), "valore1") valore2 = xlApp.CountIf(xlSheet.Range(intervallo), "valore2") Ovviamente se elimino ad esempio una riga nel foglio creato, la funzione conta.se non si aggiorna automaticamente perchè il valore è già stato calcolato. Mi chiedevo quindi se esistesse un modo per ovviare a questo problema. |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Io farei così : 1. Creo una variabile prima dell'esportazione del recordset, che contiene il RecordCount. Questo serve per "costruire" la seguente funzione. Poniamo che questa variabile si chiami "NUM". 2. Sul foglio appena creato fai inserire da Access la formula in questo modo : Range("A" & (NUM + 1)).FormulaR1C1 = "=COUNTIF(R[-" & NUM & "]C:R[-1]C,""11"")" |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Ti ringrazio, sei stato molto gentile (speravo proprio in una tua risposta
![]() Stasera cercherò di mettere in pratica i tuoi consigli, eventualmente tornerò a chiedere. ![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Purtroppo devo chiedere il tuo aiuto. Mi sto incasinando non poco.
![]() Allora, per il momento sto provando il tutto su una query "statica". Penso che una volta capito il meccanismo riuscirò ad adattarlo alle mie query create con QueryDef. Supponendo che il mio foglio generato sia così Codice:
A B C D 1 QUA ANDRA' IL TITOLO 2 ID NOME COGNOME TIPO 3 ... ... ... lavorativo 4 formativo 5 lavorativo 6 ... 17 ... ... ... formativo Ho usato una variabile per il conteggio dei record in questo modo Record = objRST.RecordCount la usavo già prima anche con la mia soluzione casereccia. ![]() Stavo provando ad adattare la tua formula alla mia situazione ma invano. Uno dei vari tentativi è stato questo lavDin = Range("D" & (Record + 2)).FormulaR1C1 = "=COUNTIF(R[-" & Record & "]C:R[-1]C,""lavorativo"")" xlSheet.Cells(Record + 10, 4).Value = lavDin ma mi restituisce FALSO. Grazie per la pazienza. ![]() |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Ho fatto qualche piccolo progresso.
xlSheet.Range("D" & (Record + 3)).FormulaR1C1 = "=COUNTIF(R[-" & Record & "]C:R[-1]C,""lavorativo"")" Se scrivo così nella cella sottostante l'ultimo record, viene visualizzato il numero corretto con la funzione conta.se e anche eliminando le righe il conteggio viene aggiornato nel modo corretto. Però come detto a me serve applicare la funzione quattro volte. Se scrivo così ad esempio, estendendo la conta a due tipologie xlSheet.Range("D" & (Record + 3)).FormulaR1C1 = "=COUNTIF(R[-" & Record & "]C:R[-1]C,""lavorativo"")" xlSheet.Range("D" & (Record + 3)).FormulaR1C1 = "=COUNTIF(R[-" & Record & "]C:R[-1]C,""formativo"")" la conta di lavorativo non appare ed esce solo quella di formativo. Avrei anche un'altra domanda. I conteggi devono trovarsi per forza a partire dalla cella immediatamente sottostante l'ultimo record oppure no? |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Sto ancora provando. Se scrivo
xlSheet.Range("D" & (Record + 3)).FormulaR1C1 = "=COUNTIF(R[-" & Record & "]C:R[-1]C,""lavorativo"")" xlSheet.Range("D" & (Record + 3)).Offset(1, 0).FormulaR1C1 = "=COUNTIF(R[-" & Record & "]C:R[-1]C,""formativo"")" xlSheet.Range("D" & (Record + 3)).Offset(2, 0).FormulaR1C1 = "=COUNTIF(R[-" & Record & "]C:R[-1]C,""avvio impresa"")" xlSheet.Range("D" & (Record + 3)).Offset(3, 0).FormulaR1C1 = "=COUNTIF(R[-" & Record & "]C:R[-1]C,""altro"")" i valori appaiono tutti e quattro ma non fanno riferimento allo stesso intervallo (nel mio esempio d3:d17) ma diventano d4:d18, d5:d19 eccetera. Come faccio a bloccare il range su cui deve agire ? |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
![]() Se tu applichi contemporaneamente le due linee di codice che hai postato, la prima formula verrà inserita, e subito sovrascritta dalla seconda. Puoi mettere il risultato della seconda formula in una cella subito sotto, semplicemente incrementando di 1 quel "(Record+3)". Inoltre c'è un altro errore nel tuo codice, perchè se "stacchi" di 3 celle rispetto all'ultima che contiene un record, il TUTTO sarà : Range("D" & (Record + 3)).FormulaR1C1 = "=COUNTIF(R[-" & (Record + 3 - 1) & "]C:R[-3]C,""11"")" Range("D" & (Record + 4)).FormulaR1C1 = "=COUNTIF(R[-" & (Record + 4 - 1) & "]C:R[-4]C,""11"")" E così via... Prova... ![]() |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Ho già risposto anche al tuo ultimo post...
![]() |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
![]() L' avevo usato io per fare un test... Mettici il TUO valore ovviamente... : Range("D" & (Record + 3)).FormulaR1C1 = "=COUNTIF(R[-" & (Record + 3 - 1) & "]C:R[-3]C,""TUO_VALORE"")" Range("D" & (Record + 4)).FormulaR1C1 = "=COUNTIF(R[-" & (Record + 4 - 1) & "]C:R[-4]C,""TUO_VALORE"")" |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Sei un grande. Adesso funziona tutto. Grazie mille
![]() Ho un'ultimissima domanda e poi non ti stresso più ![]() Mi servirebbe sotto i 4 valori che anche il totale venisse generato automaticamente. Sto facendo un pò di prove ma sicuramente sbaglio la sintassi. |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Così funziona
xlSheet.Range("D" & (Record + 7)).Formula = "=SUM(D" & Record + 3 & ":D" & Record + 6 & ")" Mi hai risolto un grossissimo problema. Grazie ancora di tutto e complimenti. :) |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:58.