Condividi:        

Controllo esistenza di una determinata macro su + file excel

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

Controllo esistenza di una determinata macro su + file excel

Postdi ricky53 » 30/05/13 10:56

Ciao a tutti,
anticipo che ho già fatto delle ricerche in rete ma non ho trovato il modo di risolvere la mia esigenza. Ho cercato al meglio con google nei forum ... ma senza risultati.

PREMESSA:
su un mio percorso ho diversi file excel che contengono macro. spesso mi capita di fare copie dello stesso file e di aggiornare le macro contenute. Inoltre ho il file PERSONAL.XLS che contiene una serie di macro che sono le mie utility cui faccio riferimento spesso per eseguirle sui vari file di lavoro.

Di questi file ho una copia:
sul PC dell'ufficio, di Casa, sul portatile, sul Netbook, sul PC di mia moglie e di mio figlio.
Troppe copie direte voi: VERO !!!

Questo mi comporta che devo gestire l'allineamento delle versioni.

Fino a ieri ho sempre fatto il classico copia ed incolla ogni volta che facevo una modifica a questi file ... con tutto quello che ne può seguire e infatti ...
oggi avevo la necessità di eseguire una macro per elaborare dei dati lavorativi, fatto lo scarico dal nostro sistema del file vado ad eseguire la macro di elaborazione e ... caspita ... andando sul codice, in cui, tra l'altro, scrivo sempre l'ultima data di aggiornamento ed un commento sulle funzioni presnti, mi accorgo che stavo lavorando su una versione che non era l'ultima ...

La cerco sulle varie copie, "Pennette" comprese ma non la trovo.


Fatta questa premesso passo ad esporre la mia necessità:
c'è la possibilità di sapere quali macro contengono i file excel presenti sul PC in elaborazione e produrre un elenco di tutte le macro trovate?

L'elenco dovrebbe contenere i seguenti dati:
1. identificativo del PC sul quale si sta facendo la ricerca
2. percorso sul quale si è fatta la ricerca
3. nome file ove la macro è presente
4. nome modulo che la contiene
5. nome macro
6. data ultimo aggiornamento del file che contiene la macro



In questo modo partendo dall'elenco (sul quale farò varie elaborazioni e ricerche), dopo aver ordinato per "nome macro", andrei a cercare nelle varie macro quale, secondo me, è la versione che mi interessa.


Grazie a tutti.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Sponsor
 

Re: Controllo esistenza di una determinata macro su + file e

Postdi ricky53 » 30/05/13 17:10

Ciao,
mi è stata indicata questa PAGINA del sito di Chip Pearson.

Molto interessante quello che si può estrarre dal VBE.


A presto con un aggiornamento di quanto produrrò.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Controllo esistenza di una determinata macro su + file e

Postdi Anthony47 » 30/05/13 21:46

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
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Controllo esistenza di una determinata macro su + file e

Postdi miko » 30/05/13 22:04

buona sera,
molto interessante questo argomento;
anche io ho sempre problemi nel rintracciare macro e devo aprire ogni file alla ricerca
del listato o di linee di codice, facendo affidamento sulla mia labile memoria;
nonostante la precisa ed esaustiva spiegazione di Anthony ho capito ben poco,
perciò spero nell'impegno degli esperti per visionare il risultato finale
e comprendere meglio alcuni passaggi.
ciao e buon lavoro;
mi rammarico non poter partecipare attivamente a questo topic.
windows 10 - office 2013
miko
Utente Senior
 
Post: 521
Iscritto il: 29/12/09 10:44

Re: Controllo esistenza di una determinata macro su + file e

Postdi ricky53 » 30/05/13 23:40

Ciao Anthony,
grazie per gli spunti, domani li vado a leggere con attenzione.

Fino ad adesso sono arrivato a sviluppare i primi tre punti delle mie esigenze ed ho prodotto, in un foglio, l'elenco dei file xls mi manca l'individuazione dei moduli e stavo lavorando su quanto C.P. ha scritto nel suo sito ... leggo che tu mi hai già proposto una tua elaborazione del codice di C.P. ti ringrazio tantissimo e domani lo integro con quanto ho già prodotto e vi aggiornerò.


E' anche interessante l'utilizzo della bat che mi hai proposto. Da giovane (quando non c'era Windows ma solo il DOS) ero un grande fruitore delle bat e rivederne/utilizzarne una mi fa ricordare i bei tempi ... proverò anche questo suggerimento.

infine in relazione a
Rimane il problema di scnsionare tutti i drive presenti in un Pc, ma qui non ho mai fatto niente.


Tempo fa mi dedicai proprio ad individuare i vari Drive (anche rimovibili) collegati ad un PC, posso recuperare il codice ed integrarlo ma penso sia più semplice e pratico eseguire più volte la macro finale sui vari "C:\", "D:\", "..."
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Controllo esistenza di una determinata macro su + file e

Postdi ricky53 » 31/05/13 16:20

Ciao,
il primo passo: quello di produrre l'elenco dei file partendo da un percorso è a posto e vi allego il codice
Codice: Seleziona tutto
Option Explicit
Public mNome As String, mPercorso As String, mBat As String, mPid

Sub Cerca_File_Excel()
    mPercorso = "D:\Temp\"  ' <<=== Percorso sul qual cercare i file
   
    Close #1
    mBat = "D:\Temp\File_sul_PC.bat"
   
    Open mBat For Output As #1
    mNome = " D:\Temp\Elenco_File.txt" ' <<=== Nome del file cotentnete tutti i file trovati
   
    Print #1, "C:\Windows\System32\attrib.exe " & mPercorso & "*.xls /s >" & mNome
    Close #1
    mPid = Shell(mBat)
    Application.Wait (Now + TimeValue("0:00:02"))
    Do While IsProcessRunning("attrib.exe")
        DoEvents
    Loop
    MsgBox "Elaborazione effettuata." & vbCrLf & vbCrLf & "I dati sono stati scrittti in  '" & mNome & "'"
End Sub

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

Ho utilizzato quanto indicato da Antony con qualche modifica.

Passi che faccio:
1. apro manualmente il file prodotto.
2. lo importo in excel
3. In colonna "A" metto il percorso più il nome del file estensione compresa.
4. estraggo e scrivo in colonna "B" il nome del file estensione compresa.

Devo ottimizzare la gestione (in colonna "A" mettere solo il percorso ma al momento la seconda macro, per fare prima, legge tutto da "A" e quindi aspetto a cambiare) e rendere automatico il tutto.


Adesso sto lavorando sulla seconda parte: quella di individuare i moduli presenti in ogni file.
Ho scritto il codice ma ho dei problemi con il file "PERSONAL.XLS" ... ci lavoro su
Ecco il codice in versione bozza
Codice: Seleziona tutto
Sub Elenco_Moduli()
    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent
    Dim Ws_In As Worksheet, Ws_Out As Worksheet, I As Long, J As Long, UR As Long, Totale As Long
    Dim mNome As String
   
    Set Ws_In = ActiveWorkbook.Worksheets("NomiFile")
    Set Ws_Out = ActiveWorkbook.Worksheets("ModuliTrovati")
    Ws_Out.Select
    If Ws_Out.Range("A1") = "" Then
        Ws_Out.Range("A1") = "Nome file"
        Ws_Out.Range("B1") = "Nome modulo"
        Ws_Out.Range("C1") = "Numero del 'Tipo'"
        Ws_Out.Range("D1") = "Descrizione del 'Tipo'"
        Ws_Out.Columns("A:D").AutoFit
    End If
    Ws_Out.Range("A2:D" & Rows.Count).ClearContents
   
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Totale = 0
    UR = Ws_In.Range("A" & Rows.Count).End(xlUp).Row
    J = 2
    For I = 2 To UR
        mNome = Ws_In.Cells(I, 1)
        Workbooks.Open FileName:=mNome, Origin:=xlWindows
        Windows(Ws_In.Cells(I, 2).Value).Activate
        Set VBProj = ActiveWorkbook.VBProject
        For Each VBComp In VBProj.VBComponents
            If VBComp.Type = 1 Then ' con = 1 vengono scritti solo i Moduli
                Totale = Totale + 1
                Ws_Out.Cells(J, 1).Value = mNome
                Ws_Out.Cells(J, 2).Value = VBComp.Name
                Ws_Out.Cells(J, 3).Value = VBComp.Type
                Ws_Out.Cells(J, 4).Value = ComponentTypeToString(VBComp.Type)
                J = J + 1
            End If
        Next VBComp
       
        ActiveWindow.Close
    Next I
    Ws_Out.Columns(1).AutoFit
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "File elaborati:  '" & I - 2 & "'" & vbCrLf & vbCrLf & "Moduli trovati:  '" & Totale & "'"
End Sub


Non penso sia necessario commentare il codice in relazione alla scrittura dei dati in caso chiedete ...

A presto con altri aggiornamenti ...

Se avete suggerimenti, consigli o voglia di ottimizzare quanto ho scritto mi farete molto piacere per la vostra partecipazione.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Controllo esistenza di una determinata macro su + file e

Postdi PcBase » 31/05/13 23:13

Ciao ricky53

Ho trovato il codice per elencare tutte le routine presenti.
Link: http://www.vistax64.com/vb-script/262741-displaying-list-all-vba-procedures-excel-2007-fromthe-ribb.html
Allego un esempio di prova
Test Vbe.xls
Sono da adattare i percorsi per i salvataggi del file
è necessario aggiungere il riferimento alla libreria Microsoft Visual Basic for Applications Extensibility 5.3

Una curiosità con Excel 2013 rilevo un errore alla riga:
Codice: Seleziona tutto
Set VBAEditor = Application.VBE

Non ho ancora trovato rimedio
Windows xp + Office 2003 Ita
Windows8 Office 2013
PcBase
Utente Senior
 
Post: 143
Iscritto il: 24/02/11 23:26

Re: Controllo esistenza di una determinata macro su + file e

Postdi ricky53 » 31/05/13 23:40

Ciao,
grazie per la segnalazione e per l'esempio.

Lo conoscevo; si ottengono sostanzialmente le stesse informazioni che ho riportato io. Tu hai fatto un'ottima aggiunta con la Userform.

Io ho la necessità di individuare quale possa essere il Modulo che è stato aggiornato per ultimo nelle varie versioni dello stesso file che è presente in vari Drive, Pennette comprese dello stesso PC o di altri PC sui quali io faccio i backup.

Grazie di nuovo.


Io utilizzo il 2003 e il 2010: con queste istruzioni non ho avuto problemi.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Controllo esistenza di una determinata macro su + file e

Postdi Anthony47 » 01/06/13 12:03

Provo a sottoporvi anche una mia elaborazione.
http://rapidshare.com/files/1396920185/ ... n%201).xls

----------Edit 2-giu-2013:
questa versione non e' piu' disponibile; vedi
viewtopic.php?f=26&t=99260&p=571861#p571861
---------Anthony


Nel foglio Memo trovate alcune istruzioni e informazioni, che riepilogo:
1) Eseguire la macro runAttrib su Modulo1 per avere la lista dei files riportata in Foglio1
-la directory sara' scelta con FileDialog a inizio macro
-Richiede la presenza di una directory C:\PROVA (>>> se manca verra' creata)
-Sara' creato un file C:\PROVA\myPippoBat.bat
-Sara creato un file C:\PROVA\pippoZCZC.txt
-Il file C:\PROVA\pippoZCZC.txt sara' importato in Foglio1, previa PULIZIA SENZA PREAVVISO di Foglio1

2) Eseguire quindi la macro MacroInventory su WIP_Estrazioni per estrarre l' elenco delle macro
-Lavora sull' elenco creato in Foglio1
-Il risultato sara' inserito su Foglio2, che NON VIENE AZZERATO dalla macro
-La colonna G determina il calcolo di Ultima Riga Occupata
-I file con VBProject protetto saranno marcati come PROTETTO in colonna F
-I file con altro errore saranno marcati con ERRORE tipo: " & Err.Number
-- In questo caso la macro emette un MsgBox e poi va in Stop per eventuali debug
-- Commentare eventualmente queste istruzioni, in coda a MacroInventory
-I file con password di apertura fermano la macro in attesa della password (giusta, il file viene esaminato; sbagliata, ci sara' ERRORE tipo: " & Err.Number)
-Ogni nuovo file ha il proprio FullName inserito in colonna G, con una riga vuota di separazione rispetto al file precedente
-Eventuali macro presenti vengono inventariate nelle righe successive
-Alla fine Application.Calculation viene messo in xlCalculationAutomatic

Vengono raccolti i seguenti campi:
Codice: Seleziona tutto
Modulo         Nome del Modulo contenente la macro
Macro Name     Il titolo della macro
Type           Il tipo di modulo: 1=Standard; 100=Foglio; 3=Userform Questi i piu' comuni (ELENCO INCOMPLETO)
Date           La data di aggiornamento del file
Computer       Il Computername su cui viene eseguita la raccolta
First Line     La prima riga della macro (ma tramite la variabile myHLine si puo' impostare anche una riga diversa, es 2 se si sa che in riga 2 c' e' una particolare info)
File           Path & Filename

Tra i problemi riscontrati:
-se worksheets(1) e' protetto e il foglio inizialmente attivo e' un graph il file non potra' essere analizzato
-idem se il file ha una protezione a livello di workbook
-se il file ha una password sul progetto vba sara' skippato

Se potete, fatene buon uso; io ho gia' trovato delle cose che non sapevo piu' dove erano finite...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Controllo esistenza di una determinata macro su + file e

Postdi ricky53 » 01/06/13 12:36

Ciao Anthony,
prima tutto un GROSSO GRAZIE per la tua partecipazione.

Inizio dalla fine: quindi non sono il solo a non trovare l'ultima versione. Eh, Eh !!!

Hai portato avanti quanto avevo in mente: OTTIMO. Mi sento in obbligo con te.

Scarico e ci risentiamo.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Controllo esistenza di una determinata macro su + file e

Postdi ricky53 » 01/06/13 14:05

Ciao Anthony,
caspita che lavoro.
Compimenti

C'è sono un bug: manca l'attivazione del file appena aperto per poter scorrere il progetto che contiene.
Prima di
Codice: Seleziona tutto
        For Each VBComp In ActiveWorkbook.VBProject.VBComponents


va inserita l'istruzione che attiva PROGETTO del file aperto in
Codice: Seleziona tutto
    Workbooks.Open myCFile, 0, True


Altrimenti vengono riportati sempre i moduli del PROGETTO del file attivo che è quello da cui si è lanciata la macro.

Questa sera modifico il tuo codice.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Controllo esistenza di una determinata macro su + file e

Postdi Anthony47 » 01/06/13 14:44

Dopo la Workbooks.Open myCFile, 0, True il nuovo file e' gia' il file attivo...

Piuttosto ho visto che se eseguo il programma in XL2010 la MacroInventory puo' andare erroneamente in errore quando si esamina un file in formato xlsm o xlsb.
Per correggere, modificare questa riga:
Codice: Seleziona tutto
'Salva info di macro in Foglio2:
     myNRow = ProcList.Cells(ProcList.Rows.Count, 7).End(xlUp).Row + 1    '<<< QUESTA RIGA

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Controllo esistenza di una determinata macro su + file e

Postdi PcBase » 01/06/13 20:04

Ciao

Ho visto che è possibile copiare il codice direttamente nel foglio per eventuali confronti
Uno spunto :) :)

