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:
Mostrar la cita
y esto:
Mostrar la cita
y con respecto de esto:
Mostrar la cita
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:
Mostrar la cita
(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:

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

en cuanto a esta parte (final ?) de tu consulta:
Mostrar la cita
(supongo que) necesitaras "reportarlo" en el sitio de su descarga (?)

saludos,
hector.
#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.
#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 __
Mostrar la cita
#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.
#5 Héctor Miguel
22/11/2009 - 05:41 | Informe spam
hola, moises ! (de atras, pa'lante)

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

__ 2 __
Mostrar la cita
2) no lo creo (???)

__ 3 __
Mostrar la cita
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 __
Mostrar la cita
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 __
Mostrar la cita
Ads by Google
Search Busqueda sugerida