** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Barra de Progreso al Completar Tabla con
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoBarra de Progreso al Completar Tabla con

 Responder Responder
Autor
Mensaje
Andreslonardi Ver desplegable
Habitual
Habitual
Avatar

Unido: 11/Agosto/2008
Localización: Argentina
Estado: Sin conexión
Puntos: 154
Enlace directo a este mensaje Tema: Barra de Progreso al Completar Tabla con
    Enviado: 14/Julio/2010 a las 09:38
Estimados Amigos del Foro,

Primero que nada sepan que soy un novato esforzado.

Casi acabo un pequeño programa en excel, que completa los valores de una tabla que va de la fila 21; columna 2, a la fila 32;Columna 21. Se completa con una cascada de fórmulas de varias hojas diferentes que demora unos segundos. Para ello estoy intentando poner una barra de progreso, que distraiga al usuario mientras se completa la tabla.

Investigando ello, llegué a la web de AnSanVal, que tiene algo desarrollado muy similar a lo que necesito. Lo que hice fue tratar de adaptarlo, insertándolo dentro de un módulo de hoja Private Sub Worksheet_SelectionChange (ByVal Target As Range)

No me tira error, pero tampoco me está mostrando la barra de progreso que está en UserForm1, dentro del que hay una EtiquetadeProgreso y un MarcodeProgreso.

Les copio el código para ver si AnSanVal alguien mas me puede ayudar. Marco en Negrita el código que hace referencia a la Barra de Progreso.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$D$7" Or Target.Address = "$D$9" Then
Calendar1.Visible = True
Calendar1.Value = True
Else: Calendar1.Visible = False
If Range("$D$7") And Range("$D$9") > 0 Then
UserForm1.Show
Dim Contador As Integer
Dim FilaMax As Integer
Dim ColMax As Integer
Dim f As Integer, c As Integer
Dim PctHecho As Single
' Inicializa variables.
Contador = 1
FilaMax = 32
ColMax = 21
' Cuenta las celdas 1 a 1.
For f = 21 To FilaMax
For c = 2 To ColMax
Contador = Contador + 1
Next c
' Actualiza el porcentaje realizado.
PctHecho = Contador/(FilaMax * ColMax)
' Llama a la subrutina que actualiza la barra de progreso.
ActualizaBarraDeProgreso PctHecho
Next f
' Proceso terminado. Descarga el formulario.
Unload UserForm1
UserForm1
' Actualiza el título del marco (porcentaje procesado).
.MarcoDeProgreso.Caption = Format(PctHecho, "0%")
' Ancho de la etiqueta de progreso (barra).
.EtiquetaDeProgreso.Width = PctHecho * (.MarcoDeProgreso.Width - 10)
End With
End If

If Range("$M$5") = 1 Then
MsgBox "El Rango de Fecha Introducido supera el Año, o es Inconsistente", vbInformation, "Modificar Rango de Fechas"
End If
End If
End Sub

Además, les comento que El UserForm1 tiene asociado un Private Sub que me tira error al llamarlo.

Private Sub UserForm_Activate()
' Ajusta el ancho de la barra de progreso a 0.
UserForm1.EtiquetaDeProgreso.Width = 0
' Llama a la subrutina Principal.
Call Worksheet_SelectionChange 'Es el Private Sub que copie arriba.
End Sub

Muchas Gracias!

Agradezco mucho la ayuda de todos ustedes, especialmente la de AnSanVal.

Editado por Andreslonardi - 14/Julio/2010 a las 10:20
Andres
Arriba
MexMan70 Ver desplegable
Colaborador
Colaborador


Unido: 17/Julio/2007
Localización: DarkSide
Estado: Sin conexión
Puntos: 9233
Enlace directo a este mensaje Enviado: 14/Julio/2010 a las 19:53

Y donde tienes el sub ActualizaBarraDeProgreso (' Llama a la subrutina que actualiza la barra de progreso)??

Saludos !!
OneDrive: http://sdrv.ms/Vk6eJd
Arriba
Andreslonardi Ver desplegable
Habitual
Habitual
Avatar

Unido: 11/Agosto/2008
Localización: Argentina
Estado: Sin conexión
Puntos: 154
Enlace directo a este mensaje Enviado: 14/Julio/2010 a las 22:24
Gracias por la Respuesta MexMan!

En realidad el código original estaba separado en Subrutinas. Lo que hice fue ensamblarlo, y seguramente hice algo mal. El código no tira error, y llega hasta mostrar la Barra de Progreso y Automáticamente la Oculta.

'Llama a la subrutina que actualize la barra de progreso.
ActualizaBarraDeProgreso.PctHecho 'Aquí llama a la Subrutina.
Next f
'Proceso terminado. Descarga el formulario.
Unload UserForm1

With UserForm1 'Acá empieza la Subrutina que menciono arriba ActualizaBarraDeProgreso.PcstHecho
' Actualiza el título del marco (porcentaje procesado).
.MarcoDeProgreso.Caption = Format(PctHecho, "0%")
' Ancho de la etiqueta de progreso (barra).
.EtiquetaDeProgreso.Width = PctHecho * (.MarcoDeProgreso.Width - 10)
End With



Te agradezco muchísimo la respuesta!


Andres
Arriba
MexMan70 Ver desplegable
Colaborador
Colaborador


Unido: 17/Julio/2007
Localización: DarkSide
Estado: Sin conexión
Puntos: 9233
Enlace directo a este mensaje Enviado: 14/Julio/2010 a las 23:05
Eso quiere decir que te funcionó ??
 
Si es asi, avisale a los Moderadores/Administradores para que cierren el hilo.
 
Saludos !
OneDrive: http://sdrv.ms/Vk6eJd
Arriba
Andreslonardi Ver desplegable
Habitual
Habitual
Avatar

Unido: 11/Agosto/2008
Localización: Argentina
Estado: Sin conexión
Puntos: 154
Enlace directo a este mensaje Enviado: 14/Julio/2010 a las 23:13
MeXman,

Gracias Nuevamente.

No me funcionó. Lo que digo es que no me tira error, y llega solo a abrir la Barra de Progreso y Cerarrla. Apenás se llega a ver.

Es como que funciona hasta UserForm1.Show, y se oculta; y no realiza ningún avance de progreso. Seguramente el For Next lo plantié mal, al igual que el funcionamiento del contador y la ejecución de la rutina que muestra el progreso.

Ten en cuenta que es una tabla de celdas todas con Fórmulas, que al modificar las celdas E7 y E9, se actualizan todos los valores y esto dura aprox. 40 segundos. Lo que necesito es que la barra de progreso aparezca estos 40 segundos. Lo que puede ser que pase es que el Contador no corresponda en este caso, ya que solo tiene que pasar por cada celda de la tabla y verificar que sea mayor que cero .

Me rompo la cabeza, pero por ser novato no me da para mas que esto. Me ayudas? Quieres que te envíe el archivo?

Muchas Gracias!


Editado por Andreslonardi - 14/Julio/2010 a las 23:20
Andres
Arriba
MexMan70 Ver desplegable
Colaborador
Colaborador


Unido: 17/Julio/2007
Localización: DarkSide
Estado: Sin conexión
Puntos: 9233
Enlace directo a este mensaje Enviado: 15/Julio/2010 a las 00:20
Lo que pasa Andres, es que tienes que pegar en modulos estandar los códigos que Antonio tiene descritos en su web.
 
He probado el código de Antonio y funciona a la perfeccion.
 
El truco de Antonio radica que dentro del bucle (FOR) estan las operaciones que realiza con las celdas.
 

Sub Principal()
...
' Escribe valores en las celdas.
For f = 1 To FilaMax
   For c = 1 To ColMax
      ' Escribe un número aleatorio en una celda.
      Cells(f, c) = Int(Rnd * 1000)
      Contador = Contador + 1
   Next c
   ' Actualiza el porcentaje realizado.
   PctHecho = Contador / (FilaMax * ColMax) ' Llama a la subrutina que actualize la barra de progreso.
   ActualizaBarraDeProgreso PctHecho
Next f
...
 
Saludos !
OneDrive: http://sdrv.ms/Vk6eJd
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5532
Enlace directo a este mensaje Enviado: 15/Julio/2010 a las 00:40
 

 

Juntar todas las subrutinas en una sóla (principalmente cuando funcionaban), no es recomendable ya que te resultará más dificil detectar donde está fallando y además no es más rápido.

¿Has probado a ejecutar el código paso a paso (F8)?  Esto es conveniente para que consultes si las variables van tomando los valores esperados y el "discurrir" del código es el adecuado.

Exponer un código y pedir que te lo depuren no es la función del foro. Si no sabes como ejecutar paso a paso te explico a continuación:

1.- Con el cursor en la linea a partir de la cual quieres estudiar el código, pulsa F9 (La linea se oscurece).

2.- Estando en la hoja de cálculo, selecciona D7 o D9 para que se ejecute el código.

3.- Pulsa F8 para ejecutar cada linea.

4.- Si posicionas el cursor (sin hacer clic) sobre una variable puedes ir viendo el valor que tiene en cada momento.

5.- Recuerdar  desmarcar el punto 1 cuando acabes.

Cuando descubras que código te está fallando es el momento de preguntar  porque ocurre o de repararlo si sabes la respuesta.

Mirando tu código superficialmente  (no puedo probarlo al no tener  montada tu aplicación con calendario, barra de progreso, etc., he detectado algunos ¿fallos? :

Con lenguaje humano (no de programación), ¿Que pretendes hacer con: If Range("$D$7") And Range("$D$9") > 0 Then

Esta linea UserForm1 tal cual, no le encuentro sentido.
Tienes una linea End With, que NO está precedida de una linea With.

Por otro lado te recomiendo que no dirijas tus consultas a un usuario en particular (en este caso a mi), ya que otros usuarios se podrían sentir excluidos y te perderías opiniones muy  interesantes y valiosas.

Si no lo tienes, te recomiendo que actives (en el editor de VBA):  Menú Herramientas>Opciones>(pestaña) Editor>Requerir declaración de variables.

Aprendemos intentando resolver dudas ajenas (un mundo solidario es mejor mundo).

Mi sitio_web con ejemplos Excel.
Arriba
Andreslonardi Ver desplegable
Habitual
Habitual
Avatar

Unido: 11/Agosto/2008
Localización: Argentina
Estado: Sin conexión
Puntos: 154
Enlace directo a este mensaje Enviado: 15/Julio/2010 a las 00:51
Gracias MexMan y AnSanVal,

voy a seguir las sugerencias tal como las plantean, que suenan muy lógicas, y la verdad es un lujo el grado de detalle con el que las presentan.

Con la Expresión : If Range("$D$7") And Range("$D$9") > 0 Then, intento saber si D7 Y D9 tienen valores cargados. Como debería plantearlo?


Muchas Gracias!
Andres
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5532
Enlace directo a este mensaje Enviado: 15/Julio/2010 a las 01:12
 
   If Range("$D$7") > 0 And Range("$D$9") > 0 Then
 
 
Aprendemos intentando resolver dudas ajenas (un mundo solidario es mejor mundo).

Mi sitio_web con ejemplos Excel.
Arriba
Andreslonardi Ver desplegable
Habitual
Habitual
Avatar

Unido: 11/Agosto/2008
Localización: Argentina
Estado: Sin conexión
Puntos: 154
Enlace directo a este mensaje Enviado: 15/Julio/2010 a las 01:15
Buenísimo!!!
Que paciencia que me tienen!

Muchas Gracias AnSanVal!
Andres
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable