+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Access aprire da codice file excel ed impostare i filtri nelle colonne

  1. #1
    Lelec non è in linea Novello
    Post
    34

    Access aprire da codice file excel ed impostare i filtri nelle colonne

    Ciao a tutti ragazzi!
    Mi servirebbe un aiutino...
    da access 2010 esporto due files excel. Ogni file ha due fogli.
    Vorrei aprire i files e applicare nelle intestazioni colonna dei fogli i filtri e richiudere i files.
    Ma non so come mai ... mi restituisce "Errore di run-time 1004: Metodo Sheets dell'oggetto Global non riuscito"

    utilizzo in codice sotto :

    codice:
    Function Open_AppExcel(path As String)
    
    Dim AppExcel As Excel.Application
    Dim BookExcel As Excel.Workbook
    Dim SheetExcel As Excel.Worksheet
    Dim SheetExcel2 As Excel.Worksheet
    
    
    Set AppExcel = CreateObject("Excel.Application")
    Set BookExcel = AppExcel.Workbooks.Open(path)
    Set SheetExcel = BookExcel.Worksheets("Agenti")
    Set SheetExcel2 = BookExcel.Worksheets("Documenti")
    
    AppExcel.Visible = False
    
    Sheets("Documenti").Activate
    Range("A1:M1").AutoFilter
    Cells.Select
    Cells.EntireColumn.AutoFit
    Range("A1").Select
    
    Sheets("Agenti").Activate
    Range("A1:L1").AutoFilter
    Cells.Select
    Cells.EntireColumn.AutoFit
    Range("A1").Select
    
    
    BookExcel.Close True
    AppExcel.Quit
    
    Set SheetExcel = Nothing
    Set SheetExcel2 = Nothing
    Set BookExcel = Nothing
    Set AppExcel = Nothing
    
    End Function
    Avete qualche suggerimento?
    Grazie

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    15,917
    In che punto...?
    Perché non hai inserito la gestione errori...?
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  3. #3
    Angelo_Tbp non è in linea Novello
    Post
    20
    Si,
    ti consiglio di rivedere i seguenti concetti Differenza tra "Early Binding" e "Late Binding" nel codice utilizzi entrambe le tipologie di approccio e non credo sia il modo giusto di procedere...

    Inoltre devi avere presente che quando crei un oggetto (sia esso applicazione, workbook o worksheet), se vuoi utilizzare metodi specifici (Activate!?! o altro***) devi procedere agendo su tali oggetti (AppExcel, BookExcel, SheetExcel o SheetExcel2) e non sull'oggetto generico "Sheets" sei su access e non su excel quindi non puoi accedere direttamente ai fogli ma devi farlo mediante gli oggetti creati in precedenza.

    ***Infine ti consiglio di lavorare su vba excel e quando tutto funziona copi e incolli tutto in access (a questo punto non ti funzionerà da access).. poi modifichi il tutto in modo da farlo funzionare da access (tramite early binding o late binding) più o meno come hai tentato di fare ora.

  4. #4
    Lelec non è in linea Novello
    Post
    34
    Inserendo la gestione dell'errere, su :
    Sheets("Documenti").Activate
    mi da il messaggio : Errore 1004 generato dal database. Errore definito dall'applicazione o dall'oggetto

  5. #5
    Angelo_Tbp non è in linea Novello
    Post
    20
    Lo ripeto:
    se agisci direttamente nell'editor vba di excel puoi riferirti ai fogli "sheets" direttamente... se lo fai da access invece dei necessariamente passare per gli oggetti creati in precedenza.. non puoi scrivere:
    codice:
    Set AppExcel = CreateObject("Excel.Application")
    Set BookExcel = AppExcel.Workbooks.Open(path)
    Set SheetExcel = BookExcel.Worksheets("Agenti")
    ..per poi non sfruttarli e scrivere quindi:
    codice:
    Sheets("Documenti").Activate
    Range("A1:M1").AutoFilter
    come se fossi nell'editor di vba excel




    inoltre mischi Early binding con Latebinding...

    Prima dichiari delle variabili che presuppongono l'aggiunta di un riferimento specifico a Ms Excel
    codice:
    Dim AppExcel As Excel.Application
    Dim BookExcel As Excel.Workbook
    Dim SheetExcel As Excel.Worksheet
    Dim SheetExcel2 As Excel.Worksheet
    Poi le setti come se il riferimento non ci fosse:
    codice:
    Set AppExcel = CreateObject("Excel.Application")
    Insomma ribadisco quanto ti ho suggerito nel precedente post in quanto la situazione mi sembra invariata

  6. #6
    Lelec non è in linea Novello
    Post
    34
    Grazie!!!
    Così gira... Risolto!


    codice:
    Function Open_AppExcel(path As String)
    
    Dim AppExcel As Excel.Application
    Dim BookExcel As Excel.Workbook
    Dim SheetExcel As Excel.Worksheet
    Dim SheetExcel2 As Excel.Worksheet
    
    
    Set AppExcel = CreateObject("Excel.Application")
    Set BookExcel = AppExcel.Workbooks.Open(path)
    Set SheetExcel = BookExcel.Worksheets("Agenti")
    Set SheetExcel2 = BookExcel.Worksheets("Documenti")
    
    AppExcel.Visible = False
    
    SheetExcel.Activate
    SheetExcel.Range("A1:M1").AutoFilter
    SheetExcel.Cells.Select
    SheetExcel.Cells.EntireColumn.AutoFit
    SheetExcel.Range("A1").Select
    
    SheetExcel2.Activate
    SheetExcel2.Range("A1:L1").AutoFilter
    SheetExcel2.Cells.Select
    SheetExcel2.Cells.EntireColumn.AutoFit
    SheetExcel2.Range("A1").Select
    
    
    BookExcel.Close True
    AppExcel.Quit
    
    Set SheetExcel = Nothing
    Set SheetExcel2 = Nothing
    Set BookExcel = Nothing
    Set AppExcel = Nothing
    
    End Function

  7. #7
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    15,917
    Attenzione che quel codice poi se lo usi su altre macchine potrebbe non andare... devi sviluppare in EarlyBinding, ma poi consolidare il codice con LateBinding.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  8. #8
    Lelec non è in linea Novello
    Post
    34
    Ok grazie!

    ho modificato le dichiarazioni iniziali così:

    codice:
    Dim AppExcel As Object
    Dim BookExcel As Object
    
    Dim SheetExcel As Object
    Dim SheetExcel2 As Object
    E' sufficiente?

    Questo codice viene eseguito all'apertura del DB e succede che se l'apertura viene eseguita manualmente (doppio click sul db) tutto funziona regolarmente... ma se lo faccio eseguire a windows settando l'avvio con la mia utenza dall'unita di pianificazione non gira.

  9. #9
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,613
    Quote Originariamente inviato da Lelec Visualizza il messaggio
    Questo codice viene eseguito all'apertura del DB e succede che se l'apertura viene eseguita manualmente (doppio click sul db) tutto funziona regolarmente... ma se lo faccio eseguire a windows settando l'avvio con la mia utenza dall'unita di pianificazione non gira.
    In quale "parte" del db hai inserito quel codice? Come hai impostato l'avvio con l'utilità di pianificazione di Windows?
    Verifica le varie sezioni del Centro di Protezione (specie se il database è in un percorso di rete e non in locale)

  10. #10
    Lelec non è in linea Novello
    Post
    34
    Il DB si trova in una macchina virtuale.
    Ed in una maschera, all'apertura del Db (dall'unita di pianificazione), vengono richiamate delle funzioni che generano anche degli excel che poi li inoltra ai vari utenti ... e funzionava tutto regolarmente sino a quando ho aggiunto il codice per l'inserimento dei filtri nell'intestazione delle colonne dell'excel.
    Se si apre il DB con il doppio click tutto viene eseguito ... ma quando lo apre l'unità di pianificazione ( con utenza amministrativa e privilegi maggiori) , dal task vedo che rimane l'excel aperto.
    I percorsi li ho impostati tutti come attendibili sia in access che in excel.
    Come mai si incarta ?

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi