Letrero progreso de una macro

24/03/2005 - 13:37 por Ricard | Informe spam
Hola, amigos
Soy nuevo e intento leer todos los mensajes que puedo para aprender,. El
otro día lei uno que indicaba la dirección
www.j.walk.com, para vajarse un ejemplo de una hoja que indica el progreso
de la ejecución de una macro lo he hecho pero no s´´e aplicarlo a mi macro.
Le pediría a KL ( que era quien indicaba esta dirección
que me diga como lo tengo que hacer, ya que de ingles poco.
Mi macro imprime por filas datos de una tabla, ( una hoja
para cada fila)

Un saludo a todos

Preguntas similare

Leer las respuestas

#6 KL
24/03/2005 - 23:29 | Informe spam
Hola Ricard,

No estoy muy seguro que es lo que intentas hacer con tu macro (por si acaso
abajo te pongo una version optimizada que hace lo mismo)
Para poder combinarla con las rutinas de progressbar de John Walkenbach
habria que entender una cosa que es: ?como se puede saber desde el principio
cual sera la ultima fila? Es que tenemos que calcular el progreso a partir
de la fila actual y el total de filas a copiar.

Cuando pones la condicion limite para el bucle Cells(Fila, Col) < 1,

- ?quiere decir esto que quieres que la impresion pare cuande se alcance una
celda VACIA en la columna [D], o ademas de vacia la celda puede contener 0 o
incluso un numero negativo?

- ?se puede afirmar con seguridad que no habra mas celdas con datos por
debajo de la celda en la que pare el bucle?

Tambien te recomiendo revises este enlace:
http://www.cpearson.com/excel/progress.htm

Saludos,
KL

Aqui te pongo tu macro depurado:

Sub test()
Dim Col As Integer, Fila As Integer
Dim ws1 As Worksheet, ws2 As Worksheet

Fila = 4: Col = 4
Set ws1 = Workbooks("Libro1.xls").ActiveSheet
Set ws2 = Workbooks("Libro2.xls").ActiveSheet

Do Until ws1.Cells(Fila, Col) < 1
ws1.Cells(Fila, Col).Copy ws2.Range("D4")
Application.CutCopyMode = False
'ws2.PrintOut Copies:=1, Collate:=True
Fila = Fila + 1
Loop
End Sub
Respuesta Responder a este mensaje
#7 Ricard
25/03/2005 - 20:01 | Informe spam
Hola KL,
Gracias por tu interes, contesto a tus preguntas.
Quiero que la macro pare cuando no haya más datos, no pueden haber ni cero, ni
importes negativos.
Con toda seguridad no hay más datos, una vez que lle gue a un a linea.
En cuanto a saber cual es la última fila , variara de listado en listado
lo que sí podriamos marcar un máximo no?
Nada más, agradecerte otra vez tu interes y reconocer que mi nivel es infimo
en visual Basic es infimo, por no decir nada sé algo de C y ahora estoy
empezando con el Java ( por cierto tiene mucha semejanza con el basic no?)
Un saludo


"KL" escribió:

Hola Ricard,

No estoy muy seguro que es lo que intentas hacer con tu macro (por si acaso
abajo te pongo una version optimizada que hace lo mismo)
Para poder combinarla con las rutinas de progressbar de John Walkenbach
habria que entender una cosa que es: ?como se puede saber desde el principio
cual sera la ultima fila? Es que tenemos que calcular el progreso a partir
de la fila actual y el total de filas a copiar.

Cuando pones la condicion limite para el bucle Cells(Fila, Col) < 1,

- ?quiere decir esto que quieres que la impresion pare cuande se alcance una
celda VACIA en la columna [D], o ademas de vacia la celda puede contener 0 o
incluso un numero negativo?

- ?se puede afirmar con seguridad que no habra mas celdas con datos por
debajo de la celda en la que pare el bucle?

Tambien te recomiendo revises este enlace:
http://www.cpearson.com/excel/progress.htm

Saludos,
KL

Aqui te pongo tu macro depurado:

Sub test()
Dim Col As Integer, Fila As Integer
Dim ws1 As Worksheet, ws2 As Worksheet

Fila = 4: Col = 4
Set ws1 = Workbooks("Libro1.xls").ActiveSheet
Set ws2 = Workbooks("Libro2.xls").ActiveSheet

Do Until ws1.Cells(Fila, Col) < 1
ws1.Cells(Fila, Col).Copy ws2.Range("D4")
Application.CutCopyMode = False
'ws2.PrintOut Copies:=1, Collate:=True
Fila = Fila + 1
Loop
End Sub



Respuesta Responder a este mensaje
#8 Ricard
25/03/2005 - 20:39 | Informe spam
Hola KL
Otra vez el pesado, he intentado hacer una macro con el codigo que tu me has
enviado y con el progres indicator y no hay forma, me he bajado el archivo y
lo he intalado en C:/ he de hacer algo más? te envio el codigo a ver si me
puedes echar una mano

Dim Prog As ProgressReporter.Progressor
Sub test()
Dim N As Long
Dim Col As Integer, Fila As Integer
Dim ws1 As Worksheet, ws2 As Worksheet

If Prog Is Nothig Then
Set Prog = New ProgressReporter.Progressor
End If
With Prog
.MinimumValue = 0
.MaximumValue = 5
.SetParentWindow 0
.CurrentValue = 0
.Show
Fila = 6: Col = 4
Set ws1 = Workbooks("Libro1.xls").ActiveSheet
Set ws2 = Workbooks("Libro2.xls").ActiveSheet


Do Until ws1.Cells(Fila, Col) < 1
ws1.Cells(Fila, Col).Copy ws2.Range("D4")
Application.CutCopyMode = False
ws2.PrintOut Copies:=1, Collate:=True
Fila = Fila + 1
DoEvents
.Increment 1
Loop

End With
End Sub


Un saludo



"KL" escribió:

Hola Ricard,

No estoy muy seguro que es lo que intentas hacer con tu macro (por si acaso
abajo te pongo una version optimizada que hace lo mismo)
Para poder combinarla con las rutinas de progressbar de John Walkenbach
habria que entender una cosa que es: ?como se puede saber desde el principio
cual sera la ultima fila? Es que tenemos que calcular el progreso a partir
de la fila actual y el total de filas a copiar.

Cuando pones la condicion limite para el bucle Cells(Fila, Col) < 1,

- ?quiere decir esto que quieres que la impresion pare cuande se alcance una
celda VACIA en la columna [D], o ademas de vacia la celda puede contener 0 o
incluso un numero negativo?

- ?se puede afirmar con seguridad que no habra mas celdas con datos por
debajo de la celda en la que pare el bucle?

Tambien te recomiendo revises este enlace:
http://www.cpearson.com/excel/progress.htm

Saludos,
KL

Aqui te pongo tu macro depurado:

Sub test()
Dim Col As Integer, Fila As Integer
Dim ws1 As Worksheet, ws2 As Worksheet

Fila = 4: Col = 4
Set ws1 = Workbooks("Libro1.xls").ActiveSheet
Set ws2 = Workbooks("Libro2.xls").ActiveSheet

Do Until ws1.Cells(Fila, Col) < 1
ws1.Cells(Fila, Col).Copy ws2.Range("D4")
Application.CutCopyMode = False
'ws2.PrintOut Copies:=1, Collate:=True
Fila = Fila + 1
Loop
End Sub



Respuesta Responder a este mensaje
#9 KL
25/03/2005 - 20:42 | Informe spam
Hola Ricard,

Tus respuestas (que la verdad sospechaba y esperaba que iban a ser las que
son) facilitan bastante la tarea.

Prueba hacer los siguiente:
1) Habre tus dos libros "Libro1.xls" y "Libro2.xls"
2) Copia el codigo q te pongo a continuacion a un modulo normal (que no sea
de hoja, libro o formulario)
3) Bajate el fichero de John Walkenbach del siguiente enlace y ejecutalo
para descomprimirlo a una carpeta en tu PC:
http://www.j-walk.com/ss/excel/files/progind.exe
4) Abre el fichero descomprimido y ve al editor VBA (Alt+F11)
5) Dentro del explorador de proyectos VBA busca el proyecto "progind.xls" y
dentro de ese el formulario "UserForm1"
6) Ahora haz clic sobre "UserForm1" y arrastralo al proyecto "Libro1.xls"
para copiarlo
7) Cierra el fichero progind.xls
8) Vuelve al libro1.xls (Alt+F11) y lanza el macro "MostrarProgreso"

Saludos,
KL

'Inicio Codigo
Sub Main()
Dim Fila As Long
Dim TotalFilas As Long
Dim Progreso As Double
Dim hojaDestino As Worksheet

Set hojaDestino = Workbooks("Libro2.xls").ActiveSheet

Application.ScreenUpdating = False
With Workbooks("Libro1.xls").ActiveSheet
TotalFilas = .Cells(.Rows.Count, 4).End(xlUp).Row
For Fila = 4 To TotalFilas
.Cells(Fila, 4).Copy hojaDestino.Range("D4")
Application.CutCopyMode = False
'hojaDestino.PrintOut Copies:=1, Collate:=True
Progreso = (Fila - 4) / (TotalFilas - 4)
With UserForm1
.FrameProgress.Caption = Format(Progreso, "0%")
.LabelProgress.Width = Progreso * (.FrameProgress.Width -
10)
End With
'el comando DoEvents de actualizar el formulario
DoEvents
Next Fila
End With
Unload UserForm1
End Sub

Sub MostrarProgreso()
UserForm1.LabelProgress.Width = 0
UserForm1.Show
End Sub
'Fin Codigo
Respuesta Responder a este mensaje
#10 KL
25/03/2005 - 20:52 | Informe spam
Ricard,

Te has adelantado un poco. Para poder combinar el codigo (incluso despues de
depurarlo yo) con el codigo de john es necesario modificarlo de una manera
radical. Mira mi mensaje de hace unos minutos. Ya me diras si te funciona.
Si no enviame las dos hojas y te las adapto.

Un saludo,
KL

"Ricard" wrote in message
news:
Hola KL,
Gracias por tu interes, contesto a tus preguntas.
Quiero que la macro pare cuando no haya más datos, no pueden haber ni
cero, ni
importes negativos.
Con toda seguridad no hay más datos, una vez que lle gue a un a linea.
En cuanto a saber cual es la última fila , variara de listado en listado
lo que sí podriamos marcar un máximo no?
Nada más, agradecerte otra vez tu interes y reconocer que mi nivel es
infimo
en visual Basic es infimo, por no decir nada sé algo de C y ahora estoy
empezando con el Java ( por cierto tiene mucha semejanza con el basic no?)
Un saludo


"KL" escribió:

Hola Ricard,

No estoy muy seguro que es lo que intentas hacer con tu macro (por si
acaso
abajo te pongo una version optimizada que hace lo mismo)
Para poder combinarla con las rutinas de progressbar de John Walkenbach
habria que entender una cosa que es: ?como se puede saber desde el
principio
cual sera la ultima fila? Es que tenemos que calcular el progreso a
partir
de la fila actual y el total de filas a copiar.

Cuando pones la condicion limite para el bucle Cells(Fila, Col) < 1,

- ?quiere decir esto que quieres que la impresion pare cuande se alcance
una
celda VACIA en la columna [D], o ademas de vacia la celda puede contener
0 o
incluso un numero negativo?

- ?se puede afirmar con seguridad que no habra mas celdas con datos por
debajo de la celda en la que pare el bucle?

Tambien te recomiendo revises este enlace:
http://www.cpearson.com/excel/progress.htm

Saludos,
KL

Aqui te pongo tu macro depurado:

Sub test()
Dim Col As Integer, Fila As Integer
Dim ws1 As Worksheet, ws2 As Worksheet

Fila = 4: Col = 4
Set ws1 = Workbooks("Libro1.xls").ActiveSheet
Set ws2 = Workbooks("Libro2.xls").ActiveSheet

Do Until ws1.Cells(Fila, Col) < 1
ws1.Cells(Fila, Col).Copy ws2.Range("D4")
Application.CutCopyMode = False
'ws2.PrintOut Copies:=1, Collate:=True
Fila = Fila + 1
Loop
End Sub



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