Excel - Inexplicable ralentización en la ejecución de un código -Y NO SIEMPRE!-

 
Vista:
sin imagen de perfil

Inexplicable ralentización en la ejecución de un código -Y NO SIEMPRE!-

Publicado por Ramón (77 intervenciones) el 09/02/2024 11:19:55
No exagero en nada cuando digo que llevo 'puliendo' una aplicación determinada añadiendo procedimientos al procedimiento básico y esencial de ella que copiaré al final.

El procedimiento base -aunque mejor sería hablar en plural pues se trata de la ejecución de 20 OptionButtons idénticas en el fondo todas ellas-, podría describirlo así: Desde un UserForm específico en el que he dispuesto hasta 20 OptionButton ejercito una de ellas y a consecuencia de ello, en cuatro momentos diferentes, copio datos de 3 de las hojas de que consta el libro -TABLA1, TABLA2 Y TABLA3, que en el momento en que ejercito la acción están ocultas... añado este detalle por si tuviera algo que ver...-, y los pego en la hoja que en segundo plano permanece visible tras el UserForm -es la que llamo HOJABASE en el código que copiaré-.

Pues bien, inexplicablemente -al menos para mí- la ejecución del código, en ocasiones, pues no siempre sucede así, aleatoriamente pues, para mayor desconcierto, la ejecución del código se demora hasta 5 segundos -en otras ya digo que lo hace en los milisegundos que debe hacerlo y todo sin seguir un patrón de tiempos que se pueda definir...-.

Este es el código -absolutamente simple... en mi aplicación tengo otro infinitamente más complejos...-:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
'ANTES DE NADA DESPROTEJO LA HOJA -QUE VOLVERÉ A PROTEGER UNA VEZ QUE COPIE LOS DATOS DE LA OPCIÓN EJERCITADA:
Sheets("HOJABASE").Unprotect
 
Range("O10") = "Texto de la opción ejercitada."
Range("O10").Font.Bold = True
Range("O10").Font.Color = vbBlue
 
Application.ScreenUpdating = False
 
' DOY FORMATO A LAS CELDAS QUE RECOGERÁN LOS DATOS DE LA OPCIÓN:
Range("P14:S18").Font.Size = 11
Range("P14:S18").Font.Italic = True
Range("P14:S18").NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"
 
    Sheets("TABLA1").Range("B6:B10").Copy
    Sheets("HOJABASE").Range("P14").PasteSpecial xlPasteValues
 
    Sheets("TABLA1").Range("B14:B18").Copy
    Sheets("HOJABASE").Range("Q14").PasteSpecial xlPasteValues
 
    Sheets("TABLA2").Range("B13").Copy
    Sheets("HOJABASE").Range("R14:R18").PasteSpecial xlPasteValues
 
     Sheets("TABLA3").Range("C14:C18").Copy
    Sheets("HOJABASE").Range("S14").PasteSpecial xlPasteValues
 
' OCULTO LA BARRA DE FÓRMULAS:
Application.DisplayFormulaBar = False
 
Application.CutCopyMode = False
 
Range("A1").Select
 
Sheets("HOJABASE").Protect
 
Application.ScreenUpdating = True

Por favor, este tema tiene para mí la mayor importancia, cualquier idea que me sugiráis será bien recibida y puesta INMEDIATAMENTE en práctica
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Inexplicable ralentización en la ejecución de un código -Y NO SIEMPRE!-

Publicado por Ramón (77 intervenciones) el 10/02/2024 10:43:39
Al fin una pista!!!!!!!!!!!!!!

Reparo en que las veces que se 'engancha' el código, en la esquina inferior derecha de la pantalla de mi ordenador aparece el mensaje: "Error del portapapeles: No pudimos copiar el contenido en el Portapapeles porque lo está usando otra aplicación. Aun puede pegar el contenido de este libro, pero no estará disponible en otras aplicaciones".

Siguiendo esta pista he tratado de resolver el problema de las mil formas que se proponen en los textos y vídeos que he leído y visto, pero el éste persiste. Creo que el problema con el portapapeles deviene del código, de que en él se prevén 4 COPY-PASTE 'demasiado seguidos': ¿cómo puedo resolver sin tener que dividir en dos eventos diferentes el código?

P.S.- Amplio la información: Compruebo que el error del portapapeles se produce a partir del tercer copy-paste, con sólo dos todo correcto....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Inexplicable ralentización en la ejecución de un código -Y NO SIEMPRE!-

Publicado por Ramón (77 intervenciones) el 14/02/2024 10:35:52
Finalmente he incluido entre el segundo y el tercer Copy/Paste una pausa de 1 segundo.

Probablemente no sea lo óptimo pero funciona razonablemente bien:

1
2
' PAUSO LA EJECUCIÓN DEL CÓDIGO CON EL FIN DE EVITAR ERRORES EN EL FUNCIONAMIENTO DEL PORTAPAPELES:
Application.Wait (Now + TimeValue("0:00:01"))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar