Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[vba] sostiture codici vba

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

[vba] sostiture codici vba

Postdi riskismoney » 25/03/12 16:07

Salve a tutti,
avrei bisogno di un aiuto.

Ho centinaia di file in cui ogni tanto sono costretto a cambiare un codice vba ed ogni volta devo necessariamente aprire ogni singolo file e sostituire il vecchio codice con il nuovo.

Vorrei, se possibile, una macro che mi permetta di sostituire i codici ma non sono capace di scriverlo da solo.

Il codice dovrebbe fare esattamente questo lavoro:
aprire il file (qui ci arrivo da solo)
aprire il modulo1
cancellare l'intero contenuto del modulo1
incollare il nuovo codice all’interno del modulo1
salvare e chiudere il file (anche qui ovviamente ci arrivo da solo).
Il codice non deve incollare il nuovo codice in modulo diverso dal modulo1.

Credete sia possibile? Qualcuno può aiutarmi?
Un saluto a tutti.
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Sponsor
 

Re: [vba] sostiture codici vba

Postdi Anthony47 » 25/03/12 23:15

Ciao riskismoney, benvenuto nel forum.
Una cosa molto simile fu discussa qui:
viewtopic.php?p=461363#p461298

Tieni presente che l' operazione ha una sua rischiosita' intrinseca, raccomando di procedere dopo aver fatto "due" copie di backup dell' ambiente su cui lavorerai.

Fai sapere, 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: [vba] sostiture codici vba

Postdi Flash30005 » 25/03/12 23:29

Ciao Riskismoney e benvenuto nel Forum

La tua richiesta è un po' strana
penso che se spieghi meglio la tua esigenza, forse non è necessario riscrivere di volta in volta la macro (modificata)

Comunque al posto di modificare la macro è più semplice eliminarla e riscriverla
Devi innanzitutto non avere alcuna protezione sulle macro e inserire l'opzione dal Munu-> Strumenti->Macro->protezione, scheda Editori attendibili inserisci l'opzione come da immagine
Immagine

poi nel Menu del Strumenti -> Riferimenti
del Visual Basic Editor, caricare, mettendo un segno di spunta, e confermando con OK, la libreria "Microsoft Visual Basic For Applications Extensibility 5.3"

Infine inserisci questa macro (nel modulo2)
La seguente macro cancella la macro "pippo" contenuta nel modulo1

Codice: Seleziona tutto
Sub DeleteProcedure()

Dim VBCodeMod As CodeModule
Dim StartLine As Long
Dim HowManyLines As Long

Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Modulo1").CodeModule
With VBCodeMod
StartLine = .ProcStartLine("pippo", vbext_pk_Proc)
On Error Resume Next
HowManyLines = .ProcCountLines("pippo", vbext_pk_Proc)
.DeleteLines StartLine, HowManyLines
On Error GoTo 0
End With

End Sub

Questo codice, invece, aggiunge la macro "pippo" nel modulo1 con il codice riportato all'interno della medesima
Sub AddProcedure()
Dim VBCodeMod As CodeModule
Dim LineNum As Long

Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Modulo1").CodeModule
With VBCodeMod
LineNum = .CountOfLines + 1
.InsertLines LineNum, _
"Sub Pippo()" & Chr(13) & _
" Msgbox ""Ciao,  sono una nuova macro"" " & Chr(13) & _
"End Sub"
End With
'Se vuoi che dopo aver creato la macro, essa venga anche avviata togli il commento alla riga seguente
'Application.Run "pippo"

End Sub


Ciao

EDIT: Leggi messaggio di Anthony qui sopra
(da qualche giorno ho una linea pessima, ho riscritto tre volte questo post)
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: [vba] sostiture codici vba

Postdi riskismoney » 28/03/12 13:55