Codice: Seleziona tutto
Sub TestThisWorkbook()
    Dim sourceBook As Workbook
    Dim destinationBook As Workbook
    Dim codeFromSource As String
   
    Set sourceBook = ThisWorkbook
    With sourceBook.VBProject.VBComponents("ThisWorkbook").CodeModule
        codeFromSource = .Lines(1, .CountOfLines)
    End With
    Cells(1, 1) = codeFromSource
End Sub


Codice: Seleziona tutto
Sub TestUserForm1()
    Dim sourceBook As Workbook
    Dim destinationBook As Workbook
    Dim codeFromSource As String
   
    Set sourceBook = ThisWorkbook
    With sourceBook.VBProject.VBComponents("UserForm1").CodeModule
        codeFromSource = .Lines(1, .CountOfLines)
    End With
    Cells(1, 1) = codeFromSource
End Sub
Windows xp + Office 2003 Ita
Windows8 Office 2013
PcBase
Utente Senior
 
Post: 143
Iscritto il: 24/02/11 23:26

Re: Controllo esistenza di una determinata macro su + file e

Postdi ricky53 » 01/06/13 23:55

Ciao PcBase,
ho provato il tuo suggerimento ma ottengo il seguente errore Immagine

Cerco di capire la causa dell'errore




Anthony: se ho segnalato l'anomalia vuol dire che mi si è verificata, e si verifica sempre.

