Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

copia-incolla e Worksheet_Activate-Deactivate

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

copia-incolla e Worksheet_Activate-Deactivate

Postdi miko » 07/09/11 19:28

buonasera,
devo eseguire la stessa macro per molti fogli escludendone alcuni;
la macro consiste in un semplice copia-incolla, di un determinato range, dal foglio 1 agli altri fogli;
la particolarità è che i dati vengono incollati quando un foglio è selezionato, mentre il range viene cancellato quando si passa ad un altro foglio.
ad esempio se seleziono foglio 1 i dati vengono incollati, se passo al foglio 2, nel foglio 1 i valori vengono cancellati, mentre nel foglio 2 vengono incollati.
tutto funziona se inserisco le macro in ciascun foglio;
se invece nei fogli inserisco una call che richiama una unica macro in un modulo ho dei problemi con l'evento Deactivate.
nei fogli ho inserito questo codice
Codice: Seleziona tutto
Private Sub Worksheet_Deactivate()
RngIni = Sheets("Foglio1").Range("C" & Rows.Count).End(xlUp).Row
If RngIni = 2 Then Exit Sub
Sheets("Foglio1").Range("A4:BE" & RngIni).ClearContents
End Sub

dovendo usare la stessa macro per tutti i fogli, senza doverla inserire in ciascun foglio, richiamandola dal foglio al momento della sua selezione come devo procedere?
ho provato un ciclo ma non succede niente.
ciao, grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: copia-incolla e Worksheet_Activate-Deactivate

Postdi Anthony47 » 07/09/11 22:09

Io proverei a usare gli eventi Workbook_SheetDeactivate e Workbook_SheetActivate, in modo da lavorare con un solo codice per tipo di evento, da inserire nel modulo ThisWorkbook del vba.
Non ho capito che problema hai avuto con Worksheet_Deactivate, non mi vengono particolari suggerimenti.

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: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copia-incolla e Worksheet_Activate-Deactivate

Postdi miko » 08/09/11 10:32

salve,
la mia esposizione è stata forse confusionale, perciò riprovo a chiarire il problema che mi sono posto.
in ciascun foglio interessato al copia-incolla range da un foglio base ho inserito questo codice nell'evento activate di ogni foglio:
Codice: Seleziona tutto
Private Sub Worksheet_Activate()
Call WS_Activate
End Sub

quando un foglio viene selezionato si richiama una routine, unica per tutti i fogli posta in un modulo, che copia un range dal foglio base e lo incolla nel foglio selezionato;
la procedura funziona.
in sostanza invece di ripetere la macro che copia in tutti i fogli, nell'evento activate, ho inserito il codice precedente nei fogli e la unica macro copia in un modulo.
selezionando un altro foglio deve attivarsi l'evento Deactivate del foglio precedentemente selezionato;
in questo evento devo cancellare tutto il range precedentemente incollato;
es. se sono nel foglio 1 avrò il range incollato dovuto all'evento activate;
se ora passo al foglio 2, deve attivarsi l'evento deactivate per il foglio 1, che cancella i dati nel foglio 1, e contemporaneamente deve attivarsi l'evento activate per il foglio 2 che incolla il range;
per ottenere questo risultato ho inserito in tutti i fogli, interessati dalla procedura, nell'evento deactivate di ogni foglio il seguente codice:
Codice: Seleziona tutto
Private Sub Worksheet_Deactivate()
RngIni = Sheets("Foglio1").Range("C" & Rows.Count).End(xlUp).Row
If RngIni = 2 Then Exit Sub
Sheets("Foglio1").Range("A4:BE" & RngIni).ClearContents
Sheets("Foglio1").Range("C4:BE" & RngIni).Interior.ColorIndex = xlNone
End Sub

tutto funziona perfettamente;
quello che non riesco ad ottenere è un risultato simile all'evento activate, codice iniziale, cioè sostituire alle righe di codice precedenti una call che richiama una identica routine valida per tutti i fogli, qualcosa del tipo:
Codice: Seleziona tutto
Private Sub Worksheet_DeActivate()
Call WS_DeActivate
End Sub

sia per l'evento activate che per l'evento deactivate devo escludere alcuni fogli.
altro quesito inerente:
quando, come in questo caso, si devono ricopiare le stesse linee di codice nei moduli di tanti fogli è possibile usare un metoto diverso dal copia-incolla?
ad esempio con una altra macro?
ciao e grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: copia-incolla e Worksheet_Activate-Deactivate

Postdi Flash30005 » 08/09/11 16:01

:roll:
Non so se ho afferrato bene, devi solo provare...

all'inizio del modulo inserisci una dichiarazione
Codice: Seleziona tutto
Public NomeF as string


Nel modulo metti il codice del deactivate (macro comune)
Codice: Seleziona tutto
Sub WS_Deactivate()
RngIni = Sheets(NomeF).Range("C" & Rows.Count).End(xlUp).Row
If RngIni = 2 Then Exit Sub   '<<<< qui forse volevi mettere < 2 (o minore di 3 se hai una testata di 2 righe)
Sheets(NomeF).Range("A4:BE" & RngIni).ClearContents
Sheets(NomeF).Range("C4:BE" & RngIni).Interior.ColorIndex = xlNone
End Sub


Nella macro di ogni foglio aggiungi..
Codice: Seleziona tutto
Private Sub Worksheet_Activate()
Call WS_Activate
NomeF = Name  '<<<< riga che potrebbe essere inutile, da verificare
End Sub


In ogni Foglio funzione deactivate richiami la macro
Private Sub Worksheet_Deactivate()
NomeF = Name
Call WS_Deactivate
End Sub

Prova e fai sapere
Ciao
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: copia-incolla e Worksheet_Activate-Deactivate

Postdi Anthony47 » 08/09/11 23:06

Se approfondisci il suggerimento che ti ho dato ieri sera noterai che potresti risolvere tutto con 1 (una) macro di Attiva foglio e 1 (una) di Disattiva foglio; qualcosa da mettere in ThisWorkbook del tipo:
Codice: Seleziona tutto
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Foglio22" Or Sh.Name = "Foglio33" Then Exit Sub '<< I fogli da ignorare
'
Call WS_Activate   'oppure metti qui le istruzioni di WS_Activate
End Sub

Codice: Seleziona tutto
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name = "Foglio22" Or Sh.Name = "Foglio33" Then Exit Sub '<< I fogli da ignorare
'
RngIni = Sh.Range("C" & Rows.Count).End(xlUp).Row
If RngIni = 2 Then Exit Sub
Sh.Range("A4:BE" & RngIni).ClearContents
Sh.Range("C4:BE" & RngIni).Interior.ColorIndex = xlNone
End Sub

Questo in aggiunta al suggerimento di Flash (vedi sopra)

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: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copia-incolla e Worksheet_Activate-Deactivate

Postdi miko » 09/09/11 19:14

buona sera a tutti,
grazie ad entrambi, Flash ed Anthony, per le 2 differenti ed efficaci soluzioni, anche perchè ho scoperto questi altri eventi, Workbook_SheetActivate e Deactivate, che non conoscevo.
nelle macro di Anthony ho notato che nella Workbook_SheetActivate si fa uso della call, mentre nella Workbook_SheetDeactivate è stato inserito il codice per cancellare;
ho provato a modificare questa inserendo una call che richiama quelle linee, ma qualunque modifica apporto ho sempre errore perchè non viene riconosciuto il worksheet Sh, anche inserendo una dim od una public ad inizio modulo.
le vostre macro, facendo uso di una variabile, mi hanno suggerito un procedimento inerente a questo topic.
in ogni foglio devo cercare sempre gli stessi valori ma differenti da foglio a foglio;
la macro di ricerca è identica cambiando solo i valori da ricercare.
ad esempio nel foglio 1 devo cercare in ogni riga 1, 10, 12, 13;
nel foglio 2 devo cercare in ogni riga 15, 24, 56, 57;
ho pensato di inserire, nell'evento Workbook_SheetActivate, questi valori in variabili che vengono prelevate dall'unica macro di ricerca richiamata da una call posta nello stesso evento;
selezionando un foglio si attiva la macro di ricerca e trova quei valori inerenti a quel determinato foglio.
anche in questo caso le prove che ho fatto mi danno errori oppure non producono effetto.
saluti e grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: copia-incolla e Worksheet_Activate-Deactivate

Postdi Flash30005 » 09/09/11 21:15

Sembra che il primo quesito sia risolto con la variabile NomeF
quindi per il secondo quesito inserire nel modulo una
Select Case

Che fa assumere alle 4 variabili il valore secondo il foglio

E' sufficiente l'input?

Ciao
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-


Torna a Applicazioni Office Windows


Topic correlati a "copia-incolla e Worksheet_Activate-Deactivate":


Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti