Discussion:
do while loop
(demasiado antiguo para responder)
Roberto
2008-07-14 22:09:03 UTC
Permalink
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
2008-07-15 04:46:41 UTC
Permalink
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 __
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
Roberto
2008-07-15 13:26:23 UTC
Permalink
Post by Héctor Miguel
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 __
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
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
2008-07-15 15:51:51 UTC
Permalink
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.
**********************
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
Roberto
2008-07-15 18:56:16 UTC
Permalink
Post by AnSanVal
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,
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.
**********************
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
Antonio y Hector, muchas gracias por su ayuda, el código presentado
funciona correctamente.

Muy amables

Roberto

Loading...