Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[EXCEL] Questa è difficile...

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

[EXCEL] Questa è difficile...

Postdi ramset64 » 25/11/08 18:19

Supponiamo di avere 3 file che contengano una macro, è possibile creare un quarto file ed inserire una macro che faccia questo lavoro:
1) apre il file nr.1, esegue la macro contenuta nello stesso file, richiude il file.
2) apre il file nr.2, esegue la macro contenuta nello stesso file, richiude il file.
3) apre il file nr.1, esegue la macro contenuta nello stesso file, richiude il file.

Approfitto per un'altra curiosità, quando si apre un file excel che contiene una macro questa viene disattiva e quindi bisogna poi cliccare su opzioni per attivarla. E' possibile dire ad excel che quel file è sicuro e far in modo che la macro sia immediatamente attiva all'apertura del file?

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

Sponsor
 

Re: [EXCEL] Questa è difficile...

Postdi ramset64 » 25/11/08 18:38

Si, si può fare. Ho provato a registrare una macro e si riesce, bisogna però copiare tante volte il codice quanti sono i file da aprire. Si può inserire una specie di ciclo che vada a leggere dal file 4 un elenco di file da aggiornare senza dover riscrivere tatnte volte lo stesso codice?
Mi spiego meglio se nel file4 io scrivo nella colonna A:

file1
file2
file3
file4
file5

La macro dovrebbe leggere, aprire ed aggiornare, tutti i file contenuti nella colonna A.... si può?

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

Re: [EXCEL] Questa è difficile...

Postdi Anthony47 » 25/11/08 22:55

Ci sono state un paio di discussioni che vertevano su come ripetere un ciclo su un elenco di nomi files; ad esempio guarda qui: viewtopic.php?f=26&t=75455
In quel caso ci costruivamo l' elenco dei file col comando attrib (dos); nel tuo caso l' elenco sara' fatto a mano in col B di un foglio che chiamerai "attrib" di quello che tu chiami "File 4".
Per semplicita' (mia) fai in modo che in col B ci sia il path+il nome completo (es: C:\Documents and settings\User-1\Documenti\Dati di archivio\Il-primo-file.xls); lo puoi fare facilmente scrivendo il path in una cella (es C1: C:\Documents and settings\User-1\Documenti\Dati di archivio\) poi in col A scrivi il nome file (es Il-primo-file) e in col B, da B1 in giu' metti la formula =$C$1&A1&".xls"

Se non riesci subito ad adattare il codice usato nella discussione che ti ho linkato, posta il codice da te registrato (quello relativo a un solo file) e vedremo di adattarlo.

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: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Questa è difficile...

Postdi Flash30005 » 25/11/08 22:58

Se è sufficiente la mia soluzione non è poi così difficle...

in ogni foglio hai una macro che aggiorna il foglio
foglio1 macroagg1
foglio2 macroagg2
foglio3 macroagg3

inserisci la chiamata di ogni macro all'apertura di ogni foglio mettendo il codice in ThisWorkbook
con l'opzione di apertura del Workbook
nel caso del foglio1
Codice: Seleziona tutto
Private Sub Workbook_Open()
Call macroagg1
End Sub

e così via su tutti gli altri fogli

Non ho capito quale è il foglio che alla sua apertura debba far aggiornare gli altri fogli ma ammettendo che sia il foglio1 e colonna A
devi inserire la chiamata alla macro sempre su workbook (thisworkbook, del foglio1) ma questa volta nell'opzione Change
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Column("A:A")) Is Nothing Then Exit Sub
Call AggAltriFogli
End Sub

e nel modulo del foglio1 crei la macro di apertura fogli
Codice: Seleziona tutto
Sub AggAltriFogli()
    ChDir "C:\Directory1\Dir2"
    Workbooks.Open Filename:="C:\Directory1\Dir2\foglio2.xls"   '<<<apre il foglio che avendo una sua macro di aggiornamento si aggiornerà da solo
Windows("foglio2.xls").Close savechanges:=False   '<<< chiude il foglio (bisogna vedere anche i tempi di aggiornamento)
   
Workbooks.Open Filename:="C:\Directory1\Dir2\foglio3.xls"
' qui puoi mettere il codice di chiusura singolo

   Workbooks.Open Filename:="C:\Directory1\Dir2\foglio4.xls"
' qui puoi mettere il codice di chiusura singolo

per la chiusura la puoi fare singolaremente con codice come per il foglio2 (se sono pochi) o alla fine di tutte le aperture di tutti i fogli con un ciclo che chiude tutti i fogli tranne foglio1
[code]    For Each wb In Workbooks
        If wb.Name <> "Foglio1.xls" Then wb.Close savechanges:=False
    Next wb


