Condividi:        

Macro per aggiungere testo in tutti i files di una cartella?

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

Macro per aggiungere testo in tutti i files di una cartella?

Postdi systemcrack » 30/09/24 14:47

Ciao a tutti,
un pò per sperimentazione un pò per possibili utilizzi futuri, sto lavorando ad un file che tramite un pulsante attiva una macro che dovrebbe aggiungere nella cella B202 di tutti i files presenti in una cartella specifica un testo specifico.

Ipotizziamo che i files presenti nella cartella sono in formato .xlsm e tutti con un nome differente (come prova i files sono rinominati test1.xlsm, test2.xlsm, ecc fino al nr.8 ).

Fino ad ora sono arrivato a questo punto
Codice: Seleziona tutto
Sub FirmaTutto()
Dim fName As String
Dim wbk As Workbook
Dim myPath As String
myPath = "C:\utente\Nuova cartella\"
fName = Dir(myPath)
Application.ScreenUpdating = False
Do While fName <> ""
    Set wbk = Workbooks.Open(fName)
      Range("B202").Value = "TESTO PERSONALIZZATO"
    wbk.Save
    wbk.Close
    fName = Dir()
Loop
Application.ScreenUpdating = True
End Sub


in cui mi sono bloccato in quanto ricevo errore di run-time 1004 all'apertura del primo file:
test1.xlsm non è stato trovato. Verificare che il file non sia stato spostato, rinominato o eliminato.


Inoltre volevo chiedere perchè su questo argomento in parte correlato al presente post, non ho trovato nulla:
E' possibile scrivere qualche cosa anche nel vba modulo (esempio ' ---TESTO PERSONALIZZATO) oltre che nella cella del primo foglio?
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Sponsor
 

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi Anthony47 » 30/09/24 18:04

Ci sono piccole modifiche qua e la:
Codice: Seleziona tutto
Sub FirmaTutto()
Dim fName As String
Dim Wbk As Workbook
Dim myPath As String
Dim myNext As Long
'
myPath = "C:\utente\Nuova cartella\"
fName = Dir(myPath & "*.xlsm")              'Solo xlsm, non xlsx; giusto?
Application.ScreenUpdating = False
Application.EnableEvents = False
Do While fName <> ""
    Set Wbk = Workbooks.Open(myPath & fName)
        myNext = ThisWorkbook.Sheets("Loggg").Cells(Rows.Count, "A").End(xlUp).Row + 1
        If Sheets("QUALE FOGLIO???").Range("B202").Value = "" Then
            'Se la cella di partenza e' vuota:
            Wbk.Sheets("QUALE FOGLIO???").Range("B202").Value = "TESTO PERSONALIZZATO"
            'Prendi nota della modifica:
            ThisWorkbook.Sheets("Loggg").Cells(myNext, 1) = myPath & fName
            ThisWorkbook.Sheets("Loggg").Cells(myNext, 2) = "MODIFICATO"
            Wbk.Close True      'Salva e chiudi
        Else
            'Se la cella di partenza non e' vuota:
            ThisWorkbook.Sheets("Loggg").Cells(myNext, 1) = myPath & fName
            ThisWorkbook.Sheets("Loggg").Cells(myNext, 2) = Sheets("QUALE FOGLIO???").Range("B202").Value
            Wbk.Close False     'Chiudi senza salvare
        End If
    fName = Dir()
Loop
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Noterai che ho previsto di indicare il nome del file su cui scrivere, perchè secondo me il file attivo all'apertura del file è imprevedibile (dovrebbe essere il foglio attivo all'ultimo salvataggio)

Oltre all'indispensabile ho introdotto (perchè suggerisco che siano presenti) un controllo e una registrazione:
1) che la cella in cui vuoi scrivere sia vuota (o, modificando il codice, che contenga qualcosa di particolare); se Sì, si apporta la modifica, se No, si chiude e si passa al prossimo file
2) che l'operazione venga registrata nel foglio "Loggg" (che deve esistere nel file che contiene la macro), indicando nome file completo e se la modifica e' stata apportata oppure no. A fine operazione controlli il contenuto di Loggg prima di salvarlo a futura memoria

Inoltre volevo chiedere perchè su questo argomento in parte correlato al presente post, non ho trovato nulla:
E' possibile scrivere qualche cosa anche nel vba modulo (esempio ' ---TESTO PERSONALIZZATO) oltre che nella cella del primo foglio?
Non ho capito su quale argomento hai cercato senza trovare (ma forse a un pezzetto ho risposto)
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi systemcrack » 30/09/24 21:09

Ciao Anthony, come sempre.. grazie per la tua cortese risposta, domani testerò il codice modificato da te. Per rispondere al tuo quesito, se fosse possibile aggiungere testo personalizzato in un modulo vba oltre che in una cella (di altri files) tramite una macro.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi Anthony47 » 30/09/24 21:43

Cioe' vuoi sapere se si puo' modificare una macro tramite una macro?
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi systemcrack » 01/10/24 08:05

Anthony47 ha scritto:Cioe' vuoi sapere se si puo' modificare una macro tramite una macro?

Buongiorno Anthony, in realtà non pensavo alla modifica di una macro, ma semplicemente aggiungere del testo nel codice.. per fare un esempio pratico:
Codice: Seleziona tutto
'---- modello creato e sviluppato da Tizio

oppure
Codice: Seleziona tutto
'----- macro per aprire pop-up


ma anche modificare una macro con un'altra macro potrebbe essere un esperimento interessante ;)
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi systemcrack » 01/10/24 08:50

Ho testato il codice che avevi corretto ed ora ricevo un errore di Run-Time9 indice non incluso relativo a questa riga:
Codice: Seleziona tutto
myNext = ThisWorkbook.Sheets("Loggg").Cells(Rows.Count, "A").End(xlUp).Row + 1

che sia dovuto da questa parte
Codice: Seleziona tutto
myNext = ThisWorkbook.Sheets("Loggg")

che se non capisco male "cerca" un foglio o un workbook chiamato Loggg.. o sto leggendo/interpretando male io il codice?
Purtroppo i files contenuti nella cartella sono tutti rinominati differentemente e non hanno un nome standard.

1/2 secondo dopo
Niente.. lascia perdere Anthony, ho riletto con più calma le tue indicazioni ed ho capito il perchè dell'errore e del foglio Logg.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi systemcrack » 01/10/24 09:52

C'è solo una cosa particolare che rende tutto il processo lento, per ogni foglio si apre un pop-up che riporta la dicitura:

"Attenzione! In alcune parti del documento potrebbero essere presenti informazioni personali che non possono essere rimosse tramite controllo documento"

Ora se devo variare centinaia di workbook diventa fastidioso dover cliccare ogni pagina.
Comunque anche se si apre questo pop-up il processo avviene correttamente e la dicitura viene riportata correttamente.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi Anthony47 » 01/10/24 10:50

Eh he, il foglio Loggg DEVE ESISTERE nel file che contiene la Sub FirmaTutto

Quanto al messaggio, proviamo ad aggiungere Application.DisplayAlerts = False/True in queste posizioni:
Codice: Seleziona tutto
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False          '<<<<
Do While fName <> ""
.
.
.
Loop
Application.DisplayAlerts = True        '<<<<
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi Anthony47 » 01/10/24 10:52

Buongiorno Anthony, in realtà non pensavo alla modifica di una macro, ma semplicemente aggiungere del testo nel codice..
Questa E' una modifica al contenuto della macro

Qualcosa abbiamo fatto in passato
Ad esempio qui: viewtopic.php?f=26&t=65595 (le istruzioni base sono nel secondo messaggio)

In quest'altro messaggio si spiega come poter trovare all'interno di un "Modulo" la riga da elimiare e sostituire: viewtopic.php?f=26&t=80543&p=458322#p458322

In quest'altro messaggio (non provare a leggere tutta la discussione che ti viene mal di testa) viene descritto un metodo per "svuotare" un Modulo vba del file B e riempirlo col contenuto di un Modulo inserito nel file A, il file che contiene anche la macro da eseguire: viewtopic.php?f=26&t=81028&start=20#p461298

In questi esempi talvolta si fa riferimento a ThisWorkbook.VBProject.etc etc; ricordarsi che con ThisWorkbook si indirizza il file Excel che contiene la macro in esecuzione. Poiche' immagino che la macro e' in esecuzione sul file A e la modifica va apportata sul file B bisogna modificare ThisWorkbook in ActiveWorkbook (a) che lavorerà sul file al momento attivo, oppure in Workbooks("NomeDelFile") che lavorerà su quello specifico file.

Per queste operazioni e' necessario che in Excel sia dichiarato attendibile l'accesso al modello a oggetti del Vba, tramite Menu /File /Opzioni /Centro protezione; Impostazioni centro protezione /Impostazioni delle macro

Dato il rischio di ottenere risultati diversi dall'attesa, prima di provare fare sempre due copie di backup dei file che si vuole modificare.
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi systemcrack » 01/10/24 10:56

Come non detto, ho fatto un test con una cartella che contiene 169 elementi, finito di lavorare il 139esimo ricevo un errore di Run-time 9 indice non incluso e viene indicata la seguente riga:
Codice: Seleziona tutto
ThisWorkbook.Sheets("Loggg").Cells(myNext, 2) = Sheets("QUALE FOGLIO???").Range("B202").Value