Ciao a tutti, scusate il ritardo.
Il link segnato da Anthony mi pare un po’ complesso e non del tutto simile al mio problema.
Quello di Flash non credo risolva il mio problema.
Rispiego il problema che è meno complesso di quello che può sembrare.
Forse la mia richiesta non era abbastanza chiara e per questo può sembrare strana. Sarebbe lungo spiegare il lavoro che devo fare, però faccio un esempio che dovrebbe rendere l’idea.
Supponiamo che io abbia 200 file che hanno tutti lo stesso codice vba nel modulo1 (vi sono anche altri moduli ma non sono interessati al problema).
Ogni tanto ho la necessità di CAMBIARE il codice presente nel modulo1 , quindi sono costretto ad aprire manualmente ogni singolo file, cancellare il codice presente nel modulo1 ed incollare il nuovo codice.
Quello che servirebbe è appunto un codice che faccia il lavoro di SOSTITUIRE il vecchio codice presente nel modulo1 con quello nuovo.
Grazie a Flash ed Antonhy per l'aiuto.
Ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] sostiture codici vba

Postdi Anthony47 » 28/03/12 23:51

Il codice non deve incollare il nuovo codice in modulo diverso dal modulo1.

Puoi spiegare perche' hai in mente questo vincolo?
Comunque nel link che ti dato, nel mio messaggio datato 1/7/2009 e' descritta una macro che fa quello che hai ripetuto, basta modificare i riferimenti ai nomi dei moduli da cancellare e da ricopiare; cosa non ti torna?

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: [vba] sostiture codici vba

Postdi riskismoney » 29/03/12 15:06

Anthony47 ha scritto:
Il codice non deve incollare il nuovo codice in modulo diverso dal modulo1.

Puoi spiegare perche' hai in mente questo vincolo?

Perchè il modulo1 contiene un codice comune a tutti i file, mentre gli altri moduli sono diversi nel senso che ogni file ha un numero x di moduli.
Anthony47 ha scritto:Comunque nel link che ti dato, nel mio messaggio datato 1/7/2009 e' descritta una macro che fa quello che hai ripetuto, basta modificare i riferimenti ai nomi dei moduli da cancellare e da ricopiare; cosa non ti torna?
Ciao

Probabilmente si tratta di incapacità da parte mia ma quel codice mi da errori da tutte le parti. Non riesco ad inquadrarlo!
:oops:
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] sostiture codici vba

Postdi riskismoney » 29/03/12 15:35

Ragazzi mettiamola cosi:
io riesco ad creare un codice buona parte del codice, vorrei, se possibile che mi suggeriste alcune righe di codice ed esattamente queste istruzioni:

1) apri il modulo1
2) cancella tutto il contenuto del modulo1
3) incolla sul modulo1

Se queste 3 istruzioni sono possibile il problema è risolto!

Grazie a tutti per l'aiuto!
Ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] sostiture codici vba

Postdi Anthony47 » 29/03/12 23:18

quel codice mi da errori da tutte le parti. Non riesco ad inquadrarlo!
Con questo livello di informazioni potrei al massimo suggerire format c:\ :D :D
Se mi dici il primo errore, il messaggio e l' istruzione, possiamo insieme fare qualcosa di piu'.
E guarda che il codice del mio messaggio datato 1/7/2009 fa proprio quello che continui a ri-chiedere (ultimo tuo post).
Lo hai letto? Contiene numerosi commenti; il messaggio ripete " Il primo blocco azzera il codice esistente su foglio target, il secondo copia dal foglio master al target." Siccome tu lavori su "Modulo1" e non sul "Foglio1" (inteso come modulo di codice di foglio1) devi modificare VBComponents("Foglio1") in VBComponents("Modulo1"); come pure invece di VBComponents("Foglio3") userai VBComponents("NomeModuloConNuovoCodice").
Come scritto sempre nella discussione dovrai dichiarare "attendibile l' accesso al progetto visual basic", la procedura la trovi anche nel post di Flash di qualche giorno fa.

Dove e' che ti incagli?

Ripeto la raccomandazione:
Tieni presente che l' operazione ha una sua rischiosita' intrinseca, raccomando di procedere dopo aver fatto "due" copie di backup dell' ambiente su cui lavorerai.

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: [vba] sostiture codici vba

