Foros del Web » Soporte técnico » Ofimática »

Excel con vbasic

Estas en el tema de Excel con vbasic en el foro de Ofimática en Foros del Web. necesito saber como capturar el numero de fila en el que se encuentra el cursor. tengo un problema con una macro, estoy haciendo una busqueda ...
  #1 (permalink)  
Antiguo 21/07/2010, 16:16
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 14 años, 5 meses
Puntos: 0
Excel con vbasic

necesito saber como capturar el numero de fila en el que se encuentra el cursor.
tengo un problema con una macro, estoy haciendo una busqueda de celdas que contengan el numero 2 por dar un ejemplo, y colocarlas a un lado cada una de estas celdas.
En esta macro doy un rango de a1 a a10 y busco el valor 2 todo va bien pero si el numero 2 se repite, la macro termina y es que comparo el valor inicial de la busqueda con cada busqueda siguiente y si son iguales termina, funciona si dentro de mi rango no hay dos veces el numero 2. Me parece que si pudiera saber cual es el numero de fila de la primera celda que encuentra podria validarlo y hacer que termine si vuelve a pasar por esta fila pero no encuentro como capturar el numero de fila activo en una variable.

Les dejo mi macro para ver si alguien puede ayudar. En la hoja 1 escriban los siguientes numeros desde la fila 1 hasta la fila 10: "5, 32, 25, 15, 2, 1, 8, 26, 9, 4". En la celda "H2" y "H3" escriban cualquier cosa para que funcione la referencia relativa al momento de hacer la copia. Como verán funciona, ha copiado "32,25,2,26", ahora cambien el valor 15 por 32, no funciona, solo copia 32 y 25.

Ojala puedan ayudarme con este problemita, gracias.


' defino el objeto c para q almacene la coincidencia
Set c = Hoja1.Range("a1:a10").Find(2, LookIn:=xlValues)
' si no hay coincidencia no hace nada
If c Is Nothing Then

Else
'guardo el primer valor de la coincidencia
aux = c.Value
'entra en loop para hacer las copias
Do
c.Select
Selection.Copy
Range("H2").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False

'entraga el nuevo valor encontrado a c
Set c = Hoja1.Range("a1:a10").FindNext(c)

'compara si este nuevo valor es la primera coincidencia
If aux = c.Value Then
Exit Do
End If
Loop
End If
  #2 (permalink)  
Antiguo 26/07/2010, 16:54
Avatar de Monimo  
Fecha de Ingreso: noviembre-2007
Ubicación: Mexico Df
Mensajes: 742
Antigüedad: 17 años, 1 mes
Puntos: 69
Respuesta: Excel con vbasic

Mm yo lo que haría sería mas bien recorrer celda por celda, en lugar de hacer un find.

pero si te sirve:

Activecell.row te da el numero del renglon de la celda activa
__________________
La verdad es que lo que no quisiera dejar de hacer nunca (a parte de comer) es programar
  #3 (permalink)  
Antiguo 26/07/2010, 22:01
Avatar de Monimo  
Fecha de Ingreso: noviembre-2007
Ubicación: Mexico Df
Mensajes: 742
Antigüedad: 17 años, 1 mes
Puntos: 69
Respuesta: Excel con vbasic

Activecell.row
__________________
La verdad es que lo que no quisiera dejar de hacer nunca (a parte de comer) es programar
  #4 (permalink)  
Antiguo 26/07/2010, 23:18
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 8 meses
Puntos: 839
Hola, daviky.

Traslado el tema a una sección donde encaja mejor.
Tema trasladado desde la sección de Ayuda General.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 28/07/2010, 21:37
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 9 meses
Puntos: 88
De acuerdo Excel con vbasic for application

Hola! daviky.
Tu código está más que bien concebido pues es lo ideal para cuando se tienen decenas de miles de datos en la columna A.

Tu error es "mínimo". En efecto:

En lugar de:
aux = c.Value

debe ser:
aux = c.Address

Y en lugar de:
If aux = c.Value Then

debe ser:
If aux = c.Address Then

O sea: en lugar de terminar el código ante una repetición del valor, lo debes terminar ante una repetición de la referencia de la celda inicial.

Te muestro -entonces- una posible depuración, aunque el código que has elaborado resulta operativo con aquellas pequeñas correcciones:

Código vb:
Ver original
  1. Dim C As Range, Aux As String
  2. ' defino el objeto c para q almacene la coincidencia
  3. Set C = Hoja1.Range("a1:a10").Find(2, LookIn:=xlValues, LookAt:=xlPart)
  4. ' si no hay coincidencia no hace nada
  5. If C Is Nothing Then
  6.   Exit Sub
  7. End If
  8. 'guardo el primer valor de la coincidencia
  9. Aux = C.Address
  10. 'entra en loop para hacer las copias
  11.  
  12. Do
  13.   C.Copy [H2].End(xlDown).Offset(1)
  14. ' entrega el nuevo valor encontrado a c
  15.  Set C = Hoja1.Range("a1:a10").FindNext(C)
  16. Loop Until Aux = C.Address


Saludos, Cacho.

Etiquetas: excel, vbasic
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:44.