Nel mio caso l'open non rende attivo il file aperto.
Ecco cosa ottengo Immagine

Ad esempio i dati dei moduli, del nome macro sono quello del tuo file invece altri dati sono del mio file aperto.

Vedo di eliminare questa situazione.
Io utilizzo Office 2003.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Controllo esistenza di una determinata macro su + file e

Postdi ricky53 » 02/06/13 00:15

Ciao,
non ho fatto in tempo ad aggiungere il contenuto della variabile "MyWKBook" ed eccomi in questo nuovo intervento a proporre il valore della variabile Immagine
che non è quello del mio file che è stato appena aperto ma quello del tuo file.

Vado a cercare di rimuovere quanto segnalato.

A presto
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Controllo esistenza di una determinata macro su + file e

Postdi PcBase » 02/06/13 08:53

Ciao Ricky53

Allego copia ora funziona anche nella versione con Excel 2013
Test Vbe 1.zip
Windows xp + Office 2003 Ita
Windows8 Office 2013
PcBase
Utente Senior
 
Post: 143
Iscritto il: 24/02/11 23:26

Re: Controllo esistenza di una determinata macro su + file e

Postdi Anthony47 » 02/06/13 12:15

C' e' un messaggio di PcBase, sopra.

Ricky, perdona; ero convinto che quando avevi scritto quel messaggio non avessi ancora provato e che quindi fosse un' osservazione basata sulla lettura del codice.
Mah... io non ho mai avuto dubbio che la Workbooks.Open attivasse il file appena aperto, perche' il comportamento e' sempre stato quello. Anche oggi, sia in XL2003 che XL2010.
Comunque ho preparato una "versione2" che e' disponibile qui: http://rapidshare.com/files/2610984600/ ... n%202).xls
(la versione1 non e' piu' scaricabile)

-----Edit:
Rimossa anche questa versione; vedi viewtopic.php?f=26&t=99260&p=571876#p571876
-----Anthony


Ho inserito l' attivazione esplicita del workbook, ho inserito una raccolta dati anche per i file privi di macro (ad esempio per cercare il file con data piu' recente), ho escluso dalla indagine sulle macro i files ".xlsx", ho fatto altre modifiche (tra cui l' eliminazione di una complicazione che avevo dovuto inserire a causa di una precedente svista, poi corretta qui: viewtopic.php?f=26&t=99260&p=571844#p571833), ho inserito una form per dare all' utente informazioni sul progresso, con possibilita' di stoppare la macro e poterla poi riprendere.

Si tratta di un progetto che sono interessato a tenere aggiornato e a far evolvere; se avete suggerimenti o prestazioni da aggiungere fatemelo sapere e vedro'...

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Controllo esistenza di una determinata macro su + file e

Postdi ricky53 » 02/06/13 16:15

Ciao,
devo uscire ma ho voluto vedere se c'erano risposte: due.
Bene ho letto ma non ho il tempo di scaricare.
Però leggendo la cosa si fa ancora più interessante.

A stanotte per lo scaricamento e le prove ed il resto.

Grazie ad entrambi.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Controllo esistenza di una determinata macro su + file e

Postdi Anthony47 » 02/06/13 17:55

Scusate, la "versione2" precedentemente pubblicata conteneva un refuso nella macro.
La "penultima" versione e' scaricabile qui: http://rapidshare.com/files/2217574038/ ... 202-1).xls
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Controllo esistenza di una determinata macro su + file e

Postdi ricky53 » 03/06/13 00:45

Ciao,
ho potuto provare solo l'esempio di Anthony e molto velocemente.
Per il momento dico solo CASPITA !!!

A domani
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Controllo esistenza di una determinata macro su + file excel":


Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti