Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 6 123 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 58

totale da più file su un foglio master

  1. #1
    alxleon2000 non è in linea Novello
    Avrei bisogno di sapere se possibile sommare Es " b32 " di vari file ES " c:\gennaio\ 01.01.2013 - 02.01.2013 - C:\ febbraio\01.02.2013-01.02.2013 ecc"
    in una unica cella di un foglio master
    premetto che i file vengono creati giorno per giorno e che quindi non dovrei avere errore anche se il file non è al momento presente
    Es " c:\ luglio\01.07.2013-02.07.2013"

    io ho iniziato a fare questo
    sub totale()
    '
    ' totale Macro
    '

    '
    ActiveWindow.WindowState = xlNormal
    ActiveWindow.WindowState = xlNormal
    Windows("Report totale 1.xlsm").Activate
    ActiveWindow.WindowState = xlNormal
    ActiveWindow.WindowState = xlNormal
    ActiveCell.FormulaR1C1 = _
    "=[01.01.2013.xlsx]Foglio1!R30C7+[04.01.2013.xlsx]Foglio1!R30C7+[05.01.2013.xlsx]Foglio1!R30C7+[01.02.2013.xlsx]Foglio1!R30C7"
    Range("H8").Select
    End Sub

    però ho 2 problemi
    1) se il file non è presente mi da #RIF1
    2) non riesco a settare la cella di destinazione

    qualche aiuto?
    Grazie
    Alex

  2. #2
    UGoldrake non è in linea Scolaretto
    Ciao,
    sarà che a me piacciono un sacco i cicli perché mi risolvono con grande semplicità i problemi, quindi ti proporrei di usarli anche qui.
    Vedo però che usi una versione di excel 2007 o superiori, il problema è che io mi fermo al 2003, prova lo stesso, a volte funziona.

    Quello che ti propongo è di fare un conteggio sistematico di tutte le celle B32 di tutti i fogli a partire dal foglio 2 ("sheets " & NumFoglio) for NumFoglio = 2 to sheets.count, verifica la sintassi perché l'ho scritta al volo.
    Ovvero a partire dal foglio numero 2 fino al foglio il cui numero corrisponde al numero complessivo dei fogli del file excel, cosa fai?

    Imposta una variabile SommaB32 = 0, ed ogni ciclo fai sommare a sé stessa il valore della cella B32, cioè SommaB32 = SommaB32 + range("B32").value

    Questo potrebbe essere l'inizio, ed anche la fine del tuo problema, prova ad impostarlo in questo modo, cedrai i tuoi fogli scorrere per ricavare il contenuto delle varie celle B32 dei vari fogli.

    Non dimenticare di chiudere il programma impostando la cella B32 del foglio Master, cioè con FoglioMaster.Activate range("B32").value = SommaB32

    Il ciclo for-to sheets.count ti leva il problema del foglio inesistente, in quanto considera solo quelli che ci sono sul serio. Fai solo attenzione al fatto che in mezzo ai fogli che vuoi sommare non ci siano fogli che non devono rientrare in quella somma, ordinali prima, altrimenti quando il conteggio arriva a quel foglio ti potrebbe dare errori.

    Ciao, Ugo.

  3. #3
    GiuseppeMN non è in linea Scribacchino
    Buona giornata, Ugo;
    io ho interpretato in modo diverso la richiesta di Alex.
    Magari mi sono confuso, ma credo che la somma vada fatta non fra i vari Fogli di lavoro di un File ma con il valore contenuto in "G30" del Foglio1 di diversi file.

    In questo caso imposterei il discorso utilizzando un Foglio di lavoro d'appoggio nel File "Master" nel quale indicare i File da considerare; successivamente utilizzerei la Tua idea di una Variabile il cui valore si incrementa ad ogni scansione con il valore contenuto in "G30" del Foglio1 dei diversi file.

    Alla fine del ciclo il valore totale viene, come dici Tu, riportato in una Cella del File "Master".

    Se la mia interpretazione è corretta, potremmo pensare di utilizzare una Procedura che "non è farina del mio sacco" ma mi è stata suggerita dall'ottimo dodo (ciao Domenico) con la quale è possibile prelevare uno o più valori da una serie file senza che questi siano necessariamente visualizzati.

    A disposizione.

    Buona domenica.

    Giuseppe

  4. #4
    UGoldrake non è in linea Scolaretto
    Ciao Giuseppe,
    La Tua interpretazione potrebbe essere corretta, chi lo sa? Ah, si Alxleon, lo sa, comunque ora ha entrambe le soluzioni, e ti quoto totalmente perché Dodo è sicuramente uno dei più forti del forum, ciao Dodo.
    Ciao a tutti, Ugo.

  5. #5
    alxleon2000 non è in linea Novello
    Quote Originariamente inviato da GiuseppeMN Visualizza il messaggio
    Buona giornata, Ugo;
    io ho interpretato in modo diverso la richiesta di Alex.
    Magari mi sono confuso, ma credo che la somma vada fatta non fra i vari Fogli di lavoro di un File ma con il valore contenuto in "G30" del Foglio1 di diversi file.

    In questo caso imposterei il discorso utilizzando un Foglio di lavoro d'appoggio nel File "Master" nel quale indicare i File da considerare; successivamente utilizzerei la Tua idea di una Variabile il cui valore si incrementa ad ogni scansione con il valore contenuto in "G30" del Foglio1 dei diversi file.

    Alla fine del ciclo il valore totale viene, come dici Tu, riportato in una Cella del File "Master".

    Se la mia interpretazione è corretta, potremmo pensare di utilizzare una Procedura che "non è farina del mio sacco" ma mi è stata suggerita dall'ottimo dodo (ciao Domenico) con la quale è possibile prelevare uno o più valori da una serie file senza che questi siano necessariamente visualizzati.

    A disposizione.

    Buona domenica.

    Giuseppe
    Ok e' quello che mi servirebbe
    ma non so da dove cominciare " prima volta VBA "
    Grazie
    Alex

  6. #6
    GiuseppeMN non è in linea Scribacchino
    Ciao Alex;
    consentimi di precisare che una delle regole di questo Forum è di non fornire codici completi.
    Ciò detto diciamo che riprendo il Tuo codice Sub Totale().
    Considerando che i test li ho effettuati con Excel 2000, il codice che Ti propongo l'ho chiamato Sub Totale_xls().
    Ripeto, il codice originale mi è stato fornito da dodo47 e, molto indegnamente, ho solo cercato di adattarlo alle Tue esigenze.

    Sono partito da un File (che ho salvato con il nome File Master.xls), in questo file ho previsto due Fogli di lavoro:
    • Master
    e
    • File.
    Nel Foglio di lavoro Master ho considerato solo la Cella "G30", nella quale viene proposto il valore calcolato dal Codice VBA.
    Nel Foglio di lavoro File, nella Colonna "A", partendo dalla Cella "A1", ho inserito il Nome dei file da valutare completi di estensione (esempio: in "A1" NomeFile#01.xls, in "A2" NomeFile#02.xls, in "A3" NomeFile#03.xls ...ecc.).
    Sub Totale_xls()
    Application.ScreenUpdating = False
    Dim oExcel As Excel.Application
    Dim strFile As String
    Dim FileCorrente As Object
    Dim x As Integer
    Dim mFoglio As Worksheet
    Dim mFolder As String
    Dim ext As String
    Dim Val As Integer
    
    ext = "*.xls"   '   Estensione, per Te sarà .xlsx
    Set FileCorrente = ActiveSheet
    Set oExcel = New Excel.Application
    mFolder = "C:\Prove\"   '   Directory (Cartella) dove sono residenti i File
    
    Sheets("File").Select
        For x = 1 To Cells(Rows.Count, "A").End(xlUp).Row
            strFile = Cells(x, 1).Value
                    oExcel.Workbooks.Open mFolder & strFile
                        Val = Val + oExcel.Worksheets("Foglio1").Cells(30, 7)
                    oExcel.ActiveWorkbook.Close False
        Next x
        Sheets("Master").Select
        Range("G30").Value = Val
    ' IMPORTANTE!! chiude e azzera variabili, altrimenti resta l'istanza di excel aperta.
        oExcel.Quit
        Set oExcel = Nothing
        Range("A1").Select
    Application.ScreenUpdating = True
    End Sub
    
    Non ho previsto la gestione degli errori; se è necessario, possiamo provvedere.

    Questa è solo una possibile soluzione; puoi prevedere un ciclo Do While Loop al posto del ciclo For x Next x oppure sbizzarrirti con altre amenità.

    Poi vedi Tu.

    Se hai problemi, sono a disposizione.

    Se ritieni opportuno un segno di gratitudine, questo va a dodo

    Buona serata.

    Giuseppe

  7. #7
    L'avatar di dodo47
    dodo47 non è in linea Topo di biblioteca
    Ciao a tutti
    Solo un piccolo suggerimento: al posto di scrivere i nomi file nel foglio, perchè non inserirli in una cartella dedicata e leggere tale cartella prelevando il dato/i voluti?

    In tal modo si supera anche il fatto che se un file non esiste naturalmente non lo legge.

    saluti

  8. #8
    alxleon2000 non è in linea Novello
    Quote Originariamente inviato da GiuseppeMN Visualizza il messaggio
    Ciao Alex;
    consentimi di precisare che una delle regole di questo Forum è di non fornire codici completi.
    Ciò detto diciamo che riprendo il Tuo codice Sub Totale().
    Considerando che i test li ho effettuati con Excel 2000, il codice che Ti propongo l'ho chiamato Sub Totale_xls().
    Ripeto, il codice originale mi è stato fornito da dodo47 e, molto indegnamente, ho solo cercato di adattarlo alle Tue esigenze.

    Sono partito da un File (che ho salvato con il nome File Master.xls), in questo file ho previsto due Fogli di lavoro:
    • Master
    e
    • File.
    Nel Foglio di lavoro Master ho considerato solo la Cella "G30", nella quale viene proposto il valore calcolato dal Codice VBA.
    Nel Foglio di lavoro File, nella Colonna "A", partendo dalla Cella "A1", ho inserito il Nome dei file da valutare completi di estensione (esempio: in "A1" NomeFile#01.xls, in "A2" NomeFile#02.xls, in "A3" NomeFile#03.xls ...ecc.).
    Sub Totale_xls()
    Application.ScreenUpdating = False
    Dim oExcel As Excel.Application
    Dim strFile As String
    Dim FileCorrente As Object
    Dim x As Integer
    Dim mFoglio As Worksheet
    Dim mFolder As String
    Dim ext As String
    Dim Val As Integer
    
    ext = "*.xls"   '   Estensione, per Te sarà .xlsx
    Set FileCorrente = ActiveSheet
    Set oExcel = New Excel.Application
    mFolder = "C:\Prove\"   '   Directory (Cartella) dove sono residenti i File
    
    Sheets("File").Select
        For x = 1 To Cells(Rows.Count, "A").End(xlUp).Row
            strFile = Cells(x, 1).Value
                    oExcel.Workbooks.Open mFolder & strFile
                        Val = Val + oExcel.Worksheets("Foglio1").Cells(30, 7)
                    oExcel.ActiveWorkbook.Close False
        Next x
        Sheets("Master").Select
        Range("G30").Value = Val
    ' IMPORTANTE!! chiude e azzera variabili, altrimenti resta l'istanza di excel aperta.
        oExcel.Quit
        Set oExcel = Nothing
        Range("A1").Select
    Application.ScreenUpdating = True
    End Sub
    
    Non ho previsto la gestione degli errori; se è necessario, possiamo provvedere.

    Questa è solo una possibile soluzione; puoi prevedere un ciclo Do While Loop al posto del ciclo For x Next x oppure sbizzarrirti con altre amenità.

    Poi vedi Tu.

    Se hai problemi, sono a disposizione.

    Se ritieni opportuno un segno di gratitudine, questo va a dodo

    Buona serata.

    Giuseppe
    Ho provato così:

    Sub Totale_xlsx()
    Application.ScreenUpdating = False
    Dim oExcel As Excel.Application
    Dim strFile As String
    Dim FileCorrente As Object
    Dim x As Integer
    Dim mFoglio As Worksheet
    Dim mFolder As String
    Dim ext As String
    Dim Val As Integer

    ext = "*.xlsx" ' Estensione, per Te sarà .xlsx
    Set FileCorrente = ActiveSheet
    Set oExcel = New Excel.Application
    mFolder = "D:\01 Gennaio\" ' Directory (Cartella) dove sono residenti i File

    Sheets("File").Select
    For x = 1 To Cells(Rows.Count, "A").End(xlUp).Row
    strFile = Cells(x, 1).Value
    oExcel.Workbooks.Open mFolder & strFile
    Val = Val + oExcel.Worksheets("Foglio1").Cells(30, 7)
    oExcel.ActiveWorkbook.Close False
    Next x
    Sheets("Master").Select
    Range("G30").Value = Val
    ' IMPORTANTE!! chiude e azzera variabili, altrimenti resta l'istanza di excel aperta.
    oExcel.Quit
    Set oExcel = Nothing
    Range("A1").Select
    Application.ScreenUpdating = True
    End Sub

    Mi restituisce un errore " Errore di run-time 6 Overflow "

    Debug mi evidenzia questa stringa " Val = Val + oExcel.Worksheets("Foglio1").Cells(30, 7) "

    Grazie
    Alex

  9. #9
    GiuseppeMN non è in linea Scribacchino
    Buona giornata, Alex;
    consentimi di argomentare la variazione che ho eseguito sulla Procedura proposta originariamente da dodo.

    Ciao, Domenico; in questo caso ho preferito dichiarare i File da valutare per poter sceglierne solo alcuni di quelli presenti nella Directory (Cartella) desiderata. In realtà la Tua Procedura proponeva esattamente quello che indichi nella Tua risposta.
    Nel caso i cui Alex preferisca non dover indicare i File da valutare, in questo caso risparmierebbe un Foglio di lavoro visto che il Foglio File non servirebbe più, possiamo modificare opportunamente il Codice VBA; in questo caso userei un ciclo Do While Loop.

    Per quanto riguarda l'errore indicato da Alex, credo si tratti di definire in modo più appropriato la variabile Val.
    Avendo dichiarato Val come Integer, consente di memorizzate numeri interi a 2 byte nell'intervallo da -32.768 a 32.767 (vedi guida i linea).
    Se queso range non viene rispettato si genera, appunto, un errore di Overflow.
    In questo caso si dovrà pensare di modificare la definizione di Val.
    Le alternative sono dichiare Dim Val As Long oppure Dim Val As Currency; la differenza fra queste definizioni si può riscontrare agevolmente nella guida in linea

    A disposizione.

    Buona giornata e buon lavoro.

    Giuseppe

  10. #10
    alxleon2000 non è in linea Novello
    Buongiorno

    Ok Dim Val AS Long va bene

    adesso avrei bisogno di una piccola variabile da inserire " se manca il file "

    io preparo il foglio per tutto l'anno quindi inserisco il nome di tutti i file
    possibile ?

    Grazie
    Alex

+ Rispondi al messaggio
Pagina 1 di 6 123 ... ultimoultimo

Potrebbero interessarti anche ...

  1. Risposte: 1
    Ultimo Post: 23-11-2017, 08:35
  2. Totale in sottomaschera in visualizzazione foglio dati
    Da Kestrel nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 14-11-2016, 13:40
  3. Risposte: 4
    Ultimo Post: 17-05-2015, 14:19
  4. Risposte: 4
    Ultimo Post: 13-03-2013, 15:54
  5. In VB6 trovare il totale dei rcord in file .XLS
    Da aldodellacasa nel forum Visual Basic 6
    Risposte: 4
    Ultimo Post: 26-04-2007, 18:14