Copiare la riga di altro foglio alla riga di altro foglio evitando lo "sfarfallamento".

Anonimo
2023-04-19T13:41:09+00:00

Buongiorno a tutti, sono nuovo all'ambiente per cui vi chiedo indulgenza se commetto qualche errore nella forma.

Sebbene non creda possa influire, il mio SO è Windows 7.

Tengo a precisare, per onestà intellettuale, che sono un utente LibreOffice, per cui se non ritenete opportuno impegnarvi nella discussione vi chiedo solo cortesemente di comunicarmi la legittima presa di posizione. Grazie comunque.

Il mio problema è questo:

  • da Foglio1 voglio copiare Foglio2.riga1 in Foglio2.rigaN.

Di per sè l'operazione è banale e l'ho già eseguita, tuttavia, quando, da "Foglio1", viene eseguita l'istruzione "Copy" su Foglio2 il "focus" si sposta su quest ultimo, come se eseguissi: "Sheets("Foglio2").Select".

I sostanza, sono nella "Macro1" che sta gestendo una serie di celle (colonne) della rigaN presenti in Foglio1, alla modifica della cella "Prodotto" chiamo la "Macro2" che:

  1. esegue un loop su Foglio2 alla ricerca del Prodotto indicato in Foglio1; a) se esiste esce dalla routine senza fare alcunchè;
  2. se NON esiste esegue il copia/incolla della riga1 di Foglio2 alla rigaN di Foglio2, come di seguito: I) "Sheets("Foglio2").Range(Sheets("Foglio2").Cells(riga1, 2), Sheets("Foglio2").Cells(riga1, last_col)).Copy" II) "Sheets("Foglio2").Range(Cells(rigaN, 2), Cells(rigaN, last_col)).PasteSpecial Paste:=xlPasteFormulas"

Naturalmente al ritorno dalla "Macro2" con "Sheets("Foglio1").Cells(riga, colonna).Select" ripropone il Foglio1, tuttavia, vorrei evitare che la "COPY", perchè è lei l'"imputata", come evidenziato da debug, proponesse lo "sfarfallamento" da Foglio1 a Foglio2 e nuovamente Foglio1.

Ho provato con "Application.ScreenUpdating" ma, forse perchè non l'ho utilizzata correttamente o forse perchè non fa al caso mio, non sono riuscito ad eliminare lo sfarfallamento.

Tengo a precisare che altre istruzioni come, per esempio, "ClearContents" non produce alcun effetto indesiderato.

Mi rendo conto che è una pignoleria, tuttavia se riuscissi ad evitare la cosa ne sarei felice e più ricco "culturalmente". :-)

Tengo infine a precisare che in Folgio1 è attivo l'evento che si attiva alla modifica delle celle, mentre su Foglio2 non vi sono eventi attivi.

Qualcuno mi sa aiutare?

Grazie in anticipo.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2023-04-19T16:08:51+00:00

Ciao Robi5310!

Sembra che tu voglia evitare lo sfarfallio causato dal passaggio da un foglio all'altro durante la copia delle righe. A tale scopo, è possibile utilizzare la proprietà Application.ScreenUpdating

Application.ScreenUpdating = False 'Disattiva l'aggiornamento dello schermo per evitare lo sfarfallio

'Il tuo codice per cercare e copiare/incollare le righe qui

Application.ScreenUpdating = True 'Riattiva l'aggiornamento dello schermo

Gentilmente fatemi sapere, se avete bisogno di ulteriore assistenza, sarò lieto di aiutarvi ulteriormente.

Migliori saluti Shakiru ·

Questa risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o espressioni strane.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

1 risposta aggiuntiva

Ordina per: Più utili
  1. Anonimo
    2023-04-20T08:45:48+00:00

    Ciao Shakiru.

    Innanzi tutto grazie per la risposta.

    Come avevo menzionato la proprietà "Application.ScreenUpdating" l'avevo già provata, tuttavia, in seguito al tuo suggerimento, l'ho inserita nuovamente e l'ho riprovata, purtroppo con lo stesso risultato!

    Guardando però la macro mi sono soffermato su un'altra proprietà presente e cioè:

    "Application.Cursor = xlWait" e la successiva "Application.Cursor = xlDefault".

    Le ho eliminate e: "voilà les jeux sont fait". :-)))

    Evidentemente la proprietà "Application.Cursor = xlWait" va in conflitto con "Application.ScreenUpdating" rendendo quest'ultima inefficace.

    Tra l'altro avevo provato anche con "Application.EnableEvents = False/True" ma senza risultati!

    Ho guardato 1000 e 1000 volte la macro chiamante e la macro chiamata, purtroppo dopo un po' non vedi le cose che ci sono e vedi cose che non esistono.

    Sebbene con VBA ci abbia a che fare da circa un anno, ho fatto l'informatico per 32 anni su grandi sistemi (main frame, cobol, cics, db2, sql, ecc...) e ho imparato che dopo un po' che cerchi di risolvere un problema senza risultati, una soluzione può essere quella di esporlo a un/una collega.

    Mi è capitato spesso che lo spiegare a qualcuno un problema questo venga risolto.

    Sembra sia un po' come "svuotare la cahe" del cervello, resettarlo, e ripartire da zero.

    Credimi, a volte funziona!

    Non posso fare altro che ringraziarti per avermi fatto "resettare" il cervello, il tuo aiuto è stato molto prezioso e spero che anche altri traggano beneficio da questa filosofia, oltre che, naturalmente, dal supporto tecnico.

    Un saluto robi5310 (roberto).

    La risposta è stata utile?

    0 commenti Nessun commento