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ù utili
  1. Anonimo
    2012-02-04T14:08:23+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

    Grazie!

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-02-03T14:02:57+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

    Ciao David,

    HAI PERFETTAMENTE RAGIONE!! Ho sbagliato io ad inserirti il testo perché l'ho copiato male e me ne scuso.

    Per quanto riguarda il tuo codice ovviamente è PERFETTO!!

    Volevo chiederti un paio di altre cose: una riguardante il posizionamento all'interno di una query di Access e l'altra che ti chiederò nell'altra discussione perché riguarda l'importazione dati.

    Con move.first mi posiziono all'interno del primo record e primo campo di una query/tabella di access. Ci sarebbe un comando che mi permette di posizionarmi per esempio al record 20 (qualcosa del tipo Move.Record = 20??).

    Grazie di nuovo per la disponibilità e per la pazienza e scusa per il codice inseritoti.

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-02-02T18:32:39+00:00

    Premessa iniziale: non ho possibilità di provare il codice e questo è di per se negativo.

    Se ho ben capito quello che chiedi dovresti provare a modificare il codice nel seguente modo. Per farti capire il punto ti ho inserito la parte prima e la prima riga del dopo, commentando l'inizio e la fine della mia modifica. Al momento funziona solo per la riga 11. Nel caso dovesse andare è facilmente adattabile alle altre righe affette dal problema.


    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

    'modificato

    riga = 11

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

    Dim dblTotale() As Double

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

            For i = 7 To TabellaTRAN.Fields.Count

                dblTotale(i - 6) = dblTotale(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).Value= dblTotale(i - 6)

        Next i

    'fine modifica

    riga = 13

    ....


    Mi dà errore di run-time 9: indice non incluso nell'intervallo nella riga di codice evidenziata.

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

    Grazie e buona serata,

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento