Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 7 su 7

[VBA Access] Automazione OFFICE

  1. #1
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Post
    16,819
    Like Inviati  
    0
    Like Ricevuti  
    23
    INDICE:

    PREMESSA
    AUTOMAZIONE OLE
    LATEBINDING E EARLY BINDING
    GESTIRE EXCEL VIA AUTOMAZIONE
    CONCLUSIONI

    PREMESSA

    Questo breve articolo espone i concetti base per comprendere l'uso dei modelli ad Oggetti esposti da OLE.
    Sono richieste conoscenze di base per la comprensione dei concetti iniziali.

    AUTOMAZIONE OLE

    Le applicazioni di OFFICE (e non solo) espongono tramite l'interfaccia OLE tutto il modello ad oggetti che ne consente la
    completa gestione.
    Questo ci permette di lavorare su WORD/EXCEL/POWERPOINT ecc... tramite il VBA dell'applicazione stessa.
    La cosa più semplice all'inizo è quella di inserire nei RIFERIMENTI del nostro applicativo le LIBRERIE in
    questione.
    Nel nostro esempio EXCEL, quindi da VBA tramite il menù STRUMENTI --->RIFERIMENTI andremo a scorrere la Lista in cerca di :
    Microsoft Excel 10.0 Object Library
    Ovviamente per la versione Office2002

    In questo modo premendo [F2] possiamo accedere al Visualizzatore Oggetti, nel quale troviamo 2 ComboBox nella parte Superiore a Sinistra.
    La prima in alto ci consente di aprire la lista dei Riferimenti, e, selezionando EXCEL ci verrà restituito l'elenco degli Oggetti con tutti i Metodi, Proprietà ed Eventi associati nella Lista sotto.
    E' importante sapere che avendo inserito i riferimenti alla libreria EXCEL abbiamo a disposizione l'HELP completo di Excel del quale non dobbiamo fare a meno...!
    L'inserimento dei RIFERIMENTI nel progetto ha come vantaggio non solo quanto abbiamo detto ma anche l'abilitazione
    dell'Intellisense, vale a dire che ogni oggetto esporrà dopo aver digitato il PUNTO l'elenco di
    Metodi/Proprietà/Eventi.
    Questo metodo ci permetterà anche di EREDITARE gli eventi dell'oggetto stesso...
    Esempio dichiarando la variabile xlsAPP in questo modo possiamo ereditarne gli EVENTI e gestirli dal nostro
    applicativo...!

    Private WithEvents xlsAPP  As Excel.Application
    Private Sub xlsAPP_WorkbookOpen(ByVal Wb As Excel.Workbook)
    ' Gestione dell'Evento
    End Sub
    
    LATEBINDING E EARLYBINDING

    Il sistema di REFERENZA che abbiamo visto è detto EARLYBINDING o associazione preventiva.
    Purtroppo questo sistema ha il grosso svantaggio di rendere RIGIDO il nostro applicativo, vale a dire che se il PC di
    destinazione dispone di una versione differente di OFFICE, e in ogni caso delle Librerie dell'applicativo di Automazione,
    avremo dei grossi problemi, non andrà nulla...!
    Per evitare questa situazione e rendere indipendente il nostro applicativo dalla versione del pacchetto Office del Cliente
    si preferisce(se non si devono ereditare gli Eventi) adottare la tecnica dell'associazione tardiva o LATEBINDING.
    In sostanza lasciamo all'interprete VBA l'assegnazione della tipologia di Oggetto che viene restituito...!
    Esempio:

    Private xlApp   As Object
    
    Sarà la nostra gestione a definire che si tratta di un'oggetto EXCEL e il Tipo di Oggetto verrà definito da quanto
    installato nella macchina.
    Normalmente risulta comodo sviluppare lasciando i riferimenti nel progetto, e solo in fase finale toglierli.
    Servirà fare attenzione all'eventuale uso delle COSTANTI, che con i riferimenti saranno disponibili, ma una volta tolti
    andranno sostituite con i valori ESPLICITI.

    GESTIRE EXCEL VIA AUTOMAZIONE

    Ora apriamo EXCEL e sperimentiamone l'automazione creando da zero un FILE.
    Apriamo un progetto di Access con una Maschera ed un CommandButton cmdOPENXLS, e su evento Click inseriamo questo:

    Private Sub cmdOPENXLS_Click()
     Dim xlApp As Object
     Dim oWks As Object
     Set xlApp = CreateObject("Excel.Application")
     Set oWks = xlApp.Workbooks.Add()
     'xlApp.Visible = True
     oWks.Close True, "D:\Prova.xls"
     xlApp.Quit
     set oWks = Nothing
     Set xlApp = Nothing
    End Sub
    
    Ora se andate a vedere in [D:] troverete un File chiamato Prova.Xls
    In poratica lo abbiamo aperto e richiuso salvandolo, non lo abbiamo reso visibile in quanto
    il processo sarebbe risultato troppo veloce...!
    Ora il File esiste e se lo vogliamo aprire di nuovo le cose cambiano un pò...!

    Private Sub cmdOPENXLS_Click
     Dim xlApp As Object
     Dim oWks As Object
     Set xlApp = CreateObject("Excel.Application")
     Set oWks = xlApp.Workbooks.Open("D:\Prova.xls")
     xlApp.Visible = True
     set oWks = Nothing
     Set xlApp = Nothing
    End Sub
    
    Così come si vedrà abbiamo riaperto il nostro File ma questa volta lo abbiamo lasciato aperto...!
    Si faccia attenzione però che sono state distrutte le variabili OGGETTO, pertanto da Access non lo gestiremo più.
    Se abbiamo la necessità di modificare, scrivere nel nostro foglio di EXCEL potremo accedere a tutto il modello OGGETTI...quindi i RANGE, SELECTION ecc... solo finchè le variabili OGGETTO sono istanziate, quindi prima di distruggerele.

    Se le nostre modifiche al documento possono essere apportata in più momenti, o in ogni caso devono essere gestibili per l'intera vita della Maschera o Applicativo, allora sarà bene dichiarare le variabili OGGETTO a livello di MASCHERA(se la gestione si limita a questa) oppure come Public a livello di Modulo, e prevedere un metodo corretto e preciso per la loro distruzione.

    Option Compare Database
    Option Explicit
     
    Private xlApp   As Object   ' Oggetto EXCEL
    Private oWkb    As Object   ' Oggetto WORKBOOK
    Private Sub cmdOPENXLS_Click
     Set xlApp = CreateObject("Excel.Application")
     Set oWks = xlApp.Workbooks.Open("D:\Prova.xls")
     xlApp.Visible = True
     ' OVVIAMENTE NON DOVREMO DISTRUGGERE LE VARIABILI ADESSO
     'set oWks = Nothing
     'Set xlApp = Nothing
    End Sub
    
    Chiaramente ora dovremo preoccuparci di distruggere le variabili nel momento giusto, quindi un CommandButton
    che effettua la chiusura di EXCEL(ed il salvataggio) oppure in automatico su Unload della Form...!
    Ora non resta che studiarsi il modello ad Oggetti di EXCEL per imparare a gestirlo in modo completo.
    Una cosa estremamente comoda è l'utilizzo del GENERATORE DI MACRO di EXCEL che per una grossa parte delle opzioni
    sarà in grado di scriverci il codice VBA completo, ovviamente da associare agli Oggetti Istanziati dal nostro applicativo.

    CONCLUSIONI

    La stessa metodologia è valida per tutti gli strumenti di OFFICE, basta fare qualche prova per ottimizzare le risorse.

    Allego a questo Tutorial un Demo semplice applicato ad EXCEL, ed un Link ad un Demo decisamente più complesso:
    http://forum.masterdrive.it/area-bet...ne-word-18857/
    File allegati File allegati
    Ultima modifica di @Alex; 23-08-2007 19:38 
    ℹ️ Leggi di più su @Alex ...

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Post
    16,819
    Like Inviati  
    0
    Like Ricevuti  
    23
    Ho dovuto realizzare un piccolo applicativo che generasse una sorta di calendario prenotazioni ferie e assenze con Excel.

    In sostanza si immette l'organico di Reparto con i relativi ruoli, e si assegna ad ogni causale di assenza un colore...

    Il Demo, semplificato, genera il foglio di EXCEL pronto alla stampa in A3.

    Ovviamente non è nulla di pretenzioso, ma mi sembrava un'esempio simpatico che forse poteva essere utile...

    Teoricamente è sviluppato con base A2003, ma ho apportato qualche modifica con A2007, senza modificarne spero la versione...

    P.S. Nomi e Cognomi contenuti come dimostrativo sono puramente inventati.
    File allegati File allegati
    ℹ️ Leggi di più su @Alex ...

  3. #3
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    Post
    7,756
    Like Inviati  
    0
    Like Ricevuti  
    3
    Ciao Alex

    c'è un problema sulla generazione del file in XLS
    in questa stringa
        oWkb.SaveAs CurrentProject.Path & "\CALENDARIO_" & Format$(StartDate, "ddmmyy") & "_" & Format$(StopDate, "ddmmyy") & ".xls" , 56
    
    usando office 2003 non riconosce la variabile 56 (se mi ricordo bene in office 2007 indica il formato 2003)
    Omettendo il 56 il codice fila liscio come l'olio
    per me ti conviene verificare l'office che si usa
    solo con office 2007 o superiore mettere la costante 56, per tutti gli altri ometterla.

    Ciao

    EDIT:
    da anche un errore per il settaggio del foglio in a3
    (penso che sia dovuto al fatto che la stampante di default che uso non supporta gli a3)
    Ultima modifica di dragone bianco; 23-08-2010 15:21 
    ℹ️ Leggi di più su dragone bianco ...

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Post
    16,819
    Like Inviati  
    0
    Like Ricevuti  
    23
    Quote Originariamente inviato da dragone bianco Visualizza il messaggio
    Ciao Alex

    c'è un problema sulla generazione del file in XLS
    in questa stringa
        oWkb.SaveAs CurrentProject.Path & "\CALENDARIO_" & Format$(StartDate, "ddmmyy") & "_" & Format$(StopDate, "ddmmyy") & ".xls" , 56
    
    usando office 2003 non riconosce la variabile 56 (se mi ricordo bene in office 2007 indica il formato 2003)
    Omettendo il 56 il codice fila liscio come l'olio
    per me ti conviene verificare l'office che si usa
    solo con office 2007 o superiore mettere la costante 56, per tutti gli altri ometterla.
    Si purtroppo ho iniziato a lavorare sul File con A2003, ma sul Portatile che ho a casa ho solo A2007, ed ho dovuto mettere quella costante...
    Poco male basta mettere un COMMENTO al codice...
    Quote Originariamente inviato da dragone bianco Visualizza il messaggio
    Ciao

    EDIT:
    da anche un errore per il settaggio del foglio in a3
    (penso che sia dovuto al fatto che la stampante di default che uso non supporta gli a3)
    Si confermo, a casa che ho solo una Stampante a getto d'inchiostro A4 fa uguale, ma al lavoro uso A3, e quel foglio in A4 sarebbe poco visibile per le mie esigenze.

    Grazie per i Feedback, ho pubblicato questo lavoretto solo perchè tutto sommato credo sia una di quelle cose che servono solo a chi le fa, io in questo caso, ma come Demo di Automazione mi è sembrato potesse essere di buon supporto...
    ℹ️ Leggi di più su @Alex ...

  5. #5
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    Post
    7,756
    Like Inviati  
    0
    Like Ricevuti  
    3
    Che ne dici di mettere u link a questo topic (come spunto)
    in una delle guide da te scritte che tratta l'automazione office da access
    per esempio QUI
    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  6. #6
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Post
    16,819
    Like Inviati  
    0
    Like Ricevuti  
    23
    Quote Originariamente inviato da dragone bianco Visualizza il messaggio
    Che ne dici di mettere u link a questo topic (come spunto)
    in una delle guide da te scritte che tratta l'automazione office da access
    per esempio QUI
    Ciao
    Ho fatto il JOIN dei 2 argomenti... intendevi questo oppure solo unire l'allegato...?
    ℹ️ Leggi di più su @Alex ...

  7. #7
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    Post
    7,756
    Like Inviati  
    0
    Like Ricevuti  
    3
    io intendevo un semplice link a questa discussione
    ma così è Ottimo

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Automazione access excel
    Da misterzaga nel forum Microsoft Access
    Risposte: 0
    Ultimo Post: 05-03-2012, 09:53
  2. automazione access
    Da margiu nel forum Microsoft Access
    Risposte: 16
    Ultimo Post: 13-11-2011, 15:42
  3. [Excel]Automazione OLE da VBA ACCESS
    Da Arcor nel forum Microsoft Excel
    Risposte: 8
    Ultimo Post: 01-05-2011, 18:58
  4. Access con automazione Word
    Da noemi nel forum Microsoft Access
    Risposte: 13
    Ultimo Post: 24-04-2008, 21:58
  5. [Office]Automazione con Outlook Late Binding
    Da Cteniza nel forum Progetti e Idee
    Risposte: 0
    Ultimo Post: 19-11-2007, 07:53