Eseguire Macro Excel apertura del file excel xls



  • Eseguire Macro Excel apertura del file excel xls
    di dancko (utente non iscritto) data: 01/08/2014 12:07:16

    Salve a tutti,

    premetto che sono due giorni che ci provo ma non ci sono riuscito ad ottenere ciò che volevo e non ho trovato nulla su internet che mi potesse essere di aiuto.
    Probabilmente quello che voglio fare non si fa in modo immediato ma c'è biogno di un pò di scripting.

    Comunque, veniamo al dunque:

    tutti i giorni ad una certa ora mi arriva per email un file excel .xls allegato.

    Io scarico il file sul pc ed affettuo alcune operazioni in questo file, che sono sempre le stesse per ogni file .xls che mi arriva.

    Per facilitare il compito, ho creato una macro salvandola nella cartella personale (o globale) di Excel in modo tale da poterla utilizzare su tutti i file excel che mi arrivano per email. Tale macro l'ho creata in modo automatico tramite la opzione "registra macro" di excel. Quindi, ogni giorno che mi arriva il file xls, lo scarico sul mio pc lo apro ed avvio la macro manualmente. Tutto funziona alla perfezione fin qui. Le operazioni che devono essere fatte vengo effettuate dalla macro.

    Quello che non riesco a fare e sto sbattendo la testa da due giorni è la seguente cosa:

    una volta scaricato il file xls allegato sul mio pc, come faccio ad avviare la macro AUTOMATICAMENTE all'apertura del file xls piuttosto che avviarla a mano??

    Leggendo un po su internet ho provato a rinominare la macro come Auto_Open() e salvarla sempre come modulo nella cartella personale (globale).

    Il problema è che ora quando apro il file excel mi da questo errore: Errore di run-time '1004': Metodo 'Sheets' dell'oggetto global non riuscito.

    Qualcuno di voi, più esperto con macro excel, sarebbe così gentile da darmi un suggerimento o direttamente la soluzione?

    Grazie.

    P.S.: Il codice della macro è il seguente e non fa altro che creare un nuovo "Sheet" rinominarlo in "all" e copiare il contenuto dei tre Sheet "sheet1", "sheet2" e "sheet3" in "all"
     
    Sub Auto_Open()
    
    '
    ' Auto_Open Macro
    '
    '
        Sheets.Add After:=Sheets(Sheets.Count)  -- At this line I get the error.
        Sheets("Foglio1").Select
        Sheets("Foglio1").Name = "all"
        Sheets("all").Select
        Sheets("all").Move Before:=Sheets(1)
        Sheets("sheet1").Select
        Range("A1").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Range("A7").Select
        Sheets("all").Select
        ActiveSheet.Paste
        Range("A7").Select
        Sheets("sheet2").Select
        Range("A1").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("A7").Select
        Sheets("all").Select
        ActiveSheet.Paste
        Range("A13").Select
        Sheets("sheet3").Select
        Range("A1").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("A7").Select
        Sheets("all").Select
        ActiveSheet.Paste
        Range("A19").Select
        Columns("A:A").ColumnWidth = 16.86
        Columns("B:B").ColumnWidth = 19.29
    End Sub



  • di Lucas87 data: 01/08/2014 12:16:55

    Ciao
    Nell'editor di VBA, sulla sinistra, nell'elenco trovi ThisWorkbook oppure Questa Cartella di lavoro.
    Cliccandoci sopra 2 volte, sulla destra si apre la finestra dove scrivere il codice.
    In alto in quella finestra ci sono 2 menù a tendina.
    Clicca su quello a sinistra e seleziona Workbook.
    In automatico si crea una macro che si attiverà all'apertura del file.
    Incolla li il tuo codice



  • di dancko (utente non iscritto) data: 01/08/2014 12:35:45

    Si è vero hai ragione, se lo salvo in ThisWorkbook oppure "Questa cartella di lavoro" la procedura funziona solo se apro quel file xls dove ho salvato il codice.

    Il mio problema, che ho anche scritto nel post, è che nel mio caso la procedura non deve essere legata ad un particolare file xls ma bensì ad una qualunque file xls che mi arriva come allegato di una email giornaliera.



  • di lepat (utente non iscritto) data: 01/08/2014 12:41:11

    secondo me non puoi fare quello che chiedi, sarebbe una falla alla sicurezza



  • di dancko (utente non iscritto) data: 01/08/2014 12:48:40

    Ma come sarebbe non si può fare?!

    Mi stai dicendo che non è possibile eseguire una macro in automatico all'avvio di un QUALUNQUE file xls?!

    A me risulta che è possibile. il problema è che non so come si fa.



  • di alfrimpa (utente non iscritto) data: 01/08/2014 13:39:17

    Premetto che forse dico cavolate delle quali mi scuso sin d'ora.

    Io so che è possibile creare un file denominato XLSTART.XLS che viene automaticamente aperto all'avvio di Excel

    All'interno di questo file si potrebbe inserire una macro denominata auto_oper() che anch'essa viene eseguita in automatico per cui in questa potresti inserire le istruzioni per elaborare i tuoi file.

    Ripeto, la mia è solo un'idea che va provata facendo diversi test.

    Prima prova a documentarti cercando su Google XLSTART e auto_open e qualcosa troverai.

    Alfredo





  • di alfrimpa (utente non iscritto) data: 01/08/2014 13:50:30

    Ovviamente qualora la strada da me indicata fosse in qualche modo percorribile, poichè XLSTART parte sempre ad ogni apertura di Excel, occorrerebbe a mio avviso che nella macro auto_open si possa gestire una duplice scelta ossia:

    1) l'utilizzo normale di Excel
    2) l'elaborazione specifica dei file.

    Alfredo





  • di Raffaele_53 (utente non iscritto) data: 01/08/2014 15:38:32

    Non ho capito bene il Tuo codice, comunque a naso copi/incolli i fogli presenti nel foglio ALL

    Tanto per provare...
    Apri un files nuovo e incolla in un MODULO questo codice, metti a posto le righe verdi.
    Crei un bottone ed avvia la macro. In teoria tramite questo files vai ad aggiornare l'altro.
     
    Option Explicit
    Sub elabora()
    Dim sh1 As Worksheet, ws As Worksheet
    Dim rg As Long, Ucol As Long, Uriga As Long, Nome As String, File As String
    Application.ScreenUpdating = False
    ChDir ("C:UsersLelloDocuments") ' mettere la cartella che desideri vedere con lo  finale
    File = Application.GetOpenFilename("Tutti i files (*.xls), *.xls")
    Workbooks.Open File
      rg = 1
      Sheets.Add After:=Sheets(Sheets.Count)
      ActiveSheet.Name = "All" ' da cambiare casomai
      Set sh1 = ActiveWorkbook.Worksheets("All") ' da cambiare casomai
      
      For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "All" Then ''nessuna operazione nel foglio
            Uriga = ws.Range("A" & Rows.Count).End(xlUp).Row
            Ucol = ws.Rows("1:1" & Columns.Count).End(xlToRight).Column
            ws.Range(ws.Cells(1, 1), ws.Cells(Uriga, Ucol)).Copy
            sh1.Cells(rg, 1).PasteSpecial
            rg = rg + (Uriga + 1)
        End If
      Next ws
    sh1.Columns("A:A").ColumnWidth = 16.86
    sh1.Columns("B:B").ColumnWidth = 19.29
    Application.ScreenUpdating = True
    Set ws = Nothing
    Set sh1 = Nothing
    End Sub



  • di dancko (utente non iscritto) data: 01/08/2014 15:54:50

    Io devo avviare la macro all'avvio (apertura) di un qualsiasi file xls.



  • di Raffaele_53 (utente non iscritto) data: 01/08/2014 16:04:04

    Su un file vuoto (potrai chiamarlo ex Master.xls) avviandolo il codice, Ti farà aprire un qualsiasi file (*.xls), nel quale crea un foglio chiamato "ALL" e ogni foglio presente in quello chiamato ALL. Alla fine avraidue file aperti, il Master.xls che puoi anche (chiudere/elaborare un altro file) e l'altro ordinato per come ho capito la Tua richiesta.



  • di dancko (utente non iscritto) data: 01/08/2014 16:14:41

    Uhmm forse ho capito quello che vuoi fare.......
    E se invece di sceglierlo il file da aprire volessi darli il nome di uno specifico file da aprire?

    Se ho ben capito dovrei modificare questa linea di codice.... ma come?

    File = Application.GetOpenFilename("Tutti i files (*.xls), *.xls")

    mettendoci il path del file che voglio aprire?



  • di Raffaele_53 (utente non iscritto) data: 01/08/2014 16:25:54

    Se il nome è sempre lo stesso (nella solita cartella)
     
    Option Explicit
    Sub elabora()
    Dim sh1 As Worksheet, ws As Worksheet
    Dim rg As Long, Ucol As Long, Uriga As Long, Nome As String, Path As String
    Application.ScreenUpdating = False
    Nome = "C:UsersLelloDocumentspippo.xls" 'cambiare percorso e nome
    Workbooks.Open Nome
      rg = 1
      Sheets.Add After:=Sheets(Sheets.Count)
      ActiveSheet.Name = "All" ' se si cambia, da cambiare ovunque
      Set sh1 = ActiveWorkbook.Worksheets("All") ' .......
      
      For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "All" Then ''nessuna operazione nel foglio
            Uriga = ws.Range("A" & Rows.Count).End(xlUp).Row
            Ucol = ws.Rows("1:1" & Columns.Count).End(xlToRight).Column
            ws.Range(ws.Cells(1, 1), ws.Cells(Uriga, Ucol)).Copy
            sh1.Cells(rg, 1).PasteSpecial
            rg = rg + (Uriga + 1)
        End If
      Next ws
    sh1.Columns("A:A").ColumnWidth = 16.86
    sh1.Columns("B:B").ColumnWidth = 19.29
    Application.ScreenUpdating = True
    Set ws = Nothing
    Set sh1 = Nothing
    End Sub



  • di dancko (utente non iscritto) data: 01/08/2014 16:32:17

    Bè il nome non è proprio sempre lo stesso, precisamente ha la seguente forma:

    XXX_dataodierna

    dove XXX è sempre lo stesso... dataodierna varia a secondo del giorno.

    Se ci sarebbe un modo per ricavare la data odierna in VB sarebbe perfetto.



  • di dancko (utente non iscritto) data: 01/08/2014 17:04:00

    Allora Raffaele_53

    ho creato un file Master .xlsm vuoto ed ho incollato il tuo codice in "ThisWorkbook" ma ci sono due problemi:

    il primo è che mi fa le operazioni (creare il foglio "All" e copiare il contenuto degli altri fogli presenti in "all") anche nel file Master. Invece io voglio effettuare queste operazioni solo nel file che si apre.

    il secondo problema è che mi da il seguente errore: errore run-time '9': indice non incluso nell'intervallo.



  • di Raffaele_53 (utente non iscritto) data: 01/08/2014 17:31:05

    >>>dataodierna varia a secondo del giorno
    Va bene, ma come??? Non possono esserci gli "/" oppure gli ""
    Fai un esempio pratico giorno-mese-anno
    pippo-01-08-2014.xls oppure pippo-1-8-2014.xls oppure pippo182014.xls



  • di Raffaele_53 (utente non iscritto) data: 01/08/2014 17:33:02

    >>>ho incollato il tuo codice in "ThisWorkbook"
    Mi sembra d'aver detto in un MODULO e avvii la macro quando il master è già aperto.



  • di dancko (utente non iscritto) data: 01/08/2014 17:38:41

    Esempio nome file: Pippo_01082014.xls

    >>>>Mi sembra d'aver detto in un MODULO e avvii la macro quando il master è già aperto.

    Ma il mio problema (requisito) è che io DEVO avviare la macro in automatico!!!! .... per questo volevo (avevo pensato di) avviarla all'apertura del file xls. Oppure altrimenti un altro modo per avviarla in automatico potrebbe essere quella di lanciarla da un file batch .bat ... Ma si può fare??



  • di Raffaele_53 (utente non iscritto) data: 01/08/2014 18:08:46

    >>>Ma il mio problema (requisito) è che io DEVO avviare la macro in automatico!!!!
    Ti hanno risposto che non si può fare.

    Ma ha te cosa interessa se invece d'aprire Pippo_01082014.xls, apri Master.xls e viene tutto fatto, alla fine chiudero Master.xls e avrai il Tuo files come lo desideraVi.
    Non capisco, ottieni lo stesso risultato (tranne un clic in più)
    Mettilo in un modulo
    Correggi la path+nome
    Crea un bottone e prova a vedere cosa combina. Vedo di darti la data in automatico



  • di Raffaele_53 (utente non iscritto) data: 01/08/2014 18:43:23

    L'allegato, una volta cambiato nel codice percorso e nome funziona.

    In teoria invece di aprire Pippo_01082014.xls devi aprire solo Master.xls.
    Il codice oggi....., provede a fare le modifiche al file con il nome_01082014.xls
    Dopo si chiude da solo, pertanto avrai a monitor solo il file nome_01082014.xls
    Ps. Domani lavora solo sul file nome_02082014.xls





  • di Raffaele_53 (utente non iscritto) data: 01/08/2014 18:49:22

    PPPS Metti la spunta davanti a 'Workbooks("Master.xls").Close
    Finche non l'hai testato (avrai due file aperti), dopo toglierai la spunta ' Comunque basta che elimini il file nome_01082014.xls (Ti dara errore), ma almeno puoi correggere il codice.



  • di dancko (utente non iscritto) data: 03/08/2014 11:23:13

    Raffaele_53, la tua soluzione è davvero interessante, però non è quello che io cerco.

    Quello che io voglio e mi interessa eseguire la macro in automatico in un qualche modo!

    E' possibile realizzare una cosa del genere? Esiste un modo?

    Grazie.



  • di Raffaele_53 (utente non iscritto) data: 03/08/2014 12:11:21

    Non capisco cosa significa per Te "in automatico"?
    Più automatico di cosi non saprei cosa fare.
    Magari puoi aggiungere al PC un avvio del File Master.xls (ogni giorno ad una determinata ora)



  • di dancko (utente non iscritto) data: 03/08/2014 13:26:24

    In pratica io quello che devo fare è aprire il file e poi far nulla piu.

    Quindi vorrei che una volta aperto il file la macro in un qualche modo, se esiste, deve avviarsi da sola.

    Io so che esiste la macro Auto_Open(). Ho anche provato ad utilizzarla, inserendo il codice in tale macro, ma mi funziona per il singolo file excel... non riesco a farla funzionare per OGNI (QUALSIASI) file excel che apro.



  • di Raffaele_53 (utente non iscritto) data: 03/08/2014 14:01:55

    Tu hai richiesto per il file---> Esempio nome file: Pippo_yyyyyyy.xls
    Dove yyyyyyy è la data odierna. Questo il codice lo esegue già

    Mi stai dicendo che qualsiasi file che apri deve fare questo?
    Ritorniamo indietro a quando Ti ho proposto tramite (explora risorse di aprirlo manualmente), che a TE non andava bene.
    Ora non so più cosa fare.



  • di isy data: 03/08/2014 14:08:58

    Ciao

    Come intercettare eventi su altri fogli.
    Allego un esempio APPEVENT.xla
    Si può modificare e inserire in questo foglio le procedure richieste.



  • di dancko (utente non iscritto) data: 03/08/2014 16:49:49

    Raffaele_53..... secondo me parliamo e non ci capiamo. Io quello che cerco l'ho esposto chiaramente ed esaustivamente nel primo post. Se si può realizzare bene... se non si può realizzare non fa nulla... ma basta dirlo senza proporre altre soluzioni o cose che a me non interessano. Se vi interessa darmi una mano leggete il primo post e ditemi se si puo realizzare o meno la mia richiesta.



  • di Raffaele_53 (utente non iscritto) data: 03/08/2014 20:25:16

    >>>Se desideri farmi passare per fesso, OK
    Nel Tuo codice sia --->Sheets("Foglio1") che --->Sheets("sheet1")

    In merito all'ultimo post, la figura del coglione la fai TU
    Con questo passo e chiudo, tanti saluti



  • di dancko (utente non iscritto) data: 03/08/2014 22:15:26

    Raffaele, dai ma non è il caso di fare polemiche.
    Io non voglio far passare per fesso nessuno, ci mancherebbe.
    Probabilmente sono io che non riesco a spiegarmi oppure quello che voglio fare non è possible farlo.
    Ripeto, io volevo qualcosa del tipo salvare una macro tipo Auto_Open() in qualche Workbook Globale e poi usare questa macro in tutti i file xls in modo tale che venisse eseguita all'apertura del file senza cliccare nessun tasto e selezionare alcun file.
    Tutto qua, ma probabilmente ciò non si può fare.



  • di isy data: 03/08/2014 22:47:25

    Cit: In pratica io quello che devo fare è aprire il file e poi far nulla piu.

    Quindi vorrei che una volta aperto il file la macro in un qualche modo, se esiste, deve avviarsi da sola.

    Io so che esiste la macro Auto_Open(). Ho anche provato ad utilizzarla, inserendo il codice in tale macro, ma mi funziona per il singolo file excel... non riesco a farla funzionare per OGNI (QUALSIASI) file excel che apro.

    Non hai provato il file che ho allegato vero

    Procedura
    Carica il file APPEVENTS.xla (poi da copiare in XLStart folder per avviarlo in automatico all'apertura di Excel)
    Ora apri qualsiasi file excel
    Seguono le procedure di evento, utili per la tua richiesta.



  • di dancko (utente non iscritto) data: 03/08/2014 23:03:33

    Ciao isy, avevo letto il tuo intervento ed avevo anche scaricato il file APPEVENT.xla in allegato, pero non avevo ben capito cosa fare.
    Quindi una volta scaricato il file appevent.xla e messo nella cartella XLSTART cosa devo fare?

    Grazie



  • di Raffaele_53 (utente non iscritto) data: 03/08/2014 23:12:21

    isy (esperto sei).....,sicuro? in qualsiasi file?



  • di Raffaele_53 (utente non iscritto) data: 03/08/2014 23:16:50

    APPEVENTS.xla
    Non conosco, se mi spieghi (sarei grato).
    Come funziona e deve funzionare?
    Mille grazie.



  • di isy data: 03/08/2014 23:44:21

    Ciao

    Cit: Quindi una volta scaricato il file appevent.xla e messo nella cartella XLSTART cosa devo fare?

    Prima di generare un file xla per accedere facilmente ai dati di questo foglio create una copia nel formato xls.
    Ora potete appoggiare qui alcuni parametri segnare appunti ecc.

    Questo file in apertura gestisce gli eventi di tutti i fogli attivati con Excel

    Importante:
    Ricordo che se interviene un errore nel codice vba questa procedura si disabilita.
    Allo stesso modo si disabilita modificando il codice.
    Ora tutte le procedure si devono inserire in questo file.
    Con il codice vba si può chiedere in quale percorso è stato aperto il file e tutte le necessità.

    Per riattivare gli eventi durante le prove eseguite: Workbook_Open nel file APPEVENTS.xla
     
    'In ThisWorkbook 
    
    Option Explicit
    
    Private Sub Workbook_Open()
      Set AppClass.app = Application
    End Sub



  • di Raffaele_53 (utente non iscritto) data: 04/08/2014 01:32:15

    Ora isy avra ragione
    Però da inesperto vorrei capire???

    Ultimamente conosco le Macro, non di certo le XlA,
    Se mi spiegate come ad un bambino di tre anni,sarei grato



  • di isy data: 04/08/2014 08:19:45

    Breve spiegazione:
    h t t p ://ennius.altervista.org/free/ifvba125.htm



  • di dancko (utente non iscritto) data: 05/08/2014 22:18:05

    Ciao isy, facciamo una cosa, andiamo con calma altrimenti mi perdo. Un passo per volta piano piano.

    Per prima cosa io ho scaricato e salvato nella cartella XLSTART l'allegato APPEVENT.xla, poi ho fatto una copia e rinominato la copia del documento in APPEVENT.xls. L'opzione "salva con nome" era disabilitata, non mi faceva fare nulla il documento APPEVENT.xla.

    Poi, una volta fatto ciò, cosa devo fare di preciso? Dimmi tu un passo per volta.

    Inoltre quello che ho fatto è aprire il file e mi è comparso un popup a causa di qualche evento catturato da qualche funzione/macro.
    Una volta aperto il file mi sono posizionato sulla scheda "Svilupppo" ed ho premuto il pulsante "Visual Basic". A questo punto sulla sinistra nella cartella "Moduli di classe" del progetto VBAProject (APPEVENT.xla) ho cliccato su "EventClass" dove ho trovato un sacco di codice. Ma poi non so cosa fare.

    Mi puoi indicare dove devo inserire il mio codice per eseguire le operazioni che voglio all'apertura dei file?

    grazie.



  • di isy data: 06/08/2014 00:27:21

    Ciao
    Cit: Per prima cosa io ho scaricato e salvato nella cartella XLSTART l'allegato APPEVENT.xla, poi ho fatto una copia e rinominato la copia del documento in APPEVENT.xls. L'opzione "salva con nome" era disabilitata, non mi faceva fare nulla il documento APPEVENT.xla.

    Non puoi salvare con altro nome un file xla. Io avevo suggerito di creare un file nuonìvo in versione xls per le prove.

    Cit: Mi puoi indicare dove devo inserire il mio codice per eseguire le operazioni che voglio all'apertura dei file?
    Ti allego una versione sempre in formato Xla, puoi effettuare modifiche poi dal modulo Vba premi salva file.
    Ho rimosso alcune righe di codice, ora rimangono le sole righe necessarie.

    In apertura eseguo la routine: Call Messaggio 'Qui le tue routine da avviare...
    Crea in un modulo la tua sub e avviala con call ...

    Vedi allegato APPEVENT IN APERTURA File.xla

    1) Per i test prima carica manualmente il file xla
    Poi apri un file xls per testare la procedura

    Un passo alla volta
     
    Public WithEvents App As Application
    
    Private Sub App_WorkbookOpen(ByVal Wb As Excel.Workbook)
      If UCase(Wb.Name) = UCase(ThisWorkbook.Name) Then
            'Applicazione di controllo
        Else
          'MsgBox "Application Event: WorkbookOpen: " & Wb.Name
          Call Messaggio    'Qui le tue routine da avviare...
      End If
    End Sub



  • di dancko (utente non iscritto) data: 06/08/2014 23:48:08

    Ho effettuato i seguenti passi:

    1) Scaricato e salvato nella cartella XLSTART il file APPEVENT IN APERTURA File.xla

    2) In un modulo del progetto VBAProject(APPEVENT IN APERTURA File.xla) ho inserito il codice della macro che io
    voglio venga eseguito all'apertura di ogni file automaticamente

    3) Ho richiamato tale macro, attraverso il nome che gli ho dato, ad esempio MyMacro, nella parte "Else" della
    macro Sub App_WorkbookOpen sostituendo al posto di "Messaggio" il nome della mia macro "MyMacro".

    4) Ho creato 3 file .xls di esempio per provare e quando li ho aperti la macro si è attivata automaticamente e
    tutto ha funzionato alla perfezione.

    GRANDIOSOOO Isy.... era proprio quello che cercavo. Sei stato un grande. Grazie di tutto. FUNZIONA ALLA PERFEZIONE.