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-09T11:51:38+00:00

    Ciao Andrea,

    come facciamo a sapere che, seguendo il tuo esempio, per la Francia, mancano i dati del 2010? E' accettabile che se il valore del primo record del campo sia a lunghezza 0 questo sia sintomo di dati assenti? Se così fosse:


    riga = 5

      Do Until riga = 11

          For i = 7 To TabellaTRAN.Fields.Count

            If Len(TabellaTRAN.Fields(i - 1) & "") = 0 Then GoTo Fine

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

          Next i

          riga = riga + 1

          TabellaTRAN.MoveNext

      Loop


    Devi inoltre inserire un'etichetta Fine per uscire dal tuo ciclo in questo modo:


    ........................

    Fine:

        DocEx.Save

        DocEx.Close

        Set DocEx = Nothing

        Set AppEx = Nothing

    End Sub


    David

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-02-09T10:43:59+00:00

    Ciao David,

    grazie per la risposta.

    Nel tipo di codice di esportazione che utilizzo io e che ti riporto qui sotto:

    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

    E' possibile intervenire dicendo di esportare i dati fino a dove trova i valori alla fine della tabella?

    Per esempio, per il 2010 ho i dati per alcuni Paesi (Germania) mentre per altri no. I dati sono contenuti nella stessa tabella. Quindi nel processo di esportazione dati in excel, deve inserire i dati compreso il 2010 per la Germania, mentre fino al 2009 per la Francia.

    Grazie,

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-02-08T14:32:22+00:00

    La proprietà AskToUpdateLinks dell'oggetto Application ha valore True se all'apertura di un file con collegamenti viene richiesto all'utente di aggiornarli oppure ha valore False se i collegamenti vengono aggiornati automaticamente.

    Tratto dall'help in linea di Excel.

    In sostanza impostando questa proprietà su False la cartella di lavoro viene aperta aggiornando automaticamente i collegamenti.

    Per la seconda domanda (vale per tutti i possibili messaggi) la risposta è no.

    L'altra possibile proprietà in questo senso è DisplayAlerts, sempre dell'oggetto Application.

    Utilizza l'help di Excel per capirne meglio l'uso

    David

    La risposta è stata utile?

    0 commenti Nessun commento