Esportazione da access ad excel

Anonimo
2012-02-01T09:54:45+00:00

Ciao,

volevo avere un'indicazione sul codice che potrei utilizzare per esportare dei dati di una query di Access 2000-2002 in un foglio excel. Più precisamente in alcune righe di excel devo inserire un valore che è somma di alcune righe della query di Access ((per esempio in excel ho A = B+C+D, ma appare solo A),  mentre in Access ho B,C e D). Volevo sapere come poter esplicare questa necessità con il codice sql.

Grazie,

Andrea

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2012-02-04T09:20:28+00:00

Ciao Andrea

non esiste un comando diretto. Puoi però sfruttare un ciclo per spostarti fino al record che ti interessa.

Di eseguito un esempio banale:


Dim db As DAO.Database

Dim rst As DAO.Recordset

Dim i As Integer

Set db = CurrentDb

Set rst = db.OpenRecordset("TUATABELLA/QUERY")

With rst

    For i = 1 To 19  'ciclo spostandomi fino al record 20

        .MoveNext

    Next

End With

MsgBox rst.Fields(0)

rst.Close

db.Close

Set rst = Nothing

Set db = Nothing


David

La risposta è stata utile?

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2012-02-03T10:55:19+00:00

Non ho capito come mai non riesci a provare il codice: se è perché manca la tabella country ho riaggiornato il database su skydrive.

Non offenderti, ma Io veramente non capisco come possa funzionare quel codice. Perlomeno quello che è nel file access che metti a disposizione. Probabilmente fai un'estratto del tuo file reale ma dovresti fare in modo che comunque il codice sia funzionante. Prova a compilarlo: ci sono 2 sub con lo stesso nome (aggiorna) un paio di While senza Loop e tutto il codice che dovrebbe scrivere nel foglio excel è all'esterno di una routine.

Ieri sera non potevo provarlo semplicemente perchè dovevo prima riscriverne una parte.

Ad ogni modo, stamattina avevo un po' di tempo e l'ho sistemato in modo da rendelo operativo. Ho fatto queste modifiche per le righe 11 e 12 che, pare, funzionino. Provale anche tu.


riga = 5

  Do Until riga = 11

      For i = 7 To TabellaTRAN.Fields.Count

        DocEx.Worksheets(nometabella).Cells(riga, i - 1) = TabellaTRAN.Fields(i - 1)

      Next i

      riga = riga + 1

      TabellaTRAN.MoveNext

  Loop

'inizio modifica

riga = 11

Dim contaOccorrenze As Integer  '--> SOP+SOT+TWO+WIN+OSO

Dim vTotale() As Variant

ReDim vTotale(1 To TabellaTRAN.Fields.Count)

    For contaOccorrenze = 1 To 5    '-->SOP+SOT+TWO+WIN+OSO

        For i = 7 To TabellaTRAN.Fields.Count

            vTotale(i - 6) = vTotale(i - 6) + TabellaTRAN.Fields(i - 1)

        Next i

        TabellaTRAN.MoveNext

    Next contaOccorrenze

    For i = 7 To TabellaTRAN.Fields.Count

        DocEx.Worksheets(nometabella).Cells(riga, i - 1).Formula = vTotale(i - 6)

    Next i

riga = 12

Erase vTotale()

ReDim vTotale(1 To TabellaTRAN.Fields.Count)

    For contaOccorrenze = 1 To 10    '-->INW+MWR+MWN+PSB+BGA+BOL+BDI+OLB+NSP+CHA

        For i = 7 To TabellaTRAN.Fields.Count

            vTotale(i - 6) = vTotale(i - 6) + TabellaTRAN.Fields(i - 1)

        Next i

        TabellaTRAN.MoveNext

    Next contaOccorrenze

    For i = 7 To TabellaTRAN.Fields.Count

        DocEx.Worksheets(nometabella).Cells(riga, i - 1).Formula = vTotale(i - 6)

    Next i

'fine modifica

riga = 13

'... prosegue con il tuo codice


Nota aggiuntiva: normalmente la dichiarazione delle variabili andrebbe all'inzio del codice. Per brevità di esposizione le due dichiarazioni aggiunte

Dim contaOccorrenze As Integer  '--> SOP+SOT+TWO+WIN+OSO

Dim vTotale() As Variant

le ho inserite nella mia modifica. Sarebbe opportuno spostarle all'inzio della routine.

David

La risposta è stata utile?

0 commenti Nessun commento

71 risposte aggiuntive

Ordina per: Più recente
  1. Anonimo
    2013-05-02T11:30:44+00:00

    Ciao Andrea,

    perdonami ma a me sembra che il problema si presenti anche con la Francia.

    ho provato ad eliminare tutti i dati presenti nel range G18:BF43 e poi ho fatto girare la tua routine.

    I dati del 2010 e successivi non vengono mai inseriti, in nessuna delle celle della colonna BE e successive.

    Non è un problema di righe, ma di colonne.

    Considera questa porzione di codice:


        riga = 18

        Do Until riga = 44

            For i = 8 To tabellaCAP.Fields.Count - 41

                DocEx.Worksheets(nometabella).Cells(riga, i - 1) = tabellaCAP.Fields(i - 1)

            Next i

            riga = riga + 1

            tabellaCAP.MoveNext

        Loop


    la variabile i si incrementerà a partire da 8 fino a 57 (totale fields 98 - 41).

    Nel momento in cui i = 57 ovvero raggiunge il suo massimo l'istruzione seguente

               DocEx.Worksheets(nometabella).Cells(riga, i - 1) = tabellaCAP.Fields(i - 1)

    avrà il seguente significato:

    scrivi nelle celle da riga (da 18 a 43) colonna 56 il valore del campo 56 del recordset tabellaCAP

    Il problema è che il 2010 nel tuo foglio Excel è riportato in colonna BE che con la semplice istruzione

    ?Columns("BE").Column

    in finestra immediata risulta essere la colonna 57. Colonna che però tu non scrivi a seguito della condizione imposta.

    Per questo motivo a mio avviso tutti i valori successivi al 2009 non vengono inseriti nel foglio Excel.

    Nella riga

        For i = 8 To tabellaCAP.Fields.Count - 41

    prova ad eliminare 41 oppure abbassarne il valore in modo da includere anche gli anni successivi presenti nella query da cui trai i dati.

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-05-02T09:59:17+00:00

    Ciao a tutti!

    Volevo chiedere un piccolo aiuto su un problema che mi capita quando provo ad esportare dati da Acess ad Excel.

    Ho provato a riproporlo qui (db access contenente query da cui prendo i dati e maschera con codice che porta i dati da access ad excel, file excel dove portare i dati):

    - la maschera prevede la scelta del paese da aggiornare: se viene effettuata per France (file excel presente ma non aggiornato) i dati che vengono aggiornati sono quelli dalla riga 18 alla riga 43 dall'anno 1960 all'anno 2011 e non dà alcun tipo di problema. Se cambiassi Paese (per esempio Italy, cambiando anche il nome del file excel Power Italy 2012), non tutti questi dati vengono aggiornati: in particolare, i dati del 2010 e 2011 per le righe 42 e 43 non vengono riportati.

    Questo problema succede SOLO per Italy e non per tutti gli altri 30 Paesi e non solo per questo aggiornamento ma anche per altre celle nello stesso foglio o in altri fogli (che non ho riportato) sempre per gli anni 2010 e 2011 (quando i dati sono disponibili).

    Sinceramente non riesco a capirne il motivo. Qualcuno può essermi d'aiuto? Grazie e buona giornata! Andrea

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-01-30T14:23:21+00:00

    Grazie David! Gentilissimo come al solito. Buona giornata!

    La risposta è stata utile?

    0 commenti Nessun commento