Ocultar ejecución total de la macro

13/12/2007 - 03:54 por AOvalle | Informe spam
Un saludo,

Ya en otro hilo Hector Miguel y otro forista me han brindado una gran
ayuda a este tema.

Les comento que tengo un archivo en excel con aproxidamente 50 páginas
que ejecutan una serie de instrucciones que no deben ser visualizadas
por los usuarios. Para ello he agregado una linea que me han sugerido
aquí, y es:

Application.ScreenUpdating = False

En este sentido la macro que recorre todas las hojas se ejecuta
correctamente sin que el usuario lo vea. Sin embargo, hay dos macros
que aun se ejecutan en todas las hojas y que aun no logro ocultarlas
de la visualización del usuario, inclusive no lo logro incluyendo la
linea anterior.

Las macros ocultan un rango de filas y columnas dependiendo de un
valor en cada celda, y funcionan muy bien; el problema radica en que
el usuario debe esperar entre 10 y 20 segundos antes de ver los
resultados en pantalla.

A continuación estoy pegando el código que tengo para el archivo, no
sé si de algo pueda ser de utilidad.

De antemano, mil gracias por la ayuda que me puedan brindar:

Dim WCiudad As String
Dim WHojaActiva As String
Dim Celda As Range
Dim Columna As Range
Sub CambiarInicio()
'Antes de actualizar debe mostrar las filas si estaban ocultas
Rows("200:500").Select
Selection.EntireRow.Hidden = False

'Antes de actualizar debe mostrar las columnas si estaban ocultas
Columns("Z:DQ").Select
Selection.EntireColumn.Hidden = False

WHojaActiva = ActiveSheet.Name

Application.ScreenUpdating = False
Range("L4").Select
WCiudad = ActiveCell.Value
Worksheets("Inicio").Activate
Range("C4").Select
ActiveCell.Value = WCiudad
ActualizaCiudad
Worksheets(WHojaActiva).Activate

'Dejar la hoja en la opción
Range("L4").Select
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1

End Sub
Sub ActualizaCiudad()
Dim WNumHojas As Integer
Dim WHojas As Integer

'NUMERO DE HOJAS DEL INFORME
WNumHojas = 44 + 3

'Define donde iniciar en la lista de ciudades general
Worksheets("Inicio").Activate
Range("C4").Select
WCiudad = ActiveCell.Value

'Inicia el recorrido de las hojas para asignar Ciudad
For WHojas = 5 To WNumHojas

Application.ScreenUpdating = False

Worksheets(WHojas).Activate
Range("L4").Select
ActiveCell.Value = WCiudad

'Debe ocultar filas en cada hoja donde cambia Ciudad
OcultarFilas

'Debe ocultar columnas en cada hoja donde cambia Ciudad
OcultarColumnas




Next WHojas

Worksheets("Inicio").Activate
Range("C4").Select

End Sub
Sub OcultarFilas()

For Each Celda In Range("a200:a500")

Celda.Select
If IsNumeric(ActiveCell.Value) Then
Celda.EntireRow.Select
Celda.EntireRow.Hidden = True
Else
Celda.EntireRow.Select
Celda.EntireRow.Hidden = False
End If
Next

'Dejar la hoja en la opción
Range("L4").Select

End Sub

Sub OcultarColumnas()

For Each Celda In Range("Z1:DQ1")


Celda.Select
If IsNumeric(ActiveCell.Value) Then
Celda.EntireColumn.Select
Celda.EntireColumn.Hidden = True
Else

Celda.EntireColumn.Select
Celda.EntireColumn.Hidden = False
End If
Next

'Dejar la hoja en la opción
Range("L4").Select

End Sub
 

Leer las respuestas

#1 Héctor Miguel
13/12/2007 - 07:52 | Informe spam
hola, andres !

... tengo un archivo... con aproxidamente 50 paginas que ejecutan una serie de instrucciones
que no deben ser visualizadas los usuarios. Para ello he agregado... Application.ScreenUpdating = False
... la macro que recorre todas las hojas se ejecuta correctamente sin que el usuario lo vea. Sin embargo
hay dos macros que aun se ejecutan en todas las hojas y que aun no logro ocultarlas de la visualizacion del usuario
inclusive no lo logro incluyendo la linea anterior.
Las macros ocultan un rango de filas y columnas dependiendo de un valor en cada celda, y funcionan muy bien
el problema radica en que el usuario debe esperar entre 10 y 20 segundos antes de ver los resultados en pantalla...



el tiempo que le/s toma puede resultar 'desesperante', pero se debe a la forma de ir seleccionando objetos "realmente" por codigo
cada vez que tu codigo hace un ".Select" y ademas lo hace +/- "por" 300 veces/filas {+} "por" 96 columnas {+} "por" 42 hojas... :-(

(p.e.) generalmente, no es necesario 'seleccionar' hojas/rangos/objetos/... para trabajar con sus metodos/propiedades/valores/...
evitando selecciones "efectivas" (seguramente) reduciras drasticamente el tiempo que se tarda la ajecucion de tus procedimientos

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ el codigo expuesto __
Dim WCiudad As String
Dim WHojaActiva As String
Dim Celda As Range
Dim Columna As Range
Sub CambiarInicio()
'Antes de actualizar debe mostrar las filas si estaban ocultas
Rows("200:500").Select
Selection.EntireRow.Hidden = False
'Antes de actualizar debe mostrar las columnas si estaban ocultas
Columns("Z:DQ").Select
Selection.EntireColumn.Hidden = False
WHojaActiva = ActiveSheet.Name
Application.ScreenUpdating = False
Range("L4").Select
WCiudad = ActiveCell.Value
Worksheets("Inicio").Activate
Range("C4").Select
ActiveCell.Value = WCiudad
ActualizaCiudad
Worksheets(WHojaActiva).Activate
'Dejar la hoja en la opción
Range("L4").Select
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
End Sub

Sub ActualizaCiudad()
Dim WNumHojas As Integer
Dim WHojas As Integer
'NUMERO DE HOJAS DEL INFORME
WNumHojas = 44 + 3
'Define donde iniciar en la lista de ciudades general
Worksheets("Inicio").Activate
Range("C4").Select
WCiudad = ActiveCell.Value
'Inicia el recorrido de las hojas para asignar Ciudad
For WHojas = 5 To WNumHojas
Application.ScreenUpdating = False
Worksheets(WHojas).Activate
Range("L4").Select
ActiveCell.Value = WCiudad
'Debe ocultar filas en cada hoja donde cambia Ciudad
OcultarFilas
'Debe ocultar columnas en cada hoja donde cambia Ciudad
OcultarColumnas
Next WHojas
Worksheets("Inicio").Activate
Range("C4").Select

End Sub
Sub OcultarFilas()
For Each Celda In Range("a200:a500")
Celda.Select
If IsNumeric(ActiveCell.Value) Then
Celda.EntireRow.Select
Celda.EntireRow.Hidden = True
Else
Celda.EntireRow.Select
Celda.EntireRow.Hidden = False
End If
Next
'Dejar la hoja en la opción
Range("L4").Select
End Sub

Sub OcultarColumnas()
For Each Celda In Range("Z1:DQ1")
Celda.Select
If IsNumeric(ActiveCell.Value) Then
Celda.EntireColumn.Select
Celda.EntireColumn.Hidden = True
Else
Celda.EntireColumn.Select
Celda.EntireColumn.Hidden = False
End If
Next
'Dejar la hoja en la opción
Range("L4").Select
End Sub

Preguntas similares