Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[excel] autografico

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: [excel] autografico

Postdi ramset64 » 29/06/09 19:12

Flash tu sei molto gentile e disponibile, ti ringrazio per questo ma mi sono stufato di questi grafici.
Se non ti è troppo complicato mi sarebbe più utile il codice di cui parlavo prima, ovvero che elemini il foglio5 e mi sostituisca il codice di un intero modulo. Cosi facendo riporto i file ad avere solo fogli con dati e niente grafico e non avrei problemi. Se non fosse possibile vorrà dire che ci passerò il prossimo fine settimana e metterò a posto i file uno per uno.
Grazie, ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Sponsor
 

Re: [excel] autografico

Postdi Flash30005 » 30/06/09 02:06

Questa macro cancella il foglio5 di ogni file che hai nell'elenco colonna A1 del foglio1
Codice: Seleziona tutto
Sub CancellaF()
URT = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
For T = 1 To URT
    FileExc = Worksheets("Foglio1").Range("A" & T).Value
    If FileExc = "" Then
        MsgBox "Non ci sono file nella directory"
        Exit For
    End If
Workbooks.Open Filename:=FileExc
    Sheets("Foglio5").Select
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
Next T
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

E' un peccato che tu abbia deciso di rinunciare perché la soluzione, per avere i grafici aggiornabili automaticamente, esiste.
Le macro che "girano" in Excel sono perfettamente compatibile per girare in Word.
Potresti ottenere l'elenco dei file automaticamente in un file testo quindi non avrai nessun foglio excel aperto ma solo quello che aggiornerai e, con il codice ActiveWorkbook.Close (usato anche in questa macro),
lo chiuderai e potrai processare un altro file di excel fino alla fine dell'elenco (tutte le righe del file testo).
Di esempi, che usano questa tecnica, in questo forum, ce ne sono molti ma se decidessi di voler intraprendere questa strada troverai sempre un aiuto.

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] autografico

Postdi Anthony47 » 30/06/09 08:28

Consiglio forse inutile, vista l' esperienza fatta: prima di queste operazioni massive fare sempre "due copie di backup" dei file originali.

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] autografico

Postdi ramset64 » 30/06/09 11:00

Flash purtroppo mi è indispensabile che il file che contiene la macro di aggiornamento sia un file di excel per vari motivi.
Grazie per il codice, purtroppo però non mi risolve il problema perchè restano attiva le macro che richiamo il grafico. sarebbe necessario poter sostituire l'intero contenuto di un modulo con il codice corretto, altrimenti è inutile perchè comunque dovrei correggere i file uno ad uno.

per anthony, hai ragione, l'avessi fatto adesso non avrei questo problema.

Grazie, ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [excel] autografico

Postdi Flash30005 » 30/06/09 12:13

ramset64 ha scritto:Flash purtroppo mi è indispensabile che il file che contiene la macro di aggiornamento sia un file di excel per vari motivi.

Quindi è da escludere eventualmente anche Access?
(Elenco-file in una tabella e macro in access per aggiornare i grafici di ogni foglio excel)

ramset64 ha scritto:Grazie per il codice, purtroppo però non mi risolve il problema perchè restano attiva le macro che richiamo il grafico. sarebbe necessario poter sostituire l'intero contenuto di un modulo con il codice corretto...

Ricordavo di aver letto un post a proposito e l'ho ritrovato.
viewtopic.php?f=26&t=80543&p=458286&hilit=macro+per+scrivere+macro#p458286

Anthony47 ha scritto:Comincia a guardare questa discussione (i primi due messaggi): viewtopic.php?f=26&t=65595
In linea di massima imposterai la ricerca del codice da cambiare e la sua sostituzione con una sequenza di questo tipo:
Codice: Seleziona tutto
For I=1 to ThisWorkbook.VBProject.VBComponents("Modulo1").CodeModule.CountOfLines
CodeLine = ThisWorkbook.VBProject.VBComponents("Modulo1").CodeModule.Lines(I, 1)
If CodeLine="La tua istruzione da cambiare, come stringa valida (attenzione agli apici...)" Then
ThisWorkbook.VBProject.VBComponents("Modulo1").CodeModule.DeleteLines I
ThisWorkbook.VBProject.VBComponents("Modulo1").CodeModule.InsertLines (I), "La nuova stringa di Codice"
Exit For
Next I
If I >= ThisWorkbook.VBProject.VBComponents("Modulo1").CodeModule.CountOfLines then
Msgbox("La riga cercata non e' stata trovata")
Else Msgbox("Sostituita riga " & I & " con nuova stringa")

Con queste istruzioni cerchi quale linea del tuo codice contiene l' istruzione da modificare, quini la togli e la sostituisci con la nuova.
Richiede che sia definito come "attendibile l' accesso al progetto visual basic": prima di xl2007 bastava Menu /Strumenti /Macro /Protezione, tab Fonti attendibili; qui si spunta la voce suddetta. Con xl2007 non so come si fa...

Se hai già utilizzato questa soluzione di Anthony puoi inserirla nella macro "CancellaF" nel punto indicato:
Codice: Seleziona tutto
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< inserire qui la macro che modifica macro
    ActiveWorkbook.Close
    Application.DisplayAlerts = True


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] autografico

Postdi Anthony47 » 30/06/09 12:52

La procedura completa potrebbe essere la seguente:
-nel file in cui inserisci la macro (che poi "lavora" tutti gli altri file), inserisci un "modulo vba" in cui scrivi tutto quello che vuoi inserire nei file che "lavori"; supponiamo che si chiami Modulo5
-usi questo codice

Codice: Seleziona tutto
ThisWorkbook.VBProject.VBComponents("Modulo5").Export ("c:\disperato.bas")
'>>Qui devi avere attivato il file da manipolare, FORSE userai Windows(FileExc).Activate
For I = ActiveWorkbook.VBProject.VBComponents("Modulo3").CodeModule.CountOfLines To 1 Step -1
ActiveWorkbook.VBProject.VBComponents("Modulo3").CodeModule.DeleteLines I
Next I

Application.VBE.ActiveVBProject.VBComponents.Import ("c:\disperato.bas")

La prima riga esporta Modulo5 in un file .bas; le successive svuotano il Modulo che contiene le istruzioni sbagliate (ho usato Modulo3 come ESEMPIO); l' ultima importa il modulo con le istruzioni che ti servono.

Il tutto e' da integrare con le altre istruzioni di Flash, ma dovrebbe bastare inserirle dopo Workbooks.Open Filename:=FileExc (in questo caso la riga marcata >> la puoi anche ignorare). Se vuoi risparmiare qualche millisecondo per ciclo, inserisci l' istruzione che esporta Modulo5 prima del loop For T = 1 To URT /Next I.

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] autografico

Postdi ramset64 » 30/06/09 15:54

Ragazzi siete fantastici, non so come ringraziarvi. Purtroppo però continuo ad aver problemi.
Ho già eseguito il codice di flash e quindi cancellato il foglio5.
Adesso sto provando ad eseguire il codice suggerito da Anthony e purtroppo va in errore perchè ad ogni file che apro, viene eseguita la macro di richiamo al grafico (che non ce) e quindi va in errore. Purtroppo avevo inserito il codice di richiamo per il grafico in Workbook_Open().
Credo proprio di dover fare il resto a manina o sbaglio?

Ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [excel] autografico

Postdi Anthony47 » 30/06/09 16:50

Questa volta avrai fatto il back-up... o no??
Se NO 1) no comment :evil: ; 2)prova aggiungendo questa prima di Workbooks.Open Filename:=FileExc
Codice: Seleziona tutto
Application.EnableEvents = False
e questa prima di End Sub
Codice: Seleziona tutto
Application.Enableevents = True


Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] autografico

Postdi ramset64 » 30/06/09 17:14

Domanda di riserva? :)
Poco sarebbe cambiato visto che quella macro va comunque in errore.
Ho utilizzato questo codice:
Sub CAMBIAMODULO()

ChDrive Range("Drive") 'per cambiare drive
ChDir Range("Path") 'path per i file da aprire
ThisWorkbook.VBProject.VBComponents("modulo1").Export ("D:\disperato.bas")



URT = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
For T = 5 To URT
FileExc = Worksheets("Foglio1").Range("A" & T).Value
If FileExc = "" Then
MsgBox "Non ci sono file nella directory"
Exit For
End If
Application.EnableEvents = False
Workbooks.Open Filename:=FileExc

For I = ActiveWorkbook.VBProject.VBComponents("FOGLIO1").CodeModule.CountOfLines To 1 Step -1
ActiveWorkbook.VBProject.VBComponents("FOGLIO1").CodeModule.DeleteLines I
Next I

Application.VBE.ActiveVBProject.VBComponents.Import ("D:\disperato.bas")
ActiveWorkbook.Close SaveChanges:=True
Application.DisplayAlerts = True
Next T
Application.EnableEvents = True
End Sub

Il codice viene esportato correttamente, il modulo foglio1 viene cancellato correttamente, ma il nuovo codice non viene importato.
P.s. il modulo da cambiar è il modulo foglio1 (in pratica sono tutti i richiami ai pulsanti delle vari macro).

Ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [excel] autografico

Postdi Anthony47 » 30/06/09 23:06

Lo avevi gia' detto che si trattava di Foglio1?
Devo riassemblare, non so se ci riesco piu' tardi...

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] autografico

Postdi ramset64 » 01/07/09 09:32

No, non l'avevo detto anche perchè non ricordavo nemmeno io come fosse strutturato il tutto. Chiedo venia!
Grazie saluti
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [excel] autografico

Postdi Anthony47 » 01/07/09 14:21

Allora...
Invece di quanto descritto nel post precedente, idoneo per copiare "Moduli standard" di codice, usa questo approccio:
-nel file che contiene la macro che "lavora" gli altri file, in un "Modulo di foglio" inserisci il codice da esportare
-poi usa questo codice:
Codice: Seleziona tutto
Windows("Esempio.xls").Activate     '<<< Attiva il foglio target
'clear vecchio codice:
For I = ActiveWorkbook.VBProject.VBComponents("Foglio1").CodeModule.CountOfLines To 1 Step -1
ActiveWorkbook.VBProject.VBComponents("Foglio1").CodeModule.DeleteLines I
Next I
'Copia il nuovo codice:
For I = ThisWorkbook.VBProject.VBComponents("Foglio3").CodeModule.CountOfLines To 1 Step -1
CodeLinex = ThisWorkbook.VBProject.VBComponents("Foglio3").CodeModule.Lines(I, 1)
ActiveWorkbook.VBProject.VBComponents("Foglio1").CodeModule.InsertLines 1, CodeLinex
Next I
ThisWorkbook.Activate

Il primo blocco azzera il codice esistente su foglio target, il secondo copia dal foglio master al target.
Nel mio esempio il foglio target, quello in lavorazione, si chiama Esempio.xls; il codice da sostituire e' in Foglio1, il codice da inserire e' in Foglio3 (del file che contiene la macro). Dovrai modificare l' istruzione marcata <<<, dovrebbe essere Windows(FileExc).Activate. Valgono le considerazioni fatte nell' altro post a proposito del posizionamento dle codice nella tua macro complessiva.

Fai prima la prova su un numero limitato di file, meglio se in un ambiente di test (cioe' con file copia di quelli originali), verificando il risultato non solo ispezionando il codice vba sui fogli "lavorati" ma soprattutto la loro funzionalita'.

Riguarda i file che hai modificato con la macro che ti passai ieri, perche' nel Vba-Project dovresti avere dei "Moduli di classe" (creati dall' importazione del codice del "Modulo di foglio"); se erano solo file di prova non c' e' problema, se invece sono file di produzione allora e' meglio rimuovere tali moduli di classe.

Ciao, fai sapere.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] autografico

Postdi ramset64 » 01/07/09 15:42

Anthony sei davvero un grande! Grazie.
Al momento mi trovo fuori, stasera o al più tardi domani proverò il tutto.

Spero poi che una delle due procedure sia idonea anche a sostituire il codice che si trova nel modulo ThisWorkbook perchè come avrai intuito nei precedenti post li dentro vi è, tra le altre cose, un richiamo alla macro del grafico.

A lavoro finito ti farò sapere, grazie!
Un grazie anche a flash ovviamente.

Saluti
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [excel] autografico

Postdi ramset64 » 03/07/09 14:59

Purtroppo non sono riuscito ad utilizzare questi codici.... il primo (per i moduli normali) mi crea un nuovo modulo21 anzichè sostituire il modulo2 e mi cancella parzialmente il modulo3 non richiamato da nessuna parte.

Il secondo invece mi va proprio in errore.

Alla fine ho deciso di fare a mano.

Peccato perchè in futuro sicuramente sarebbe tornato utile.

grazie a tutti
Saluti
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [excel] autografico

Postdi Flash30005 » 03/07/09 16:36

Io non so se ti può andar bene...
Metti la tua macro corretta all'interno del foglio1 (nel file master tipo quello che cancellava il foglio5)
inserisci questa macro in un modulo
e avvia RipristinaF
Codice: Seleziona tutto
Sub RipristinaF()
   Application.ScreenUpdating = False
   Application.Calculation = xlCalculationManual
URT = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
For T = 1 To URT
    FileExc = Worksheets("Foglio1").Range("A" & T).Value
    If FileExc = "" Then
        MsgBox "Non ci sono file nella directory"
        Exit For
    End If
Workbooks.Open Filename:=FileExc
    Application.DisplayAlerts = False
    Sheets("Foglio1").Copy After:=Worksheets(Worksheets.Count)
    Sheets("Foglio1").Select
    ActiveWindow.SelectedSheets.Delete
    Windows("CancellaFogli.xls").Activate
    Sheets("Foglio1").Copy Before:=Workbooks(FileExc).Sheets(1)
    Sheets("Foglio1 (2)").Select
    Cells.Select
    Selection.Copy
    Sheets("Foglio1").Select
    Cells.Select
    ActiveSheet.Paste
    Sheets("Foglio1 (2)").Select
    ActiveWindow.SelectedSheets.Delete
    Sheets("Foglio1").Select
    Range("A1").Select
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
Next T
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

Spiego cosa fa:
apre uno dei fogli in elenco
duplica il foglio1 (perché sicuramente avrà dati e/o formule) con nome "foglio1 (2)"
cancella il foglio1
Crea una copia del foglio1 del master (con macro corretta) inserendola nel file attivo
copia tutte le celle del foglio1(2) in foglio1
elimina Foglio1(2)
salva il file e lo chiude
continua con il secondo file in elenco...

E' un metodo un po' "spartano" ma a me sembra che funzioni

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] autografico

Postdi ramset64 » 03/07/09 17:51

Flash a me da errore, dopo aver creato la copia del foglio1.... mi sembra complicata però e magari un attimino pericolosa :) per i dati.
grazie, ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [excel] autografico

Postdi Flash30005 » 03/07/09 18:11

ramset64 ha scritto:Flash a me da errore, dopo aver creato la copia del foglio1.... mi sembra complicata però e magari un attimino pericolosa :) per i dati.
grazie, ciao


Non so come mai ti dà errore, io l'ho provata su più file e funziona.
Fai una cosa,
registra una macro con il tuo office
da foglio1
crea una copia del foglio1
torna a foglio1 ed eliminalo
interrompi la macro
prendi il codice generato e lo sostituisci alla parte corrispondente della mia macro
poi esegui la macro in debug
e vedi cosa succede
(chiaramente non devi processare file che non abbiano il foglio1)
ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] autografico

Postdi ramset64 » 03/07/09 18:15

No lascia stare, ti ringrazio davvero tanto. Ma anche se funzionasse, con i problemi che da excel 2007 non mi fiderei mai ad utilizzarla (in futuro perchè per adesso ho risolto). In questi file posso perdere tutto ma non i dati.... non mi fido troppo di questa versione di excel. Spero tu capisca.

Ma non si può fare un qualcosa di più semplice tipo.
selezione modulo1, cancella il contennuto, copia dal master il codice del modulox ed incollalo nel modulo1?
Idem per le macro all'interno dei fogli?

Grazie per l'interessamento.
ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [excel] autografico

Postdi Flash30005 » 03/07/09 18:50

ramset64 ha scritto:No lascia stare...

per me è difficile lasciar stare quando c'è un problema da risolvere, ma se non c'è più l'esigenza non c'è più nemmeno il problema.
ramset64 ha scritto: Ma anche se funzionasse, con i problemi che da excel 2007 non mi fiderei mai ad utilizzarla (in futuro perchè per adesso ho risolto). In questi file posso perdere tutto ma non i dati.... non mi fido troppo di questa versione di excel. Spero tu capisca.

Non capisco!!!? tu puoi fare una copia di tutta la cartella con i file dati e fare i test sulla cartella doppione e non sui file originali, se il test ha successo hai i file come desideravi altrimenti cestini tutto e ti rimangono i tuoi file

ramset64 ha scritto:Ma non si può fare un qualcosa di più semplice tipo.
selezione modulo1, cancella il contennuto, copia dal master il codice del modulox ed incollalo nel modulo1?
Idem per le macro all'interno dei fogli?


Quando sei in registrazione macro (sistema che uso spesso) la macro non registra le azioni dal momento che entri nel Vba, comunque il codice di Anthony fa proprio quello che dici, se ti funzionasse.

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] autografico

Postdi ramset64 » 03/07/09 19:25

Si al momento non ci sta più l'esigenza, ho risolto a mano. Certo prima o poi mi servirà, vedremo! Il codice di Anthony purtroppo fa cose che non capisco, ma in effetti è la strada migliore.
Flash ti ringrazio di cuore.
Saluti
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "[excel] autografico":


Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti