SCREENUPDATING NO RESPONDE ???

20/11/2009 - 06:42 por Orfao | Informe spam
Hola Grupo !

Estoy trabajando con windows 7 y office 2003 y 2007.

En un libro donde tengo gran cantidad de formatos, controles, celdas
combinadas, etc. ademas de varias macros. De pronto comenzo a presentarse una
falla cuando ejecuto una macro.

Por ejemplo :
en una macro que me copia valores entre las hojas del libro,
activa/desactivo o hago visibles/ocultos varios controles y cambia a otras
hojas , yo comienzo con una instruccion application.screenupdating =False y
luego de todas las demas lineas de codigo finalizo con
application.screenupdating=True.

Con esto evito el parpaddeo y solo se actualiza/refresca la pantalla al
final de la macro. Pero .. no se a cuenta de que, de pronto, ahora aunque no
se ve el parpadeo me aparecen en pantalla trozos /pedazos de informacion de
otra hoja montados sobre la hoja activa y solo los elimino si ejecuto un
scroll o ejecuto un recalculo . estoy casi convencido que se trata de algun
conflicto con algunos complementos pero los he desinstalado y el problema
continua.

Como podria solucionar este problemita de la forma mas
facil/practica/rapida/segura ???
Tal vez problemas de memoria ? capacidad grafica / controlador de video ?

Por ciento, he notado que el complemento excel utilities 2.1 me genera un
conflico ton casi todos los libros que abro cuando trato de aplicar/modificar
el formato a aluguna celda. Sucede que se cierra excel / no responde / y se
reinicia con una recuperacion del archivo..
por que ?? como corregirlo /evitarlo .


Gracias..
Me alimento del conocimiento de todos

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
20/11/2009 - 06:59 | Informe spam
hola, moises !

es un pelin dificil "imaginar" esto:
... un libro... gran cantidad de formatos, controles, celdas combinadas, etc. ademas de varias macros...



y esto:
... una macro... copia valores entre las hojas... activa/desactivo o hago visibles/ocultos varios controles... cambia a otras hojas...



y con respecto de esto:
... comienzo con una instruccion application.screenupdating =False y... finalizo con application.screenupdating=True.



te puedo decir que la instruccion "final" (screenupdating=true) NO es necesaria ya que se (re)activa "soita" al final de un procedimiento
a menos, que se trate de un procedimiento de evento (_beforeprint donde se muestra un formulario) o casos muy "especiales" ;)

con relacion a esta parte:
... de pronto, ahora aunque no se ve el parpadeo me aparecen en pantalla
trozos /pedazos de informacion de otra hoja montados sobre la hoja activa
y solo los elimino si ejecuto un scroll o ejecuto un recalculo...



(probablemente) en alguna parte tienes instrucciones que hacen (o intentan hacer) un "scroll" en una pantalla "congelada" (???)
por lo que para poder (intentar) responder (o proponer soluciones posibles) a esta pregunta:

Como podria solucionar este problemita de la forma mas facil/practica/rapida/segura ???
Tal vez problemas de memoria ? capacidad grafica / controlador de video ?



(como que) habria que conocer mas "detalles" de las instrucciones de las "varias macros" (???)

en cuanto a esta parte (final ?) de tu consulta:
... he notado que el complemento excel utilities 2.1 me genera un conflico ton casi todos los libros que abro
cuando trato de aplicar/modificar el formato a aluguna celda.
Sucede que se cierra excel / no responde / y se reinicia con una recuperacion del archivo..
por que ?? como corregirlo /evitarlo .



(supongo que) necesitaras "reportarlo" en el sitio de su descarga (?)

saludos,
hector.
Respuesta Responder a este mensaje
#2 ORFAO
21/11/2009 - 20:14 | Informe spam
Hola Hector !

He estado probando...
En una nueva particion vacia, instale windows7 y office 2003
pero... nada ! el problema continua.
probe en otros equipos con Xp sp3 y... Tampoco !
abri versiones anteriores del mismo libro que antes funcionaban
perfectamente y... Igual !
Siguen apareciendo trozos/pedazos/fragmentos de otras hojas del libro
sobre la que esta visible (activa en ese momento).

segui probando y ...Bingo !

