Buscar última fila con datos

24/08/2008 - 23:08 por JForero | Informe spam
Buen día grupo,
Tengo un ComboBox con dos opciones para que el usuario escoja.

Si escoje la opción "Actualización", se deben llenar automáticamente unas
celdas cuyos datos se encuentran en otra hoja de cálculo... esto lo estoy
haciendo de la siguiente manera

Private Sub cmbClaseTransaccion_DropButtonClick()

'Si clase transacción es Diferente a Emisión Original, llenar los datos
de la póliza
If cmbClaseTransaccion.Value <> "Emisión Original" Then
Dim x As Boolean
'Busca número de póliza en la hoja Dt_Producción
For Each Celda In Worksheets("Dt_Producción").Range("c2:c100").Cells
If Worksheets("Producción").Range("b6") = Celda.Value Then
'Comienza a traer los datos al formulario
cmbCentroCosto.Value =
Worksheets("Dt_Producción").Cells(Celda.Row, 2).Value
cmbCompaniaSeguros.Value =
Worksheets("Dt_Producción").Cells(Celda.Row, 5).Value
Worksheets("Producción").Range("b9") =
Worksheets("Dt_Producción").Cells(Celda.Row, 6).Value

el problema es que estiy escogiendo un rango que va desde 2 hasta 100 con el
código que menciono entre paréntesis (For Each Celda In
Worksheets("Dt_Producción").Range("c2:c100").Cells)

Como puedo hacer que me recorra todos los registros o filas no vacias, ya
que cuando pase de 100 me tocaría modificar el código??

Mil gracias por la colaboración

Jorgef

Preguntas similare

Leer las respuestas

#1 MRoCFe
25/08/2008 - 02:58 | Informe spam
Hola! Jorge. Puedes reemplazar
Range("c2:c100")

por:
Range([C2], [C2].End(xlDown))

Saludos, Cacho.
Respuesta Responder a este mensaje
#2 JForero
28/08/2008 - 05:05 | Informe spam
Hola Cacho.. gracias por tu colaboración, pero al ejecutarlo y darle click
en el combobox (en la flecha de desplazamiento), me sale error 1004 en
tiempo de ejecución.

La línea con el cambio que me aconsejas quedaría

For Each Celda In Worksheets("Dt_Producción").Range([c2],
[c2].End(xlDown)).Cells

Pero me sale el error

perdon pr las molestias y gracias

Jorgef


escribió en el mensaje
news:
Hola! Jorge. Puedes reemplazar
Range("c2:c100")

por:
Range([C2], [C2].End(xlDown))

Saludos, Cacho.
Respuesta Responder a este mensaje
#3 Héctor Miguel
28/08/2008 - 07:04 | Informe spam
hola, Jorge ! (solo algunas sugerencias):

1) cambia de evento en el combo del "_DropButtonClick" al evento: -> "_Change"
el que estas utilizando (_dropbuttonclick) se dispara SIN importar si hay alguna seleccion o no

2) hay varias alternativas para solucionar cuantas filas no vacias pudieras llegar a necesitar (p.e.)

a) si consideras que no habras de alcanzar mas alla de 6000 filas (o ajusta de ser necesario), prueba con algo +/- asi:

1) si las celdas donde se busca contienen solo valores constantes (NO formulas)...
For Each Celda In Worksheets("Dt_Produccion").Range("c2:c6000").SpecialCells(xlCellTypeConstants)

2) si las celdas donde se busca contienen solo resultados de formulas...
For Each Celda In Worksheets("Dt_Produccion").Range("c2:c6000").SpecialCells(xlCellTypeFormulas)

b) la sugerencia de Cacho funciona SI (y solo si) la hoja "activa" es de donde tomas la variable "Celda"
es decir, para que funcione la asignacion: -> Range([C2], [C2].End(xlDown))
el uso abreviado de referencias a celdas "indica" que se trata de la hoja activa (y parece que NO es este el caso -?-)

c) cuando se trata de una hoja NO "activa", es necesario "calificar" (completamente) la referencia a los rangos
y la manera mas directa para evitar multi-citadas referencias al objeto principal, es usar una instruccion "With" (p.e.)
With Worksheets("Dt_Produccion")
For Each Celda In .Range(.Range("c2"), .Range("c2").End(xlDown))
' aqui las instrucciones de tu codigo ... '
Next
End With

3) te recomiendo declarar la variable "Celda" dentro de la instruccion "Dim" y asignarle un tipo de datos "Range"
asi te aseguras de poder administrar de manera "transparente" todas sus propiedades, metodos, y demas
(y de pasadita, te "ahorras" tambien otra multitud de referencias calificadas completamente, p.e.)
esta seccion del codigo que expones:

cmbCentroCosto.Value = Worksheets("Dt_Produccion").Cells(Celda.Row, 2).Value
cmbCompaniaSeguros.Value = Worksheets("Dt_Produccion").Cells(Celda.Row, 5).Value
Worksheets("Produccion").Range("b9") = Worksheets("Dt_Produccion").Cells(Celda.Row, 6).Value



podrias adelgazarla con algo +/- como lo siguiente:
(recuerda que la variable "Celda" es ya una referencia a cada una de las celdas de la columna C de la hoja "Dt_Produccion")

cmbCentroCosto.Value = Celda.Offset(, -1)
cmbCompaniaSeguros.Value = Celda.Offset(, 2)
Worksheets("Produccion").Range("b9") = Celda.Offset(, 3)



saludos,
hector.

__ OP __
Tengo un ComboBox con dos opciones para que el usuario escoja.
Si escoje la opcion "Actualizacion", se deben llenar automaticamente unas celdas
cuyos datos se encuentran en otra hoja de calculo... esto lo estoy haciendo de la siguiente manera

Private Sub cmbClaseTransaccion_DropButtonClick()
'Si clase transaccion es Diferente a Emision Original, llenar los datos de la poliza
If cmbClaseTransaccion.Value <> "Emision Original" Then
Dim x As Boolean
'Busca numero de poliza en la hoja Dt_Produccion
For Each Celda In Worksheets("Dt_Produccion").Range("c2:c100").Cells
If Worksheets("Produccion").Range("b6") = Celda.Value Then
'Comienza a traer los datos al formulario
cmbCentroCosto.Value = Worksheets("Dt_Produccion").Cells(Celda.Row, 2).Value
cmbCompaniaSeguros.Value = Worksheets("Dt_Produccion").Cells(Celda.Row, 5).Value
Worksheets("Produccion").Range("b9") = Worksheets("Dt_Produccion").Cells(Celda.Row, 6).Value

el problema es que estiy escogiendo un rango que va desde 2 hasta 100 con el codigo que menciono entre parentesis
(For Each Celda In Worksheets("Dt_Produccion").Range("c2:c100").Cells)

Como puedo hacer que me recorra todos los registros o filas no vacias, ya que cuando pase de 100 me tocaria modificar el codigo??
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida