Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Creare una macro che processi in automatico tutti i file di una cartella

Ultimo Aggiornamento: 23/03/2017 14:39
Post: 1
Registrato il: 23/03/2017
Città: MILANO
Età: 24
Utente Junior
2016
OFFLINE
23/03/2017 07:58

BUongiorno a tutti!
Ringrazio in anticipo chiunque mi voglia aiutare a risolvere questo problema!

Devo modificare tantissimi file cambiando il formato delle celle da "generale" a "formato numerico.
Ho registrato una macro che lo faccia dopo aver aperto il file e fino a qui tutto bene, ma dato il numero eccessivo di file vorrei sapere se esiste un modo per processare tutti i file contenuti in una cartella con la stessa macro.

quella che ho registrato io è questa:


Sub formatonum()
'
' formatonum Macro
'
' Scelta rapida da tastiera: CTRL+MAIUSC+F
'
Selection.CurrentRegion.Select
Selection.NumberFormat = "0.00"
ActiveCell.Offset(0, 4).Range("A1").Select
ActiveWorkbook.Save
End Sub

Su internet ne ho trovata un'altra che dovrebbe automatizzare il processo ma non sono riuscita a farla funzionare.

Sub ExecuteApplyMacroToAllFiles()

'Change the path to the main folder
Call ApplyMacroToAllFiles("C:\test folder")

End Sub

Sub ApplyMacroToAllFiles(ByVal MyPath As String)

Dim FileSys As Object
Dim objFolder As Object
Dim objSubFolder As Object
Dim objFile As Object
Dim wkbOpen As Workbook

Set FileSys = CreateObject("Scripting.FileSystemObject")
Set objFolder = FileSys.GetFolder(MyPath)

Application.ScreenUpdating = False

For Each objSubFolder In objFolder.SubFolders
For Each objFile In objSubFolder.Files
Set wkbOpen = Workbooks.Open(filename:=objFile)
'Change the name of your macro
Call MyMacro
wkbOpen.Close savechanges:=True
Next
Call ApplyMacroToAllFiles(objSubFolder.Path)
Next

Application.ScreenUpdating = True

End Sub

Allego dei file di sample
[Modificato da RitaKant 23/03/2017 08:01]
Post: 3.784
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
23/03/2017 09:02

sostituisci la riga
Call MyMacro
con
Call formatonum
e metti il giusto percorso in
Call ApplyMacroToAllFiles("C:\test folder")

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 1
Registrato il: 23/03/2017
Città: MILANO
Età: 24
Utente Junior
2016
OFFLINE
23/03/2017 09:24

ho fatto esattamente questo, però non funziona. Mi da un errore "09".

Sarebbe molto importante per me risolvere questo problema, è possibile elaborare questa macro?
[Modificato da RitaKant 23/03/2017 09:33]
Post: 1.131
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
23/03/2017 10:15

Ciao
- ma i file hanno un solo foglio?
- dove inizia il range cui devi assegnare la formattazione?

ti faccio un esempio:
questo codice apre tutti i file di una determinata cartella (MiaCartella) in modo nascosto, seleziona il "currentRegion" a partire da A1 del relativo foglio attivo, assegna la formattazione, salva e chiude.

Sub formatonum()
Dim oExcel As Excel.Application
Dim strFile As String
Set oExcel = New Excel.Application
mFolder = "C:\MiaCartella\" ' <<<<<<<<<<<<<< SOSTITUISCI CIN TUO PERCORSO
strFile = Dir(mFolder & "*.xls")
On Error Resume Next
Application.DisplayAlerts = False
Do While strFile <> ""
    oExcel.Workbooks.Open mFolder & strFile
    oExcel.ActiveSheet.Range("A1").Select ' qui devi selezionare la prima cella del range cui applicare
    oExcel.Selection.CurrentRegion.Select
    oExcel.Selection.NumberFormat = "0.00"
    oExcel.ActiveWorkbook.Close True
    strFile = Dir
Loop
' chiude e azzera variabili
Application.DisplayAlerts = True
oExcel.Quit
Set oExcel = Nothing
End Sub


Saluti
[Modificato da dodo47 23/03/2017 10:16]
Domenico
Win 10 - Excel 2016
Post: 2
Registrato il: 23/03/2017
Città: MILANO
Età: 24
Utente Junior
2016
OFFLINE
23/03/2017 10:34

ringrazio per la macro che funziona, solo che mi consente la selezione solo di uno dei file all'interno della cartella, e lo modifica correttamente mentre negli altri, che vengono modificati, vengono cambiati i valori e non funziona come dovrebbe
Post: 3
Registrato il: 23/03/2017
Città: MILANO
Età: 24
Utente Junior
2016
OFFLINE
23/03/2017 10:45

Non riesco a farla funzionare. comunque i file hanno un solo foglio costitutito da una sola riga con 10 colonne compilate con dei numeri in formato generico che vorrei convertire in formato numerico, perchè poi dovranno essere processati da altri programmi.
Quindi comincia da A1 e finisce in J1
[Modificato da RitaKant 23/03/2017 10:47]
Post: 1.132
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
23/03/2017 11:38

Ciao
Il codice processa correttamente tutti i file xls della cartella indicata.

Che estensione hanno i file da processare??
Se sono anche xlsx - xlsm - xls, devi modificare:

strFile = Dir(mFolder & "*.xls*")
saluti
[Modificato da dodo47 23/03/2017 11:42]
Domenico
Win 10 - Excel 2016
Post: 4
Registrato il: 23/03/2017
Città: MILANO
Età: 24
Utente Junior
2016
OFFLINE
23/03/2017 14:24

i file sono formato .xls, foglio di lavoro excel 97-2003 come quelli che ho messo come sample.
non capisco perchè la macro riesce a processarli tutti e li modifica, solo che il formato rimane generale!

il motivo potrebbe essere che quando apro il file lo definisce come "non sicuro" perchè il formato e l'estensione del file non corrispondono?
[Modificato da RitaKant 23/03/2017 14:32]
Post: 5
Registrato il: 23/03/2017
Città: MILANO
Età: 24
Utente Junior
2016
OFFLINE
23/03/2017 14:39

credo di aver capito, è prima necessario cambiare il formato dei file per cui è necessario che prima di essere modificati un altro passaggio li salvi come "cartella di lavoro excel"

forse sta diventando troppo complicato! :(
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 12:46. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com