Me percate que el problema se soluciona (aparentemente) si y solo si,
luego der abrir el libro, activo (hago visible) cada una de las hojas
del libro.
Esto me recuerda cuando programaba en Basic preinstalado en ROM en
una HP-85 .
En ese caso, el programa que yo diseñaba, debia compilarlo con una
instruccion (la cual no recuersdo) para de esa manera reservar memoria
para todas las variables usadas en el programa, y, aunque esto no era
requisito indispendable, si agilizaba sustancialmente la velocidad de
ejecucion de las diferentes rutinas. De no hacerlo asi, el programa se
dilataba mas la primera vez que se ejecutaba una instruccion, que las
veces subsiguientes.
aparentemente, porque ya estaban reservados los "espacios" de memoria
para las variables.

Tomando en cuenta lo anterior, abro mi libro y en el editor de vba
compilo el proyecto. Esto tampoco resuelve/soluciona el problema.
Tal vez lo que requiera sera una compilacion del excel mismo y de sus
complementos y/o referencias.

Por otro lado, he escaneado con Avast en algunos equipos y con
Kaspersky en otros y no aparece ningun "bicho".

El libro lo paso a diferentes equipos a traves de un pendrive el cual
tambien he escaneado.

En fin...El problema continua.

(probablemente) en alguna parte tienes instrucciones que hacen (o
intentan hacer) un "scroll" en una pantalla "congelada" (???)
por lo que para poder (intentar) responder (o proponer soluciones
posibles) a esta pregunta:

Miguel, aclarame algo please.
Congelado ?
Implica que scrren updating =False
o que tengo limitado el acceso con sclollarea ej:
VBAProject.Hoja23.ScrollArea = "A1:j58"

Si lo deseas te envio algunas instrucciones/rutinas/partes del
proyecto (el paquete completo es bastante pesado 20mb y engorroso/
complicado) para que le des un vistazo.

Si requieres de alguna informacion adicional para facilitar la
solucion al problema, hazmelo saber.

Gracias !

Saludos.
Respuesta Responder a este mensaje
#3 Héctor Miguel
21/11/2009 - 21:14 | Informe spam
hola, moises !

si detectas que mostrando primero todas las hojas (casi) se resuelve este detalle...
y lo puedes relacionar con el manejo/administracion/... de variables de una programacion "X"...
(probablemente) la situacion es provocada (precisamente) por la falta (o forma de administracion) de variables en tus codigos ?
que quizas (ab)usan de instrucciones del tipo <objeto>.Select (o .Activate) cuando NO es necesario (y menos indispensble) ?
(me explico): si tienes instrucciones estructuradas de esta forma:

<hoja>.activate
<rango>.select
selection.copy
<otra hoja>.activate
activesheet.paste
application.cutcopymode = false

1) requieres que las hojas esten visibles (o no las podras .activate)
2) el codigo sera mas lento (realmente esta "select"ionando los objetos)

en su lugar, podrias estructurar instrucciones de copiado +/- asi:

<hoja>.<rango>.copy destination:=<otra hoja>.<rango_base>

1) NO requiere que las hojas esten visibles
2) es mas rapida la ejecucion de las macros

(creo que) podrias iniciar por estos comentarios y (probablemente) descubrir "la instruccion" que causa las apariciones (?)

saludos,
hector.

__ OP __
He estado probando...
En una nueva particion vacia, instale windows7 y office 2003 pero... nada ! el problema continua.
probe en otros equipos con Xp sp3 y... Tampoco !
abri versiones anteriores del mismo libro que antes funcionaban perfectamente y... Igual !
Siguen apareciendo trozos/pedazos/fragmentos de otras hojas del libro sobre la que esta visible (activa en ese momento).

segui probando y ...Bingo !

Me percate que el problema se soluciona (aparentemente) si y solo si luego der abrir el libro, activo (hago visible) cada una de las hojas del libro.
Esto me recuerda cuando programaba en Basic preinstalado en ROM en una HP-85 .
En ese caso, el programa que yo diseñaba, debia compilarlo con una instruccion (la cual no recuersdo)
para de esa manera reservar memoria para todas las variables usadas en el programa, y
aunque esto no era requisito indispendable, si agilizaba sustancialmente la velocidad de ejecucion de las diferentes rutinas.
De no hacerlo asi, el programa se dilataba mas la primera vez que se ejecutaba una instruccion, que las veces subsiguientes.
aparentemente, porque ya estaban reservados los "espacios" de memoria para las variables.

Tomando en cuenta lo anterior, abro mi libro y en el editor de vba compilo el proyecto.
Esto tampoco resuelve/soluciona el problema.
Tal vez lo que requiera sera una compilacion del excel mismo y de sus complementos y/o referencias.

Por otro lado, he escaneado con Avast en algunos equipos y con Kaspersky en otros y no aparece ningun "bicho".

El libro lo paso a diferentes equipos a traves de un pendrive el cual tambien he escaneado.

En fin...El problema continua.

(probablemente) en alguna parte tienes instrucciones que hacen (o intentan hacer) un "scroll" en una pantalla "congelada" (???)
por lo que para poder (intentar) responder (o proponer soluciones posibles) a esta pregunta:

Miguel, aclarame algo please.
Congelado ?
Implica que scrren updating =False
o que tengo limitado el acceso con sclollarea ej: VBAProject.Hoja23.ScrollArea = "A1:j58"

Si lo deseas te envio algunas instrucciones/rutinas/partes del proyecto
(el paquete completo es bastante pesado 20mb y engorroso/complicado) para que le des un vistazo.

Si requieres de alguna informacion adicional para facilitar la solucion al problema, hazmelo saber...
Respuesta Responder a este mensaje
#4 Orfao
21/11/2009 - 22:41 | Informe spam
Hola Hector !

En los procedimientos que empleo aplico tus recomendaciones a exepcion de
casos donde no lo puedo simplificar (creo) como por Ej:
si estoy en Hoja GENERAL1
y ejecuto la siguiente macro asignada a un commandbuttom


Sub macrototales()
Dim T As Variant
Dim X As Variant
Dim FI As Variant
Dim Y As Variant
Dim m As Variant
Dim M_M As Variant
Dim E As Variant
Dim E_M As Variant
Dim p As Variant
Dim P_M As Variant
Dim TT As Variant
Dim M1 As Variant
Dim n As Variant
Dim E1 As Variant
Dim P1 As Variant
T = VBAProject.Hoja1.Range("A1").Value
For X = 1 To T
FI = X * 15 - 13
'calcula el total de materiales
If Cells(FI, 16) Then
For Y = 1 To Cells(FI, 16)
Cells(FI + Y - 1, 19).Value = Cells(FI, 15) * Cells(FI + Y - 1, 8)
Next Y
End If
'calcula el total de equipos
If Cells(FI, 17) Then
For Y = 1 To Cells(FI, 17)
Cells(FI + Y - 1, 20).Value = Cells(FI, 15) * Cells(FI + Y - 1, 10)
* Cells(FI + Y - 1, 11)
Next Y
End If
'calcula el total de mano de obra
If Cells(FI, 18) Then
For Y = 1 To Cells(FI, 18)
Cells(FI + Y - 1, 21).Value = Cells(FI, 15) * Cells(FI + Y - 1, 13)
* Cells(FI + Y - 1, 14)
Next Y
End If
Next X
'-
m = Cells(2, 22).Value 'maximo valor del material
M_M = Cells(2, 23).Value
E = Cells(2, 24).Value
E_M = Cells(2, 25).Value
p = Cells(2, 26).Value
P_M = Cells(2, 27).Value
TT = Cells(1, 1) * 15
ReDim mmaterial(m)
ReDim eEQUIPO(E)
ReDim ppersonal(p)
For X = 1 To TT
M1 = Cells(X + 1, 7)
If Application.WorksheetFunction.IsNumber(M1) Then
mmaterial(M1) = mmaterial(M1) + Cells(X + 1, 19)
End If
Next
n = 2
For X = M_M To m
If mmaterial(X) > 0 Then
Cells(n, 30) = X
Cells(n, 31) = mmaterial(X)
n = n + 1
End If
Next
For X = 1 To TT
E1 = Cells(X + 1, 9)
If Application.WorksheetFunction.IsNumber(E1) Then
eEQUIPO(E1) = eEQUIPO(E1) + Cells(X + 1, 20)
End If
Next
n = 2
For X = E_M To E
If eEQUIPO(X) > 0 Then
Cells(n, 32) = X
Cells(n, 33) = eEQUIPO(X)
n = n + 1
End If
Next
For X = 1 To TT
P1 = Cells(X + 1, 12)
If Application.WorksheetFunction.IsNumber(P1) Then
ppersonal(P1) = ppersonal(P1) + Cells(X + 1, 21)
End If
Next
n = 2
For X = P_M To p
If ppersonal(X) > 0 Then
Cells(n, 34) = X
Cells(n, 35) = ppersonal(X)
n = n + 1
End If
Next

'prepara Materiales
VBAProject.Hoja7.Activate

X = Cells(1, 1) + 11
VBAProject.Hoja7.Range(Range(Cells(11, 1), Cells(X, 7)).Address).ClearContents
VBAProject.Hoja7.Range(Range("a10").Address).ClearContents
VBAProject.Hoja7.Range(Range("e10").Address).ClearContents
X = VBAProject.Hoja1.Range("aj1").Value
If X Then
VBAProject.Hoja7.Range("b10:g10").Copy
VBAProject.Hoja7.Range("b11:g" & Val(X + 9)).Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
VBAProject.Hoja1.Range("ad2:ad" & X + 1).Copy
VBAProject.Hoja7.Range("a10").Select
ActiveSheet.Paste
VBAProject.Hoja1.Range("ae2:ae" & X + 1).Copy
VBAProject.Hoja7.Range("e10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
End If
VBAProject.Hoja7.Range(Range("a10:a65536").Address).EntireRow.Hidden = False
VBAProject.Hoja7.Range(Range("a" & X + 10 &
":a65535").Address).EntireRow.Hidden = True

' sigue preparo personal. y ..preparo equipos (ambos grupo de instrucciones
similares e la enterior)

end sub


Disculpa Hector, pero, podrias ayudarme a simplificar/mejorar la parte de
copiado y pegado ??

se da tambien en otros casos de codigo donde uso varias celdas combinadas
(como casi siempre) y no veo otra forma de copiar / pegar

Las celdas combinadas !!! (mi eterno problema).

Pero.. como bien dirias tu: Retomando el hilo del asunto...
Antes no se producia el error con las mismas instrucciones / codigo
porque ahora si ?

Tal vez algun software/aplicacion/complemento que haya
instalado/desinstalado ??

Grracias.
Saludos, Moises.
Respuesta Responder a este mensaje
#5 Héctor Miguel
22/11/2009 - 05:41 | Informe spam
hola, moises ! (de atras, pa'lante)

__ 1 __
Retomando el hilo del asunto...
Antes no se producia el error con las mismas instrucciones / codigo porque ahora si ?



1) probablemente "antes", NO era/habia/... "lo mismo" que ahora ?

__ 2 __
Tal vez algun software/aplicacion/complemento que haya instalado/desinstalado ??



2) no lo creo (???)

__ 3 __
se da tambien en otros casos de codigo donde uso varias celdas combinadas
(como casi siempre) y no veo otra forma de copiar / pegar
Las celdas combinadas !!! (mi eterno problema).



3) celdas combinadas (tambien, "mi eterno problema"), esta es (desde mi opinion) su mejor descripcion:
__
(hasta donde se) el (ab)uso de las celdas combinadas resulta ser algo asi como:
=> "una astilla que no te deja permanecer comodamente sentado"
y para muchos de estos casos, es mejor "sacrificar vista"... por "funcionalidad" (?)
¨¨¨¨
__ 4 __
... podrias ayudarme a simplificar/mejorar la parte de copiado y pegado ??



4) algunos ejemplos (sobre tu mismo codigo)...

probar cambiando de esto (OJO: no se cuanto pudiera "valer" (X + 9) ???):

VBAProject.Hoja7.Range("b10:g10").Copy
VBAProject.Hoja7.Range("b11:g" & Val(X + 9)).Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

por esto:

With Range("b10:g10")
.Autofill .Resize(Val(X + 9) - 10), xlFillDefault
' .Offset(1).Resize(Val(X + 9) - 9).ClearFormats
End With

5) (adicional)...
- me parece excesiva la "liga" de los "codename" (VBAProject.Hoja7) si ya trabajas sobre la "hoja activa" (?)
- demasiadas variables declaradas como tipo Variant (explicita o implicitamente)
consulta en la ayuda en linea los temas de las variables y sus tipos (p.e.)
- son memoria reservada que NO siempre es liberada "de inmediato"

saludos,
hector.

__ OP __
En los procedimientos que empleo aplico tus recomendaciones a exepcion de casos donde no lo puedo simplificar (creo) como por Ej:
si estoy en Hoja GENERAL1 y ejecuto la siguiente macro asignada a un commandbuttom

Sub macrototales()
Dim T As Variant
Dim X As Variant
Dim FI As Variant
Dim Y As Variant
Dim m As Variant
Dim M_M As Variant
Dim E As Variant
Dim E_M As Variant
Dim p As Variant
Dim P_M As Variant
Dim TT As Variant
Dim M1 As Variant
Dim n As Variant
Dim E1 As Variant
Dim P1 As Variant
T = VBAProject.Hoja1.Range("A1").Value
For X = 1 To T
FI = X * 15 - 13
'calcula el total de materiales
If Cells(FI, 16) Then
For Y = 1 To Cells(FI, 16)
Cells(FI + Y - 1, 19).Value = Cells(FI, 15) * Cells(FI + Y - 1, 8)
Next Y
End If
'calcula el total de equipos
If Cells(FI, 17) Then
For Y = 1 To Cells(FI, 17)
Cells(FI + Y - 1, 20).Value = Cells(FI, 15) * Cells(FI + Y - 1, 10) * Cells(FI + Y - 1, 11)
Next Y
End If
'calcula el total de mano de obra
If Cells(FI, 18) Then
For Y = 1 To Cells(FI, 18)
Cells(FI + Y - 1, 21).Value = Cells(FI, 15) * Cells(FI + Y - 1, 13) * Cells(FI + Y - 1, 14)
Next Y
End If
Next X
'-
m = Cells(2, 22).Value 'maximo valor del material
M_M = Cells(2, 23).Value
E = Cells(2, 24).Value
E_M = Cells(2, 25).Value
p = Cells(2, 26).Value
P_M = Cells(2, 27).Value
TT = Cells(1, 1) * 15
ReDim mmaterial(m)
ReDim eEQUIPO(E)
ReDim ppersonal(p)
For X = 1 To TT
M1 = Cells(X + 1, 7)
If Application.WorksheetFunction.IsNumber(M1) Then
mmaterial(M1) = mmaterial(M1) + Cells(X + 1, 19)
End If
Next
n = 2
For X = M_M To m
If mmaterial(X) > 0 Then
Cells(n, 30) = X
Cells(n, 31) = mmaterial(X)
n = n + 1
End If
Next
For X = 1 To TT
E1 = Cells(X + 1, 9)
If Application.WorksheetFunction.IsNumber(E1) Then
eEQUIPO(E1) = eEQUIPO(E1) + Cells(X + 1, 20)
End If
Next
n = 2
For X = E_M To E
If eEQUIPO(X) > 0 Then
Cells(n, 32) = X
Cells(n, 33) = eEQUIPO(X)
n = n + 1
End If
Next
For X = 1 To TT
P1 = Cells(X + 1, 12)
If Application.WorksheetFunction.IsNumber(P1) Then
ppersonal(P1) = ppersonal(P1) + Cells(X + 1, 21)
End If
Next
n = 2
For X = P_M To p
If ppersonal(X) > 0 Then
Cells(n, 34) = X
Cells(n, 35) = ppersonal(X)
n = n + 1
End If
Next

'prepara Materiales
VBAProject.Hoja7.Activate

X = Cells(1, 1) + 11
VBAProject.Hoja7.Range(Range(Cells(11, 1), Cells(X, 7)).Address).ClearContents
VBAProject.Hoja7.Range(Range("a10").Address).ClearContents
VBAProject.Hoja7.Range(Range("e10").Address).ClearContents
X = VBAProject.Hoja1.Range("aj1").Value
If X Then
VBAProject.Hoja7.Range("b10:g10").Copy
VBAProject.Hoja7.Range("b11:g" & Val(X + 9)).Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
VBAProject.Hoja1.Range("ad2:ad" & X + 1).Copy
VBAProject.Hoja7.Range("a10").Select
ActiveSheet.Paste
VBAProject.Hoja1.Range("ae2:ae" & X + 1).Copy
VBAProject.Hoja7.Range("e10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
VBAProject.Hoja7.Range(Range("a10:a65536").Address).EntireRow.Hidden = False
VBAProject.Hoja7.Range(Range("a" & X + 10 & ":a65535").Address).EntireRow.Hidden = True

' sigue preparo personal. y ..preparo equipos (ambos grupo de instrucciones similares e la enterior)

end sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida