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

#6 Javi
10/03/2005 - 23:42 | Informe spam
Hola

El resto del cóf¡digo no era importante y funciona bien, vuelvo a
ponerlo un poco mejor (perdón)

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

aqui sigue el código sin problemas

Next
Next

He estado poniendo inspecciones, y el problema lo tengo con el bucle

For Columnaactiva = Columna To 256

He puesto un valor en el registro 21 y otro en el 41 y cuando me copia
el 21 la variable Columnaactiva tiene el valor 130 y sólo busca las
celdas a partir de la 130, y por tanto no encuentra el registro 41 que
está en la columna 4 de la Hoja2.

He hecho alguna modificación, pero no logro que al ir comprobando la
fila con los valores de un registro que está en la columna 100 (por ej),
en la hoja siguiente continue la búsqueda por la columna 4 (la inicia en
la 100.

Sé que es raro cómo lo he hecho, pero soy bastante novato en el tema y
no se me ocurría más.

Muchas gracias por cualquier ayuda y por vuestro tiempo

Javi





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).





Manuel Romero escribió:
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
#7 Manuel Romero
11/03/2005 - 15:58 | Informe spam
Ya entendi, lo que pasa es que la asignacion de la variable columna la debes
colocar justo despues del for de hojaactiva.
For Hojaactiva = Hoja To 5


columna=4
For Columnaactiva = Columna To 256



lo otro es que hagas el for de 4 a 256 y asi siempre empiezas en 4

"Javi" escribió en el mensaje
news:
Hola

El resto del cóf¡digo no era importante y funciona bien, vuelvo a
ponerlo un poco mejor (perdón)

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

aqui sigue el código sin problemas

Next
Next

He estado poniendo inspecciones, y el problema lo tengo con el bucle

For Columnaactiva = Columna To 256

He puesto un valor en el registro 21 y otro en el 41 y cuando me copia
el 21 la variable Columnaactiva tiene el valor 130 y sólo busca las
celdas a partir de la 130, y por tanto no encuentra el registro 41 que
está en la columna 4 de la Hoja2.

He hecho alguna modificación, pero no logro que al ir comprobando la
fila con los valores de un registro que está en la columna 100 (por ej),
en la hoja siguiente continue la búsqueda por la columna 4 (la inicia en
la 100.

Sé que es raro cómo lo he hecho, pero soy bastante novato en el tema y
no se me ocurría más.

Muchas gracias por cualquier ayuda y por vuestro tiempo

Javi





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).





Manuel Romero escribió:
> 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
#8 Javi
11/03/2005 - 23:18 | Informe spam
Hola Manuel

Muchas gracias por tu ayuda, de todas formas hoy he encontrado otra
solución que funciona, te la copio ya sólo por curiosidad


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

If HojaActiva = Hoja then ' NOVEDAD
ColumnaInicial = Columna ' NOVEDAD
Else ' NOVEDAD
ColumnaInicial=4 ' NOVEDAD
End If ' NOVEDAD

For Columnaactiva = ColumnaInicial 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

aqui sigue el código sin problemas

Next
Next


Como verás, las líneas nuevas seleccionan si se está mirando en la
primera hoja o en una de las siguientes, en las siguientes empieza a
buscar siempre por la Columna 4, mientras que en la actual deja que se
siga buscando desde la columna actual.

Al final con un papel usado y en medio de un viaje se hizo la luz.

De todas formas muchas gracias por tu tirmpo y tus comentarios me has
ayudado mucho.

Javi



Manuel Romero escribió:
Ya entendi, lo que pasa es que la asignacion de la variable columna la debes
colocar justo despues del for de hojaactiva.

For Hojaactiva = Hoja To 5



columna=4

For Columnaactiva = Columna To 256




lo otro es que hagas el for de 4 a 256 y asi siempre empiezas en 4

"Javi" escribió en el mensaje
news:

Hola

El resto del cóf¡digo no era importante y funciona bien, vuelvo a
ponerlo un poco mejor (perdón)

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

aqui sigue el código sin problemas

Next
Next

He estado poniendo inspecciones, y el problema lo tengo con el bucle

For Columnaactiva = Columna To 256

He puesto un valor en el registro 21 y otro en el 41 y cuando me copia
el 21 la variable Columnaactiva tiene el valor 130 y sólo busca las
celdas a partir de la 130, y por tanto no encuentra el registro 41 que
está en la columna 4 de la Hoja2.

He hecho alguna modificación, pero no logro que al ir comprobando la
fila con los valores de un registro que está en la columna 100 (por ej),
en la hoja siguiente continue la búsqueda por la columna 4 (la inicia en
la 100.

Sé que es raro cómo lo he hecho, pero soy bastante novato en el tema y
no se me ocurría más.

Muchas gracias por cualquier ayuda y por vuestro tiempo

Javi





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).





Manuel Romero escribió:

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




















email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida