Dati da sottomaschera a foglio excel

di
Anonimizzato13053
il
7 risposte

Dati da sottomaschera a foglio excel

Buongiorno a tutti

Access 2010

Devo trasferire, dopo aggiornamento di un campo di una sottomaschera, il dato del campo stesso e di alcuni altri campi ad un foglio Excel (in un modulo) che li utilizzerà per eseguire dei calcoli.
Alla sottomaschera aggiungo a mano a mano nuovi record e per ciascuno di essi, ogni volta che esco del campo prescelto, i nuovi dati dovrebbero essere trasferiti al foglio per nuovi calcoli (sempre nelle stesse celle).
Premesso che sono assolutamente inesperto, dopo varie ricerche ho provato a scrivere la seguente routine :

Dim mysheet As Object, myfield As Variant, xlApp As Object
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set mysheet = xlApp.Workbooks.Open("E:\1Botek\Excel\Modelli\Prezzi_last_access.xlsm").Sheets(5)
mysheet.Cells(17, 15).Value = Forms![OrdiniNuovi]![DettagliOrdiniNuovi].Form![Diametro] * 1
mysheet.Cells(18, 15).Value = Forms![OrdiniNuovi]![DettagliOrdiniNuovi].Form![Lunghezza] * 1

La cosa funziona come vorrei ma in effetti ogni volta che aggiungo un record alla sottomaschera ed esco dal campo mi si apre un nuovo modulo (ritengo per il "create object") per cui mi trovo presto con molti moduli excel aperti.
Come potrei fare perchè tutti i record successivi utilizzino sempre lo stesso modulo aperto sostituendo semplicemente i nuovi dati nelle celle preposte?
Se il modulo può creare problemi non ci sono difficoltà a trasformarlo in una normale cartella che non necessariamente deve essere aperta in automatico (potrei aprirla manualmente ad inizio lavoro).
Grazie per l'attenzione e buona giornata.

Cesare

7 Risposte

  • Re: Dati da sottomaschera a foglio excel

    Ovviamente se non distruggi l'oggetto e lo gestisci in modo adeguato, quello che denunci è corretto.

    Secondo me hai preso la strada sbagliata.

    Leggi questo Articolo:
    in particolare la parte INSERT che potrebbe darti una visione diversa molto più funzionale.
  • Re: Dati da sottomaschera a foglio excel

    Grazie per la risposta Alex.
    come ho scritto sono molto inesperto per cui fatico molto a comprendere il sugnificato delle istruzioni. Mi pare di capire però che il mio caso sia un poco diverso.
    Ogni volta che aggiungo un record alla sottomaschera ( 14 campi) i valori di tre campi (ne ho citati solo 2 nel messaggio) devono essere copiati in tre celle diciamo A1,A2 e A3 ( sempre le stesse quindi) del foglio di Excel(sheet 5) che poi eseguirà i conti.
    Quello che ho scritto, pur sicuramente in modo grossolano, funziona perche effettivamente le celle
    vengono popolate dai dati dei campi sottomaschera ma, come detto, ogni volta apre una nuova cartella di lavoro inutilmente (penso perchè lo forza l'istruzione "Set xlApp = CreateObject("Excel.Application").
    Mi basterebbe aprire, anche manualmente la cartella con il foglio di lavoro relativo, e e poi fare in modo che la routine ogni volta attivi il foglio excel aperto e scriva i valori nelle celle corrette.
    Purtroppo non conosco come fare a attivare la cartella con il foglio già aperto.
    Spero di essermi spiegato e mi scuso per le imprecisioni.
    Cesare
  • Re: Dati da sottomaschera a foglio excel

    Ci sono 2 modi per accedere ad Excel e sciverci dentro...
    1) Se è chiuso e va aperto... si usa CREATEOBJECT
    2) Se è aperto e si vuole recuperare l'istanza già aperta, in questo caso si usa GETOBJECT

    Detto questo, come ti dicevo, se dopo aver istanziato il Sevrer di Automazione(Excel) non lo chiudi uscendo è ovvio succeda quanto dici.
    Come si chiude il tutto...?
    Prima chiudi l'Applicazione con Quit, poi distruggi la variabile Oggetto...

    Ora, hai aperto la guida in linea di Excel o Access e letto bene cosa ti propone al fine di usare CREATEOBJECT....?
    Mi pare di no, perchè l'esempio riportato all'interno non è affetto dal problema che dici in quanto attua quello che già 2 volte ho suggerito.
  • Re: Dati da sottomaschera a foglio excel

    Grazie per l'approfondita ed illuminate risposta.
    Ho risolto con GETOBJECT dopo molti tentativi e onestamente senza avere capito esattamente di tutte le istruzioni ciò che ciascuna compie (specialmente nella Sub DetectExcel() ).
    Meno male che, come già 3 volte ho scritto, sono molto inesperto e per questo devo avere avuto la famosa botta.... del principiante.
  • Re: Dati da sottomaschera a foglio excel

    Halla fine lo distruggi l'oggetto oppure lo lasci al suo destino...?
    Hai verificato nel TaskManager che non rimanga aperta una sessione...?
  • Re: Dati da sottomaschera a foglio excel

    Dopo avere eseguito la scrittura dei dati da sottomaschera a Excel mi serve che esso rimanga aperto per riscriverci sopra quando compilo un nuovo record nella sottomaschera.
    Ho quindi escluso di usare il metodo QUIT immediatamente dopo le istruzioni di scrittura ma di rilasciare il riferimento all'applicazione e al foglio di lavoro mediante "Set MyFoglio= Nothing".
    A questo punto il file di Excel rimane aperto e passo nuovamente alla sottomaschera per la compilazione che genera, all'uscita del campo prescelto, la routine per la nuova copiatura in Excel.
    Ho verificato con il Task che una sola un'istanza di Excel sia aperta e così è.
    Quando ho finito il lavoro chiudo manualmente il file Excel.
    spero....che mi sono capito!
  • Re: Dati da sottomaschera a foglio excel

    Se la sessione deve rimanere aperta, allora ti basta DISTRUGGERE l'oggetto creato come hai fatto.
Devi accedere o registrarti per scrivere nel forum
7 risposte