Postdi riskismoney » 30/03/12 10:22

Anthony per oggi non sono in grado di riprovare nulla, trovandomi fuori casa, però se tu avessi una risposta al mio messaggio del 29/03/12 14:35 il problema sarebbe bello che risolto. :)
Grazie!
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] sostiture codici vba

Postdi Anthony47 » 30/03/12 10:36

:?: :?:
La risposta a quella richiesta e' nel codice che ti ho linkato, non so piu' come dirtelo.
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: [vba] sostiture codici vba

Postdi riskismoney » 30/03/12 17:58

Anthony47 ha scritto::?: :?:
La risposta a quella richiesta e' nel codice che ti ho linkato, non so piu' come dirtelo.

Ed io non so più come risponderti.
Ho seguito il suggerimento di flash ed in effetti il suo codice per cancellare una macro dal modulo funziona. Non riesco, seguendo il tuo link a far cancellare tutto il contenuto presente nel modulo1 (perchè ci sono più macro da cancellare).
Se qualche anima pia può scrivere il codice che mi cancella l'intero contenuto del modulo1 e che mi incolli su esso anche una sola parola di prova bene, altrimenti lasciamo stare.
Mille ringraziamenti comunque a te ed a Flash.
Ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] sostiture codici vba

Postdi Anthony47 » 30/03/12 22:36

riskimoney ha scritto:
Anthony ha scritto:La risposta a quella richiesta e' nel codice che ti ho linkato, non so piu' come dirtelo.
Ed io non so più come risponderti
Potresti cominciare rispondendo alle domande che ti ho fatto:
riskimoney ha scritto: quel codice mi da errori da tutte le parti. Non riesco ad inquadrarlo!

Se mi dici il primo errore, il messaggio e l' istruzione, possiamo insieme fare qualcosa di piu'.


Cio' detto, ho aperto un file chiamato Multi_B20115.xls contenente un Modulo1 come a immagine
Immagine

Uploaded with ImageShack.us

Ho aperto un altro file; in Modulo1 gli ho inserito la "nota macro" (vedi viewtopic.php?p=461363#p461363)

Ho inserito un Modulo2 contenente alcune macro e alcune funzioni, che sostituiranno il codice cancellato in Modulo1 di Multi_B20115.xls.

Nella "nota macro" ho modificato Esempio.xls in Multi_B20115.xls; ho modificato "Foglio1" in "Modulo1" (come gia' ti scrissi), ho modificato " Foglio3" in "Modulo2 (come gia' ti scrissi).

Ho inserito un break sulla linea
For i = ThisWorkbook.VBProject.VBComponents("Modulo2").CodeModule.CountOfLines To 1 Step -1

Ho mandato in esecuzione la macro, che si e' fermata quindi dopo aver eseguitoil ciclo che come commento iniziale riporta "clear vecchio codice:"

A questo punto il contenuto di Modulo1 su Multi_B20115.xls e' questo:
Immagine

Uploaded with ImageShack.us
Modulo1 e' ora vuoto

Ho completato l' esecuzione della "nota macro", e il contenuto di Modulo1 su Multi_B20115.xls e' questo:
Immagine

Uploaded with ImageShack.us
NB: Corrisponde al codice contenuto di Modulo2 del file in cui ho inserito la macro.

Se tu hai un risultato diverso allora dovresti cercare di documentarlo e insieme vedremo cosa fare.

La logica complessiva e' di costruire un file "master" che contiene (1) la macro per cancellare il contenuto di Modulo1 del file target e (2) un "ModuloX" il cui contenuto vuoi posizionare in Modulo1 del target. Ovviamente integrerai il codice per cancellare e riscrivere Modulo1 in una tua macro che apre e attiva uno dopo l' altro (uno alla volta) tutti i file da modificare, e concluderai ogni ciclo col salvataggio del file.

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


Torna a Applicazioni Office Windows


Topic correlati a "[vba] sostiture codici vba":


Chi c’è in linea

Visitano il forum: tex willer e 12 ospiti