Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

do while loop

36 views
Skip to first unread message

Roberto

unread,
Jul 14, 2008, 6:09:03 PM7/14/08
to
Tengo una hoja de cálculo que contiene información sobre productos de
inventario, en una columna a través de una formula se determina si hay
faltante o no. Ahora bien, estoy creando un macro que verifica que
productos es necesario adquirir o estan en el límite mínimo de manera
de crear una lista para de productos necesarios. El problema con el
macro que hice es que cuando encuentra el primer producto realiza la
copia a la otra hoja y se detiene, es decir no sigue buscando los
demas artículo que cumplan con la condición. Les agradecería la
ayuda. El macro que estoy utilizando es este:

Sub impresion()
'Revisamos las celdas con un bucle (do while-loop) para ver cual
cumple con la condición
Sheets("Inventario").Select
Range("C2").Select
Do While ActiveCell.Value <> Empty
ActiveCell.Offset(1, 0).Select
'Si se cumple la condición se copia la fila y se pega en otra hoja
If ActiveCell.Offset(0, 15).Value = "adquirir" Or ActiveCell.Offset(0,
15).Value = "límite mínimo" Then

'Se selcciona el rango a la derecha
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
ActiveCell.Select
'va a la hoja de Lista de compra
Sheets("Lista de compra").Select
Range("a65536").Select

' Luego va a la última celda
Selection.End(xlUp).Select
' Por último se dezplaza una posición hacia abajo
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Selection.Interior.ColorIndex = xlNone

Exit Sub
End If
Loop

Sheets("Hoja1").Select
End Sub


Gracias de antemano
Roberto

Héctor Miguel

unread,
Jul 15, 2008, 12:46:41 AM7/15/08
to
hola, Roberto !

> Tengo una hoja de cálculo que contiene informacion sobre productos de inventario
> en una columna a traves de una formula se determina si hay o no.


> Ahora bien, estoy creando un macro que verifica que productos es necesario adquirir o estan en el límite mínimo
> de manera de crear una lista para de productos necesarios.
> El problema con el macro que hice es que cuando encuentra el primer producto realiza la copia a la otra hoja y se detiene

> es decir no sigue buscando los demas artículo que cumplan con la condicion.
> Les agradeceria la ayuda. El macro que estoy utilizando es este: ...

1) la macro no continua porque tienes una instruccion "Exit Sub" ANTES de que termine su recorrido -((

2) si ya tienes un "identificador" en la columna R ("adquirir" o "limite minimo")...
por que no usas mejor un filtro avanzado y pasas a la otra hoja los datos con dichas "instrucciones" ?

3) lo unico que impide hacer una propuesta es la instruccion: -> Range(Selection, Selection.End(xlToRight)).Select
(y no creo que sea necesaria, si comentas de preferencia de cuales columnas estamos hablando y cuales son los titulos)

saludos,
hector.

__ el codigo expuesto __

Roberto

unread,
Jul 15, 2008, 9:26:23 AM7/15/08
to
On 15 jul, 00:46, "Héctor Miguel" <NOhemiordiS...@PLShotmail.com>
wrote:

Hola Hector gracias por tu interés
No creo que el error sea la instrucción end sub, toda vez que he
corrido la macro sin esta instrucción y el resultado es el mismo. En
cuanto a la instrucción: Range(Selection,
Selection.End(xlToRight)).Select simplemente copia la fila que incluye
el tipo de material, una descripción, unidades de medición y el
precio.
En tu propuesta de utilizar filtros, reconozco que me he paseado por
allí y creo que no tendría problemas pero estoy iniciandome en esto de
las macros y me gustaría poder ir desarrollando este conocimiento.

Gracias nuevamente

AnSanVal

unread,
Jul 15, 2008, 11:51:51 AM7/15/08
to
Lo que te indica Héctor es totalmente acertado (aunque no lo creas).

Yo no se como están (exactamente) tus datos, pero prueba con esta modificación de tu código,
para que sea lo más cercano posible a lo que estás haciendo:

Sub impresion()
' Revisamos las celdas con un bucle (do while-loop) para ver cual cumple con la condición
Sheets("Inventario").Select
Range("C2").Select
Do While ActiveCell.Value <> Empty
ActiveCell.Offset(1, 0).Select
' Si se cumple la condición se copia la fila y se pega en otra hoja

If ActiveCell.Offset(0, 15).Value = "adquirir" Or _


ActiveCell.Offset(0, 15).Value = "límite mínimo" Then
' Se selcciona el rango a la derecha
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy

' va a la hoja de Lista de compra


Sheets("Lista de compra").Select

Range("a65536").End(xlUp).Offset(1, 0).Select


Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.Interior.ColorIndex = xlNone

End If
Sheets("Inventario").Select


Loop
'Sheets("Hoja1").Select
End Sub

Saludos: Antonio.
**********************

Roberto

unread,
Jul 15, 2008, 2:56:16 PM7/15/08
to

Antonio y Hector, muchas gracias por su ayuda, el código presentado
funciona correctamente.

Muy amables

Roberto

0 new messages