Il codice che avevi corretto, l'ho aggiustato alle mie esigenze nel seguente modo:
Codice: Seleziona tutto
Sub FirmaTutto()
Dim fName As String
Dim Wbk As Workbook
Dim myPath As String
Dim myNext As Long
'
myPath = "C:\GIORNI PASSATI\NUOVA CARTELLA\"
fName = Dir(myPath & "*.xlsm")              'Solo xlsm, non xlsx; giusto?
Application.ScreenUpdating = False
Application.EnableEvents = False
Do While fName <> ""
    Set Wbk = Workbooks.Open(myPath & fName)
        myNext = ThisWorkbook.Sheets("Loggg").Cells(Rows.Count, "A").End(xlUp).Row + 1
        If Sheets("ENTRATE").Range("B202").Value = "" Then
            'Se la cella di partenza e' vuota:
            Wbk.Sheets("ENTRATE").Range("B202").Value = "TESTO SPECIFICO"
            'Prendi nota della modifica:
            ThisWorkbook.Sheets("Loggg").Cells(myNext, 1) = myPath & fName
            ThisWorkbook.Sheets("Loggg").Cells(myNext, 2) = "MODIFICATO"
            Wbk.Close True      'Salva e chiudi
        Else
            'Se la cella di partenza non e' vuota:
            ThisWorkbook.Sheets("Loggg").Cells(myNext, 1) = myPath & fName
            ThisWorkbook.Sheets("Loggg").Cells(myNext, 2) = Sheets("QUALE FOGLIO???").Range("B202").Value
            Wbk.Close False     'Chiudi senza salvare
        End If
    fName = Dir()
Loop
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

A parte nell'ultima riga ho modificato - Sheets("QUALE FOGLIO???") in Sheets("nome foglio dove voglio che compaia la scritta").. l'errore è causato da questa mancata modifica del comando?
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi Anthony47 » 01/10/24 11:00

Evidentemente il file 139esimo ha la cella B202 non vuota
Comunque Sì, tutti i "QUALE FOGLIO???" devono essere sostituiti dal vero nome del foglio
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi systemcrack » 01/10/24 13:28

Anthony47 ha scritto:Evidentemente il file 139esimo ha la cella B202 non vuota
Comunque Sì, tutti i "QUALE FOGLIO???" devono essere sostituiti dal vero nome del foglio

Ho controllato, ma in tutti i files che faccio controllare sono certo che la casella B202 del foglio a cui punto e che hanno tutti i workbook contenuti nella cartella, sia vuota. Di conferma c'è che sono andato a controllare il 139esimo file e la casella B202 è vuota.
Inoltre mi sembrava di capire che con il controllo aggiunto da te se la casella fosse già compilata, la macro sarebbe passata al file successivo oppure "si sarebbe chiusa"..

Tra l'altro se ripeto il processo sui files della stessa cartella, in cui quindi i primi 138 sono già "segnati", nel foglio loggg mi indica che il testo è già presente e che non ha modificato nulla (quindi non compare la scritta "Modificato").

Spostando il file in cui ricevevo errore, il processo continua fino alla fine dei file, perciò il problema è legato a quel file specifico, ma non capisco in cosa consista il problema dal momento che la cella B202 è vuota, il foglio si chiama nel modo giusto, il formato è corretto.. :aaah :lol:

Allego il file incriminato.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi Anthony47 » 01/10/24 14:06

Il file non e' accessibile (mancano i diritti di accesso), prova a distribuirlo tramite altro servizio di file sharing (io uso molto Dropbox, a mio parere uno dei migliori servizi cloud; la versione gratuita ti da uno spazio di 2 GB)

Se la cella e' vuota, su Loggg trovi scritto Nome file + MODIFICATO, altrimenti ci trovi scritto Nome file + il contenuto corrente della cella
bastano
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi systemcrack » 01/10/24 16:49

Si Anthony è perfetto.. ho fatto test su altri files ed il problema è legato a quegli specifici che danno errore. Ho aperto i files problematici ed avevano un qualche tipo di errore, ma salvandoli sovrascivendo le vecchie copie funziona. Grazie Anthony. Comunque se per tua curiosità vuoi dare un'occhiata tra 10 min sblocco il file.
Purtroppo l'unico servizio di sharing accessibile dall'ufficio è drive.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi Anthony47 » 02/10/24 00:18

Il file lo apro senza problema, e cella B202 di ENTRATE è oltre l'intervallo usato <"A1:P141"> quindi non può che essere vuoto.
Insomma non ho dedotto nulla
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro per aggiungere testo in tutti i files di una carte

Postdi systemcrack » 02/10/24 12:55

Fa lo stesso Anthony.. la macro così funziona e fa il suo lavoro.. ho fatto una prova su più di 2000 files e ho ricevuto errore solo 3 volte ed ho impiegato mezz'ora invece che giorni senza nemmeno dover stare più di tanto davanti al pc (quindi intanto ho potuto fare altro), il risultato è più che soddisfacente.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40


Torna a Applicazioni Office Windows


Topic correlati a "Macro per aggiungere testo in tutti i files di una cartella?":


Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti