Newsgroup: it.comp.appl.access
Titolo: Passaggio dati ad excel

Buongiorno,
quale è il codice per passare i dati ad un file excel già aperto, per ora sono riuscito ad aprire un file excel e passare i dati ma non riesco a passare i dati ad un file che devo tenere aperto. O meglio lo apro una volta e poi lo aggiorno con i dati da access ma in step diversi.
Questa è la parte di codice che uso (valido per aprire il file):
Dim rs As DAO.Recordset
Dim ex As Excel.Application
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Dim i, numrec As Integer
 
'apre excel
Set ex = CreateObject("Excel.Application") 
'
'apre il file xls se non è aperto
If FileIsOpen(Me.lblFileExcel) Then
    ''''Qui sto provando questo codice ma non funziona
    'Set wb = ex.Workbooks.Open(Me.lblFileExcel)
   ex.Workbooks(Me.lblFileExcel).Activate (qui da errore: variabile oggetto o variabile del With non impostato)
Else
    ''''Questo per aprire è ok
    Set wb = ex.Workbooks.Open(Me.lblFileExcel)
End If
.....
 
Grazie
Giuseppe

Se fai un CREATEOBJECT di certo non funziona...
Usa il GETOBJECT per recuperare l'istanza del File già aperto...
 
https://msdn.microsoft.com/it-it/library/e9waz863%28v=vs.90%29.aspx
 
 
@Alex 


Grazie, preciso come sempre Alex
 
Ho fatto così e funziona
If FileIsOpen(Me.lblFileExcel) Then
    Set exob = GetObject(Me.lblFileExcel).Application
    Set ws = exob.Worksheets(Trim(Str(Me.cmbAnno)))
    ws.Activate
    exob.Visible = True
Else
    Set ex = CreateObject("Excel.Application")
    Set wb = ex.Workbooks.Open(Me.lblFileExcel)
    Set ws = ex.Worksheets(Trim(Str(Me.cmbAnno)))
    ws.Activate
    ex.Visible = True
End If
 
Buona giornata
Giuseppe

 If FileIsOpen(Me.lblFileExcel) Then
 
Posso farti una domanda ? 
 
Non conosco questa  funzione  FileIsOpen. Come funziona ? 
E' una funzione standard del VbA ? Potrebbe essermi molto
utile. Mi daresti qualche spiegazione ? 
 


E' una funzione che serve per verificare se un file è già aperto (l'ho trovata in rete ed anche nel NG te la posto se dovesse esserti utile:
 
Function FileIsOpen(ByVal PathName As String) As Boolean
Dim FileN As Integer, ErrNum As Long
On Error Resume Next
FileN = FreeFile()
Open PathName For Input Lock Read As #FileN
Close FileN
ErrNum = Err.Number
On Error GoTo 0
Select Case ErrNum
    Case 0, 53: FileIsOpen = False
    Case Else: FileIsOpen = True
End Select
End Function


Grazie ! Grazie davvero. 
 
Capisco. O meglio : capisco ? :-) 
 
Si basa sul fatto che l' istruzione 
 
Open PathName For Input Lock Read As #FileN 
 
"pretende" l' esclusiva sul file che apre (per scriverci 
dentro, in teoria. Ma invece è una "finta") 
 
Ci  vorrebbe  @Alex  per  conferma :  è tra i più cazzuti 
dell' NG (ammazzelo quanto mena quello. Mi fa impressione
certe volte. Davvero eh ?) 
 
 
 
 
 

Non serve a nulla quel controllo se il File è aperto.
Si usa GetObject, e, nel caso venga rilasciato l'errore 429, si passa a CREATEOBJECT.
 
@Alex

 Si usa GetObject
 
direttamente sul workbook, si. Capito, hai ragione. 
 
Ma in generale quella funzione può essere molto utile x 
verificare  se un  file qualunque è già caricato in RAM 
o no. 
 
E funziona  (correggimi se sbaglio) sfruttando il fatto
che la open in scrittura pretende l'esclusiva sul file. 
 
Corretto ? 
 
 
 


Si il file risulta bloccato... quindi il solo tentativo di readonly genera errore.
 
@Alex


Mi sembra una tecnica intelligente, no ? E generale: vale 
per ogni file di  qualunque tipo (strano che non c' avevo 
mai pensato prima) :  
 
tu "fingi" di voler  lanciare una open in scrittura su un
certo file F. 
 
Siccome la open in scrittura pretende l' accesso esclusivo
se il file è già aperto (perfino dall' utente  stesso)  il 
SO ti manda affanculo : NO ! L' accesso esclusivo  non  te
lo do. 
 
E tu cosi  sgami  che il file è aperto. Geniale. Semplice. 
Sicuro. 
 
Viceversa se non è aperto. l' unico punto debole ( forse)
è che dal momento che lo reputi chiuso al momento in cui 
lo vai ad aprire qualcun altro lo apre e fai bumba. 
 
Però stiamo proprio sull' assurdo, sull' altamente improbabile.
E comunque solo se il file fosse condiviso con altri utenti.