Continuar una macro si hay más valores en la misma fila

09/03/2005 - 18:48 por Javi | Informe spam
Hola

Quiero pasar datos de una base de datos (en un libro de excel diferente)
a otra hoja; en la base de datos los registros están en filas, pero no
están guardados seguidos, de manera que puede haber varias celdas en
blanco entre un valor y otro.

Estoy intentando hacer que si hay más valores en el resto de la fila
(celdas no vacías) me aparezca un mensaje o un contador, de manera que
se siga ejecutando un bucle, pero que si no los hay se salga del bucle.

El problema está en que no sé cómo buscar a partir de una celda
determinada, ya que una vez recuperados, por ejemplo, cinco valores el
rango en que buscar más celdas no vacías es distinto.

No sé si me he explicado bien, pero agradeceré cualquier ayuda que me
podáis facilitar

Muchas gracias

Javi

Preguntas similare

Leer las respuestas

#1 Manuel Romero
09/03/2005 - 19:50 | Informe spam
escribe en el rango a1:a10 de alguna hoja varios valores y separalos por
filas en blanco, luego ejecuta esta macro

Sub lista()
Dim rng As Range
For Each rng In Range("a1:a10").SpecialCells(xlCellTypeConstants, 23)
MsgBox rng.Value
Next
End Sub

mira en la ayuda por los parametros del metodo specialcells y mira cual te
sirve

"Javi" escribió en el mensaje
news:
Hola

Quiero pasar datos de una base de datos (en un libro de excel diferente)
a otra hoja; en la base de datos los registros están en filas, pero no
están guardados seguidos, de manera que puede haber varias celdas en
blanco entre un valor y otro.

Estoy intentando hacer que si hay más valores en el resto de la fila
(celdas no vacías) me aparezca un mensaje o un contador, de manera que
se siga ejecutando un bucle, pero que si no los hay se salga del bucle.

El problema está en que no sé cómo buscar a partir de una celda
determinada, ya que una vez recuperados, por ejemplo, cinco valores el
rango en que buscar más celdas no vacías es distinto.

No sé si me he explicado bien, pero agradeceré cualquier ayuda que me
podáis facilitar

Muchas gracias

Javi
Respuesta Responder a este mensaje
#2 Javi
09/03/2005 - 21:05 | Informe spam
Hola

Gracias Manuel, en parte soluciona mi problema, pero me queda la segunda
parte que tampoco sé solucionar y es cómo hacer que el rango "a1:a10" se
pueda seleccionar en base a dos variablesque especifiquen el inicio y el
final del rango

Gracias de nuevo

Javi

Manuel Romero escribió:
escribe en el rango a1:a10 de alguna hoja varios valores y separalos por
filas en blanco, luego ejecuta esta macro

Sub lista()
Dim rng As Range
For Each rng In Range("a1:a10").SpecialCells(xlCellTypeConstants, 23)
MsgBox rng.Value
Next
End Sub

mira en la ayuda por los parametros del metodo specialcells y mira cual te
sirve

"Javi" escribió en el mensaje
news:

Hola

Quiero pasar datos de una base de datos (en un libro de excel diferente)
a otra hoja; en la base de datos los registros están en filas, pero no
están guardados seguidos, de manera que puede haber varias celdas en
blanco entre un valor y otro.

Estoy intentando hacer que si hay más valores en el resto de la fila
(celdas no vacías) me aparezca un mensaje o un contador, de manera que
se siga ejecutando un bucle, pero que si no los hay se salga del bucle.

El problema está en que no sé cómo buscar a partir de una celda
determinada, ya que una vez recuperados, por ejemplo, cinco valores el
rango en que buscar más celdas no vacías es distinto.

No sé si me he explicado bien, pero agradeceré cualquier ayuda que me
podáis facilitar

Muchas gracias

Javi





Respuesta Responder a este mensaje
#3 Manuel Romero
09/03/2005 - 23:37 | Informe spam
var1="a1"
var2="a10"
For Each rng In Range(var1 & ":" & var2).SpecialCells(xlCellTypeConstants,
23)

es eso lo que necesitas?


"Javi" escribió en el mensaje
news:%23Vi8$
Hola

Gracias Manuel, en parte soluciona mi problema, pero me queda la segunda
parte que tampoco sé solucionar y es cómo hacer que el rango "a1:a10" se
pueda seleccionar en base a dos variablesque especifiquen el inicio y el
final del rango

