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-01-30T13:46:02+00:00

    Ciao Andrea,

    il problema è legato al test che viene fatto in questo blocco di istruzioni.


        For i = 57 To tabellaCON.Fields.Count

        If Len(tabellaCON.Fields(i - 1) & "") = 0 Then Exit For

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

        Next i


    e deriva dal fatto che nel momento cui fai il test la tabellaCON è in stato EOF.

    Modifica così:


        If tabellaCON.EOF Then tabellaCON.MovePrevious

        For i = 57 To tabellaCON.Fields.Count

        If Len(tabellaCON.Fields(i - 1) & "") = 0 Then Exit For

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

        Next i


    David

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-01-30T11:02:11+00:00

    Stavolta c'è! :D

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-01-30T10:35:24+00:00

    Ciao! Sbagliavo io. Eccolo.

    La risposta è stata utile?

    0 commenti Nessun commento