Fai sapere
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] Questa è difficile...

Postdi Flash30005 » 25/11/08 22:59

Per Ramset:
si sono accavallate le risposte di Flash30005 e di Anthony, guarda entrambi i post.

Ciao.


(messaggio modificato da Anthony)
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] Questa è difficile...

Postdi ramset64 » 26/11/08 17:15

Flash30005 ha scritto:Per Ramset:
si sono accavallate le risposte di Flash30005 e di Anthony, guarda entrambi i post.

Ciao.


(messaggio modificato da Anthony)

La tua soluzione ovviamente funzionerebbe ma rimane il fatto che devo ricopiare tante volte il codice quanti sono i file da aggiornare, ergo non risolve completamente il problema.
Grazie dell'aiuto.
Ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [EXCEL] Questa è difficile...

Postdi ramset64 » 26/11/08 17:19

Anthony47 ha scritto:Ci sono state un paio di discussioni che vertevano su come ripetere un ciclo su un elenco di nomi files; ad esempio guarda qui: viewtopic.php?f=26&t=75455
In quel caso ci costruivamo l' elenco dei file col comando attrib (dos); nel tuo caso l' elenco sara' fatto a mano in col B di un foglio che chiamerai "attrib" di quello che tu chiami "File 4".
Per semplicita' (mia) fai in modo che in col B ci sia il path+il nome completo (es: C:\Documents and settings\User-1\Documenti\Dati di archivio\Il-primo-file.xls); lo puoi fare facilmente scrivendo il path in una cella (es C1: C:\Documents and settings\User-1\Documenti\Dati di archivio\) poi in col A scrivi il nome file (es Il-primo-file) e in col B, da B1 in giu' metti la formula =$C$1&A1&".xls"

Se non riesci subito ad adattare il codice usato nella discussione che ti ho linkato, posta il codice da te registrato (quello relativo a un solo file) e vedremo di adattarlo.

Ciao

Ho capito come elencare i file, ma non riesco ad adattare quanto richiamato nell'altro post.
Questo è il codice che richiema, aggiorna, salva e chiude un file.

Workbooks.Open Filename:="D:\dati\File-01.xlsm"
Application.Run "'File-01.xlsm'!Foglio1.Aggiorna"
ActiveWorkbook.Save
ActiveWorkbook.Close

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

Re: [EXCEL] Questa è difficile...

Postdi Anthony47 » 26/11/08 20:35

Metti questa macro nel file che contiene l' elenco dei file da trattare, posizionati come detto nel post precedente:
Codice: Seleziona tutto
Sub GodSaveRamset()
Dim CopySh As String, CopiedSh As String, NextName As String, StWB As String
Dim FlEx As Integer
StWB = ThisWorkbook.Name
'
I=0
Do
Windows(StWB).Activate
NextName = Sheets("attrib").Range("B1").Offset(I, 0).Value
If NextName = "" Then GoTo Exita
Workbooks.Open Filename:=NextName
OWb = ActiveWorkbook.Name
'Qui hai aperto il primo file del tuo elenco
CMacro = "'" & OWb & "'!Foglio1.Aggiorna"            '<<< Cioe' ! +il nome della macro
Application.Run (CMacro)
'
Workbooks(OWb).Close SaveChanges:=True
'
I = I + 1
Loop
  Exita:
End Sub

Il file deve rimanere sempre aperto fino alla fine del lavoro (quindi non dovrebbe essere uno di quelli da aggiornare).

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: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Questa è difficile...

Postdi ramset64 » 26/11/08 21:46

Grazie anthony, funziona perfettamente. :)

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

Re: [EXCEL] Questa è difficile...

Postdi ramset64 » 27/11/08 18:38

Anthony confermo che la macro funziona benissimo, ti chiedo solo se è possibile "memorizare" nella macro il percorso in modo che una volta inserirto in una cella del foglio questo venga aggiunto direttamente dalla macro senza dover ripetere ogni volta nel file il percorso come mi hai indicato... sempre che sia possibile altrimenti pazienza, sono già contento cosi :)
Ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [EXCEL] Questa è difficile...

Postdi ramset64 » 27/11/08 19:12

Mi "allargo" con un'ulteriore domanda:
E' possibile nascondere ciò che la macro fa, ovvero evitare di vedere che apra, aggiorna, etc. etc.?
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [EXCEL] Questa è difficile...

Postdi Anthony47 » 27/11/08 23:22

Per la prima domanda:
ora dovresti aver messo il path sul foglio di lavoro e poi lo combini col nome file usando Concatena (il simbolo "&"); a metterlo dentro il codice vba non ne vedo il vantaggio, ma solo svantaggi.

Per la seconda:
subito dopo StWB = ThisWorkbook.Name inserisci questa riga
Codice: Seleziona tutto
Application.ScreenUpdating = False

mentre subito prima di End Sub metterai
Codice: Seleziona tutto
Application.ScreenUpdating = 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: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Questa è difficile...

Postdi ramset64 » 28/11/08 15:02

Per la prima domanda, se non si può fare ok... ma il vantaggio (per me) ci sarebbe.
Per la seconda invece, non vedo effetti purtroppo si continuano a vedere i file che si aprono e tutto il resto.
Grazie
Ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [EXCEL] Questa è difficile...

Postdi Anthony47 » 28/11/08 16:11

Per la prima, se sei convinto:
metti subito dopo StWB = ThisWorkbook.Name questa riga aggiuntiva:
Codice: Seleziona tutto
ChDir "la mia directory completa"    '<<< es C:Documents and Settings\etc\etc
L' elenco dovra' comprendere solo il nome del file.

Per il problema dello ScreenUpdating: posta la macro completa, non so se si potra' capire qualcosa.

Conto anche sul CONTRIBUTO DI FLASH30005: recentemente ha avuto un problema analogo (di ScreenUpdating) che pero' non ho capito come si e' risolto.

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: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Questa è difficile...

Postdi ramset64 » 28/11/08 16:31

Anthony47 ha scritto:Per la prima, se sei convinto:
metti subito dopo StWB = ThisWorkbook.Name questa riga aggiuntiva:
Codice: Seleziona tutto
ChDir "la mia directory completa"    '<<< es C:Documents and Settings\etc\etc
L' elenco dovra' comprendere solo il nome del file.

Per il problema dello ScreenUpdating: posta la macro completa, non so se si potra' capire qualcosa.

Conto anche sul CONTRIBUTO DI FLASH30005: recentemente ha avuto un problema analogo (di ScreenUpdating) che pero' non ho capito come si e' risolto.

Ciao.

Anthony con questa modifica non gira.... dice sempre che non trova il file!
Allego come richiesto la macro completa (senza le ultime modifiche che non funzionano):

Sub GodSaveRamset()
Dim CopySh As String, CopiedSh As String, NextName As String, StWB As String
Dim FlEx As Integer
StWB = ThisWorkbook.Name
I = 0
Do
Windows(StWB).Activate
NextName = Sheets("attrib").Range("H1").Offset(I, 0).Value
If NextName = "" Then GoTo Exita
Workbooks.Open Filename:=NextName
OWb = ActiveWorkbook.Name
'Qui hai aperto il primo file del tuo elenco
CMacro = "'" & OWb & "'!Foglio1.Aggiorna" '<<< Cioe' ! +il nome della macro
Application.Run (CMacro)
'
Workbooks(OWb).Close SaveChanges:=True
'
I = I + 1
Loop
Exita:
End Sub
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [EXCEL] Questa è difficile...

Postdi Anthony47 » 28/11/08 19:24

Se ti dice che il file e' assente, ...sicuramente ha ragione lui :D

Per poter dare un contributo diverso dovrei vedere la macro che non funziona.

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: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Questa è difficile...

Postdi ramset64 » 28/11/08 19:26

Anthony47 ha scritto:Se ti dice che il file e' assente, ...sicuramente ha ragione lui :D

Per poter dare un contributo diverso dovrei vedere la macro che non funziona.

Ciao.

No un momento... la macro funziona correttamente se indico il percorso nel file... se apporto la tua ultima modifica ovvero memorizzare il percorso nella macro.... mi dice che il file non esiste. L'errore sta nel percorso (a mio modesto parere). I file sono sempre li.
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [EXCEL] Questa è difficile...

Postdi Anthony47 » 28/11/08 19:35

Collaudo sempre (*) il mio codice, anche questa volta.
"Per poter dare un contributo diverso dovrei vedere la macro che non funziona"

Ciao.

Nota *: ehmm, ..."quasi" sempre
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: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Questa è difficile...

Postdi ramset64 » 28/11/08 20:21

Ok lasciamo stare allora.... comunque non funziona ed è chiaro anche per me che non ci capisco nulla che manca qualcosa.... chdir (che abbamo aggiunto) non è richamato da nessuna parte nella macro, di fatto non esiste (almeno credo).
Ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [EXCEL] Questa è difficile...

Postdi Anthony47 » 28/11/08 20:24

ed è chiaro anche per me che non ci capisco nulla che manca qualcosa....
:?: :?:

Come possiamo aiutarti se non pubblichi la macro che non ti funziona?

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: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] Questa è difficile...":


Chi c’è in linea

Visitano il forum: Nessuno e 22 ospiti