Gracias de nuevo

Javi

Manuel Romero escribió:
> escribe en el rango a1:a10 de alguna hoja varios valores y separalos por
> filas en blanco, luego ejecuta esta macro
>
> Sub lista()
> Dim rng As Range
> For Each rng In Range("a1:a10").SpecialCells(xlCellTypeConstants, 23)
> MsgBox rng.Value
> Next
> End Sub
>
> mira en la ayuda por los parametros del metodo specialcells y mira cual


te
> sirve
>
> "Javi" escribió en el mensaje
> news:
>
>>Hola
>>
>>Quiero pasar datos de una base de datos (en un libro de excel diferente)
>>a otra hoja; en la base de datos los registros están en filas, pero no
>>están guardados seguidos, de manera que puede haber varias celdas en
>>blanco entre un valor y otro.
>>
>>Estoy intentando hacer que si hay más valores en el resto de la fila
>>(celdas no vacías) me aparezca un mensaje o un contador, de manera que
>>se siga ejecutando un bucle, pero que si no los hay se salga del bucle.
>>
>>El problema está en que no sé cómo buscar a partir de una celda
>>determinada, ya que una vez recuperados, por ejemplo, cinco valores el
>>rango en que buscar más celdas no vacías es distinto.
>>
>>No sé si me he explicado bien, pero agradeceré cualquier ayuda que me
>>podáis facilitar
>>
>>Muchas gracias
>>
>>Javi
>
>
>
Respuesta Responder a este mensaje
#4 Javi
10/03/2005 - 01:29 | Informe spam
Gracias Manuel

En principio sí, pero mientras tanto he probado con bucles y funciona
casi bien, copio el código:

For Hoja = 1 To 5 Step 1 ' hay 5 hojas que tienen los datos
Columna = 4 ' los datos comienzan en la columna 4
For Contador = 1 To 40 Step 1 ' tengo 40 filas de datos por hoja
' Comprobar si se ha llegado al último producto
' Comprobar si hay más valores en la base de datos aunque haya espacios
por medio

NoHayMas = 0

For Hojaactiva = Hoja To 5
For Columnaactiva = Columna To 256
If Workbooks("BdDatos.xls").Worksheets("BdD" & Hojaactiva).Cells(nfila,
Columnaactiva).Value <> "" Then
NoHayMas = NoHayMas + 1
End If
Next
Next

If NoHayMas = 0 Then
End
End If


' si NoHayMas <>0 hay más datos y sigue el código para capturarlos


PROBLEMA: Al pasar el primer bucle a la HOJA2 (BdD2) la variable COLUMNA
está en 130 (o en otro valor), pero necesito que vuelva a empezar en el
valor 4.

He probado a poner

For Columnaactiva = 4 To 256

pero me busca los 80 primeros registros si tengo uno en el 41, que es el
primer registro de la Hoja2 (BdD2).


Espero haberme explicado mejor que antes.

Muchas Gracias

Javi








Manuel Romero escribió:
var1="a1"
var2="a10"
For Each rng In Range(var1 & ":" & var2).SpecialCells(xlCellTypeConstants,
23)

es eso lo que necesitas?


"Javi" escribió en el mensaje
news:%23Vi8$

Hola

Gracias Manuel, en parte soluciona mi problema, pero me queda la segunda
parte que tampoco sé solucionar y es cómo hacer que el rango "a1:a10" se
pueda seleccionar en base a dos variablesque especifiquen el inicio y el
final del rango

Gracias de nuevo

Javi

Manuel Romero escribió:

escribe en el rango a1:a10 de alguna hoja varios valores y separalos por
filas en blanco, luego ejecuta esta macro

Sub lista()
Dim rng As Range
For Each rng In Range("a1:a10").SpecialCells(xlCellTypeConstants, 23)
MsgBox rng.Value
Next
End Sub

mira en la ayuda por los parametros del metodo specialcells y mira cual





te

sirve

"Javi" escribió en el mensaje
news:


Hola

Quiero pasar datos de una base de datos (en un libro de excel diferente)
a otra hoja; en la base de datos los registros están en filas, pero no
están guardados seguidos, de manera que puede haber varias celdas en
blanco entre un valor y otro.

Estoy intentando hacer que si hay más valores en el resto de la fila
(celdas no vacías) me aparezca un mensaje o un contador, de manera que
se siga ejecutando un bucle, pero que si no los hay se salga del bucle.

El problema está en que no sé cómo buscar a partir de una celda
determinada, ya que una vez recuperados, por ejemplo, cinco valores el
rango en que buscar más celdas no vacías es distinto.

No sé si me he explicado bien, pero agradeceré cualquier ayuda que me
podáis facilitar

Muchas gracias

Javi











Respuesta Responder a este mensaje
#5 Manuel Romero
10/03/2005 - 20:36 | Informe spam
No entendi el codigo que mandaste, los dos primeros for estan sin cerrar,
porque no lo indentas para saber donde empieza y termina cada for?

"Javi" escribió en el mensaje
news:
Gracias Manuel

En principio sí, pero mientras tanto he probado con bucles y funciona
casi bien, copio el código:

For Hoja = 1 To 5 Step 1 ' hay 5 hojas que tienen los datos
Columna = 4 ' los datos comienzan en la columna 4
For Contador = 1 To 40 Step 1 ' tengo 40 filas de datos por hoja
' Comprobar si se ha llegado al último producto
' Comprobar si hay más valores en la base de datos aunque haya espacios
por medio

NoHayMas = 0

For Hojaactiva = Hoja To 5
For Columnaactiva = Columna To 256
If Workbooks("BdDatos.xls").Worksheets("BdD" & Hojaactiva).Cells(nfila,
Columnaactiva).Value <> "" Then
NoHayMas = NoHayMas + 1
End If
Next
Next

If NoHayMas = 0 Then
End
End If


' si NoHayMas <>0 hay más datos y sigue el código para capturarlos


PROBLEMA: Al pasar el primer bucle a la HOJA2 (BdD2) la variable COLUMNA
está en 130 (o en otro valor), pero necesito que vuelva a empezar en el
valor 4.

He probado a poner

For Columnaactiva = 4 To 256

pero me busca los 80 primeros registros si tengo uno en el 41, que es el
primer registro de la Hoja2 (BdD2).


Espero haberme explicado mejor que antes.

Muchas Gracias

Javi








Manuel Romero escribió:
> var1="a1"
> var2="a10"
> For Each rng In Range(var1 & ":" &


var2).SpecialCells(xlCellTypeConstants,
> 23)
>
> es eso lo que necesitas?
>
>
> "Javi" escribió en el mensaje
> news:%23Vi8$
>
>>Hola
>>
>>Gracias Manuel, en parte soluciona mi problema, pero me queda la segunda
>>parte que tampoco sé solucionar y es cómo hacer que el rango "a1:a10" se
>>pueda seleccionar en base a dos variablesque especifiquen el inicio y el
>>final del rango
>>
>>Gracias de nuevo
>>
>>Javi
>>
>>Manuel Romero escribió:
>>
>>>escribe en el rango a1:a10 de alguna hoja varios valores y separalos


por
>>>filas en blanco, luego ejecuta esta macro
>>>
>>>Sub lista()
>>> Dim rng As Range
>>> For Each rng In Range("a1:a10").SpecialCells(xlCellTypeConstants,


23)
>>> MsgBox rng.Value
>>> Next
>>>End Sub
>>>
>>>mira en la ayuda por los parametros del metodo specialcells y mira cual
>
> te
>
>>>sirve
>>>
>>>"Javi" escribió en el mensaje
>>>news:
>>>
>>>
>>>>Hola
>>>>
>>>>Quiero pasar datos de una base de datos (en un libro de excel


diferente)
>>>>a otra hoja; en la base de datos los registros están en filas, pero no
>>>>están guardados seguidos, de manera que puede haber varias celdas en
>>>>blanco entre un valor y otro.
>>>>
>>>>Estoy intentando hacer que si hay más valores en el resto de la fila
>>>>(celdas no vacías) me aparezca un mensaje o un contador, de manera que
>>>>se siga ejecutando un bucle, pero que si no los hay se salga del


bucle.
>>>>
>>>>El problema está en que no sé cómo buscar a partir de una celda
>>>>determinada, ya que una vez recuperados, por ejemplo, cinco valores el
>>>>rango en que buscar más celdas no vacías es distinto.
>>>>
>>>>No sé si me he explicado bien, pero agradeceré cualquier ayuda que me
>>>>podáis facilitar
>>>>
>>>>Muchas gracias
>>>>
>>>>Javi
>>>
>>>
>>>
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida