+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

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

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

    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,837
    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
    19
    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
    23
    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
    19
    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
    23
    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,837
    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.

+ Rispondi al Thread

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