Sobre progress bar

22/11/2005 - 22:29 por Oscar | Informe spam
Hola, espero que esten todos bien

Tengo una duda, he tratado de aplicar una barra de progreso a una
'aplicacion' que estoy tratando de de mejorar. Lo que hace es lo siguiente:

1.- Al abrirse el libro abre 10 archivos -- sin problema
2.- Activa la hoja de acuerdo al dia en que estamos en los 10 archivos --
sin problema

He intentado colocar la barra de progresso que usa Walkenbach pero la macro
que utiliza creo que no es la indicada ya que se basa en insertar numeros
aleatorios de acuerdo al cierto numero de filas, lo que no se es como debo
modificar el codigo que el nombar main...
Sub Main()
' Inserts random numbers on the active worksheet
Dim Counter As Integer
Dim RowMax As Integer, ColMax As Integer
Dim r As Integer, c As Integer
Dim PctDone As Single

If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
Cells.Clear
Application.ScreenUpdating = False
Counter = 1
RowMax = 100
ColMax = 25
For r = 1 To RowMax
For c = 1 To ColMax
Cells(r, c) = Int(Rnd * 1000)
Counter = Counter + 1
Next c
PctDone = Counter / (RowMax * ColMax)
With UserForm1
.FrameProgress.Caption = Format(PctDone, "0%")
.LabelProgress.Width = PctDone * (.FrameProgress.Width - 10)
End With
' The DoEvents statement is responsible for the form updating
DoEvents
Next r
Unload UserForm1
End Sub

La macro, segun deduzco, por cada libro abierto deberia aumentar la barra de
progreso hasta el 50 por ciento, y el 50% restante deberia aumentar por cada
hoja que se active, son 10 archivos.

Perdon, pero no he sabido como adecuar y declarar las cosas, para que esa
macro funcione.

Mil gracias de antemano
Saludos desde Mexico

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
23/11/2005 - 00:00 | Informe spam
hola, Oscar !

... he tratado de aplicar una barra de progreso a una 'aplicacion' que estoy tratando de de mejorar
1.- Al abrirse el libro abre 10 archivos -- sin problema
2.- Activa la hoja de acuerdo al dia en que estamos en los 10 archivos -- sin problema
He intentado colocar la barra de progresso que usa Walkenbach pero la macro que utiliza creo que no es la indicada [...]
La macro... por cada libro abierto deberia aumentar la barra de progreso hasta el 50 por ciento
y el 50% restante deberia aumentar por cada hoja que se active, son 10 archivos [...]



lo que no comentas es que 'tipo' de procedimiento [o intrucciones] utilizas para abrir los 10 archivos :-(
suponiendo que los tienes en una matriz, y al abrir cada uno 'activas' la hoja correspondiente...
prueba con las siguientes lineas...
en el modulo de codigo del formulario ==Private Sub UserForm_Activate()
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
Dim Libros, Sig As Byte, Total As Byte, Avance As Byte, Porc As Single
Libros = Array("Libro1", "Libro2", "Libro3", "Libro4", "Libro5", _
"Libro6", "Libto7", "Libro8", "Libro9", "Libro10")
Total = (UBound(Libros) + 1) * 2
For Sig = LBound(Libros) To UBound(Libros)
MsgBox "Abriendo... " & Libros(Sig)
Avance = Avance + 1
Porc = Avance / Total
FrameProgress.Caption = Format(Porc, "0%")
LabelProgress.Width = Porc * (FrameProgress.Width - 10)
Me.Repaint
MsgBox "Activando ""la hoja""..."
Avance = Avance + 1
Porc = Avance / Total
FrameProgress.Caption = Format(Porc, "0%")
LabelProgress.Width = Porc * (FrameProgress.Width - 10)
Me.Repaint
Next
' Unload UserForm1
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Oscar
23/11/2005 - 16:06 | Informe spam
Gracias Héctor:

La forma es simple, grabe una macro para abrir los distintos archivos que
necesitaba, estan en un codigo normal, que se llama openbooks, por ejemplo
ChDir _
"C:\2005\Correo\Noviembre"
Workbooks.Open Filename:= _
"C:\2005\Correo\Noviembre\Noviembre ADMON CMS.xls"

Y asi se abren los 10 archivos, esto lo meti en Thisworbook, para que al
iniciar, mediante un msgbox me preguntara si queria abrirlos o bien, si le
digo que no abra el formulario para hacerlo manual, este es el codigo:

Private Sub Workbook_Open()

If MsgBox(" Buen dia :) ", vbYesNo, "Como abrirlos hoy?") = vbYes Then

Openbooks
'Test
' Main
'UserForm1.Hide
Openlibrobooks
Windows("Macros.xls").Activate
Else
UserForm1.Show
End If
End Sub

Openbooks abre los 10 archivos, y openlibrosbooks por su parte activa la
hoja de acuerdo al dia, que esta en una celda y que lo 'ligo' a una variable
llamada texbox1, de esta manera:
Sub Openlibrobooks()

TextBox1 = Worksheets("Panel").Range("A1")

If TextBox1 = 1 Then

Windows("Noviembre ADMON CMS.xls").Activate
Sheets("1").Select

Y asi para los 10 archivos, y si corre sin problemas pero el problema es
integrarle la barra de progreso. De igual manera, no se si este bien colocado
en la macro Workbook_Open(), la palabra 'Test' y 'Main' y segun estuve
revisando ayer, creo que debe llevar un userform.hide por 'ahi'.

Private Sub Workbook_Open()
If MsgBox(" Buen dia :) ", vbYesNo, "Como abrirlos hoy?") = vbYes Then

Openbooks
'Test
' Main
'UserForm1.Hide
Openlibrobooks
Windows("Macros.xls").Activate
Else
UserForm1.Show
End If
End Sub

Estoy mal, lo se pero no se si con esto baste o te envio el archivo para que
lo veas 'de cerca'

Buen dia y gracias
Oscar
Respuesta Responder a este mensaje
#3 Héctor Miguel
23/11/2005 - 18:57 | Informe spam
hola, Oscar !

La forma es simple, grabe una macro para abrir los... archivos... que se llama openbooks, por ejemplo
ChDir _
"C:\2005\Correo\Noviembre"
Workbooks.Open Filename:= _
"C:\2005\Correo\Noviembre\Noviembre ADMON CMS.xls"
... lo meti en Thisworbook, para que al iniciar... me preguntara si queria abrirlos o... para hacerlo manual [...]
... Openbooks abre los 10 archivos, y openlibrosbooks... activa la hoja de acuerdo al dia... en una celda y que lo 'ligo' a... texbox1
... el problema es integrarle la barra de progreso [...]



1) para poder 'controlar' un 'aviso de progreso', el codigo necesita 'saber el momento' en que ocurren 'avances'
por eso en el ejemplo el 'control' es por un bucle 'For ... Next'
2) el ejemplo que 'te adapte' del codigo original de J-Walk esta 'preparado' para que solamente hagas los siguientes cambios...
a) agrega la linea donde 'te cambiar' de directorio activo ANTES de que se ejecute la apertura de los archivos...
ChDir "C:\2005\Correo\Noviembre"
b) 'mete' en la variable 'Libros', SOLO los nombres de los 10 archivos -se supone que estan en el mismo directorio- [p.e.]
Libros = Array("Noviembre ADMON CMS", "Aqui el siguiente libro", "Hasta completar los 10 libros")
c) sustituye la linea con el MsgBox que 'dice'... 'Abriendo...' por la linea que abre cada archivo ->desde la matriz<- [p.e.]
Workbooks.Open Libros(Sig) & ".xls"
d) sustituye la linea con el MsgBox que 'dice'... Activando...' por la linea que 'activa' la hoja segun el textbox [p.e.]
Sheets(Worksheets("Panel").Range("a1")).Activate
3) todo este rollo VA en el modulo de codigo del formulario que abre los archivos, que ya esta preparado para...
mantener el control de la apertura e informar del avance... y al terminar... se 'borra del mapa'
es decir... si en el 'workbook_open' le dices que si deseas que se abran los libros automaticamente... muestras 'ese' formulario

aunque 'me da la impresion' de que existen aun datos 'en el tintero'... si cualquier duda... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Oscar
23/11/2005 - 21:16 | Informe spam
Hola de nuevo Héctor:

Efectivamente quedaron algunas cosas en 'el tintero', sorry... Algunas de
ellas es que 7 libros estan en un directorio y los tres restantes en otra
(Las rutas las 'edite' para ahorrar espacio), para esto inclui lo mismo que
me indicaste para el primer directorio y sustitui las lineas que me indicaste
en lugar de los msgbox. Pero sale un error 13 en tiempo de ejecución. No
coinciden los tipos :(( . Y se detiene en esta linea:

ChDir _
"C:\2005\Correo\Noviembre"
Workbooks.Open Filename:= _
Libros = Array("Noviembre ADMON CMS.xls", "Noviembre CORREO WEB
CMS.xls", "Noviembre FALLAS CMS.xls", "Noviembre FALLAS DIARIO CMS.xls",
"Noviembre FALLAS FIN DE SEMANA CMS.xls", _
"Noviembre VENTAS CMS.xls", "REPORTE PRODIGY
HOSTING Noviembre CALL CENTER.xls")

La macro quedo asi:

Private Sub UserForm_Activate()
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
Dim Libros, Sig As Byte, Total As Byte, Avance As Byte, Porc As Single

ChDir _
"C:\2005\Correo\Noviembre"
Workbooks.Open Filename:= _
Libros = Array("Noviembre ADMON CMS.xls", "Noviembre CORREO WEB
CMS.xls", "Noviembre FALLAS CMS.xls", "Noviembre FALLAS DIARIO CMS.xls",
"Noviembre FALLAS FIN DE SEMANA CMS.xls", _
"Noviembre VENTAS CMS.xls", "REPORTE PRODIGY
HOSTING Noviembre CALL CENTER.xls")

ChDir _
"C:\Desempeño Mensual Campañas\2005\Noviembre"
'Workbooks.Open Filename:= _
Libros = Array("Desempeño Poliza de Asistencia Noviembre 2005.xls",
"Desempeño Prodigy Patrol Noviembre 2005.xls", "Desempeño Prodigy PyMES
Noviembre 2005.xls")

Total = (UBound(Libros) + 1) * 2
For Sig = LBound(Libros) To UBound(Libros)
'MsgBox "Abriendo... "
Workbooks.Open Libros(Sig) & ".xls"
Avance = Avance + 1
Porc = Avance / Total
FrameProgress.Caption = Format(Porc, "0%")
Labelprogress.Width = Porc * (FrameProgress.Width - 10)
Me.Repaint
'MsgBox "Activando ""la hoja""..."
Sheets(Worksheets("Panel").Range("a1")).Activate
Avance = Avance + 1
Porc = Avance / Total
FrameProgress.Caption = Format(Porc, "0%")
Labelprogress.Width = Porc * (FrameProgress.Width - 10)
Me.Repaint
Next
Unload UserForm1
End Sub

Muchas gracias por tu tiempo : O
Saludos
Respuesta Responder a este mensaje
#5 Héctor Miguel
23/11/2005 - 23:42 | Informe spam
hola, Oscar !

... algunas cosas en 'el tintero'... es que 7 libros estan en un directorio y los tres restantes en otra
... inclui lo mismo que me indicaste para el primer directorio y sustitui las lineas... en lugar de los msgbox
... sale un error 13 en tiempo de ejecucion. No coinciden los tipos :(( . Y se detiene en esta linea [...]



1) el error 13 'obedece' a que no puedes usar una instruccion Workbooks.Open con una matriz para el 'FileName' :-(
dado que cada libro podria tener 'sus propias' y diferentes condiciones de apertura [password, links, etc.]
-> y menos aun... si 'dentro' del 'FileName' tratas de asignar/llenar el valor de una matriz :-((
ademas de que 'perderias el control' del bucle 'For ... Next' ;) -> debes abrir UNO POR UNO

2) como que tienes nombre de libros de 'tutti-frutti' [sin mencionar lo extenso de los nombres] :))
[a veces] los nombres cortos pero 'significativos'... suelen ser mas 'convenientes' que los 'totalmente descriptivos' :))

3) 'aprovechando el viaje'... tampoco es necesario 'hacer un' ChDir para abrir archivos en 'determinados' directorios ;)
y... estoy aprovechando 'ciertos parametros/patrones' en los nombres de los libros
... modificando a 2 matrices + 1 libro 'independiente' entre ambas matrices

haz unas pruebas con el ejemplo 'modificado/adaptado' [revisa si no me he equivocado en algun nombre] :-))

si cualquier duda... comentas ?
saludos,
hector.

en el modulo de codigo del formulario ==Dim Total As Byte, Avance As Byte, Porc As Single
Private Sub UserForm_Activate()
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
Dim Ruta1 As String, Ruta2 As String, Libros1, Libros2, Sig As Byte
Ruta1 = "C:\2005\Correo\Noviembre\"
Ruta2 = "C:\Desempeño Mensual Campañas\2005\Noviembre\"
Libros1 = Array("Admon", "Correo WEB", "Fallas", "Fallas Diario", "Fallas Fin de Semana", "Ventas")
Libros2 = Array("Poliza de Asistencia", "Prodigy Patrol", "Prodigy PyMES")
Total = ((UBound(Libros1) + 1) + (UBound(Libros2) + 1) + 1) * 2
For Sig = LBound(Libros1) To UBound(Libros1)
Workbooks.Open Ruta1 & "Noviembre " & Libros1(Sig) & " CMS.xls": Actualiza_Avance
Next
Workbooks.Open Ruta1 & "Reporte Prodigy Hosting Noviembre Call Center.xls": Actualiza_Avance
For Sig = LBound(Libros2) To UBound(Libros2)
Workbooks.Open Ruta2 & "Noviembre " & Libros2(Sig) & " CMS.xls": Actualiza_Avance
Next
Unload UserForm1
End Sub
Private Sub Actualiza_Avance()
Avance = Avance + 1
Porc = Avance / Total
FrameProgress.Caption = Format(Porc, "0%")
LabelProgress.Width = Porc * (FrameProgress.Width - 10)
Me.Repaint
Sheets(Worksheets("Panel").Range("a1")).Activate
Avance = Avance + 1
Porc = Avance / Total
FrameProgress.Caption = Format(Porc, "0%")
LabelProgress.Width = Porc * (FrameProgress.Width - 10)
Me.Repaint
End Sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida