Chip Pearson e' una dei piu' prolifici conoscitori di excel.
Ti do un paio di tasselli da comporre insieme a tanti altri per ottenere quello che cerchi.
Il primo obiettivo e' ottenere un elenco di file da processare; puoi ottenerlo con una macro come questa:
- Codice: Seleziona tutto
Sub runAttrib()
myDir = "D:\Music\" '<< Drive & directory
Close #1
Open "C:\PROVA\myPippoBat.bat" For Output As #1
Print #1, "C:\Windows\System32\attrib.exe " & myDir & "*.mp3 /s >C:\PROVA\pippop.txt" '<<< *.ext
Close #1
myPid = Shell("C:\PROVA\myPippoBat.bat")
Application.Wait (Now + TimeValue("0:00:02"))
myTim = Timer
Do While IsProcessRunning("attrib.exe")
DoEvents: DoEvents: Loop
'MsgBox (Timer - myTim)
End Sub
La macro crea un .bat che lancia il comando attrib con lo switch /s, cioe' includendo le subdirectories della dir specificata. Modifica le righe marcate <<<.
Richiede la funzione IsProcessRunning, che corrisponde al seguente codice:
- Codice: Seleziona tutto
Private Function IsProcessRunning(ByVal ProcName As String) As Boolean
Dim objWMIService, objProcess, colProcess
Dim strComputer, strList
'
strComputer = "."
'
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process")
For Each objProcess In colProcess
If CBool(InStr(1, objProcess.Name, ProcName, vbTextCompare)) Then
IsProcessRunning = True
Exit Function
End If
DoEvents
Next
End Function
L' elenco risultante e' salvato in un file pippop.txt, disponibile al completamento della macro.
Il tracciato di questo file e' del tipo
- Codice: Seleziona tutto
A D:\Music\09_-_wanderlust_-_sailing_to_philadelphia.mp3
Cioe' primo campo "attributi" del file (solo A, nell' esempio) e il campo Path & FileName
Questo file puo' essere facilmente importato in excel (va bene il formato "larghezza fissa") ottenendo cosi' un elenco di file da esaminare.
Aprire uno ad uno questi file non e' un problema, immagino.
Interviene il secondo tassello, derivato dal codice di CP:
- Codice: Seleziona tutto
Sub ListProcedures()
'
Dim VBCodeMod
Dim StartLine As Long
Dim Msg As String
Dim ProcName As String
Dim VBComp
Dim ModName As String
myWKBook = ActiveWorkbook.Name
For Each VBComp In ActiveWorkbook.VBProject.VBComponents
ModName = VBComp.Name
myMod = VBComp.Type '1=modulo; 100=Foglio /Thisworkbook; 3=Userform; lista non esaustiva
'
Set VBCodeMod = ActiveWorkbook.VBProject.VBComponents(ModName).CodeModule
With VBCodeMod
StartLine = .CountOfDeclarationLines + 1
Do Until StartLine >= .CountOfLines
myPROCEDURE = .ProcOfLine(StartLine, 0)
myHead = VBCodeMod.Lines(StartLine, 1)
' Msg = Msg & .ProcOfLine(StartLine, 0) & vbCrLf
StartLine = StartLine + .ProcCountLines(.ProcOfLine(StartLine, 0), 0)
'>>>>>>
'>>>>>>
Loop
End With
Next VBComp
'MsgBox Msg
End Sub
Essa scorre tutti i moduli di codice del workbook attivo; nella riga marcata >>>>>> inserirai il codice per memorizzare su un foglio del file che usi per scavare (quello che contiene queste macro) le varie informazioni.
-In myWKBook c' e' il nome del workbook; tuttavia penso sia meglio usare l' intera stringa che hai usato per la Open del file
-In ModName c' e' il nome del modulo in esame
-In myMod c' e' il tipo di modulo in esame (guarda i commenti nel codice)
-In myPROCEDURE c' e' il nome della macro
-In myHead c' e' la prima riga completa della macro; piuttosto potrebbe esserti utile leggere anche un paio di righe successive, se in esse hai l' abitudine a scrivere dei commenti sulla revisione della macro (ovviamente per leggere la riga successiva userai StartLine+1)
Per leggere la data di aggiornamento del file dovrebbe andare bene
- Codice: Seleziona tutto
myDate = FileDateTime("FullPath&Name")
Per conoscere il nome della macchina dovrebbe bastare
- Codice: Seleziona tutto
myComputer = Environ("ComputerName")
Rimane il problema di scnsionare tutti i drive presenti in un Pc, ma qui non ho mai fatto niente.
Penso che la cosa piu' semplice sia di creare in un foglio la descrizione della macchina in esame; es un elenco del tipo
C:\Users\Anthony\Documents\
C:\Users\Guest\Documents\
D:\
F:\BACKUP
(sono esempi ...esemplificativi)
Poi usi questo elenco per "lavorare" un drive alla volta.
In questo modo puoi anche specificare meglio quali directories ti interessa prendere in considerazione.
Tieni presente che il comando attrib dura "qualche secondo" (provalo a mano prima di lanciarlo col bat), quindi prepara panino e birra.
Sono curioso di vedere il risultato finale