Buscarv en vba excel MACRO

Tengo una macro que en excel que genera unos archivo en TXT al momento de ejecutar, actualmente tengo una consulta, Necesito hacer un BuscarV y que me traiga los datos de la segunda columna de la "HOJA3" y me los ponga en cada archivo, veo que si esta haciendo el buscarV el problema es que no esta actualizando la información en los archivos se esta quedando con el primer registro que es "1053685255" supongo que no esta haciendo el corrido completo.

Este el punto donde tengo el inconveniente el "Campo8"

Campo8 = String(10, "0")
Permes = Format(CDate(Replace(Range("O2"), " de ", " ")), "yyyy-mm")
Set f = Sheets("Hoja3").Range("A:B").Find(Permes, , xlValues, xlWhole)
Campo8 = f.Offset(, 1).Value

Agradezco su ayuda.

Respuesta
2

En el video Nº 16 de mi canal: Búsqueda (Find), verás hacia el final que SIEMPRE es conveniente evaluar si se encuentra el dato o no.

Y en el video Nº 23 (El método FINDNEXT) explico cómo realizar una búsqueda continua.

Desde el Blog podrás descargar el libro de ejemplo (click aquí)

No creo que tengas inconveniente en ajustarlo a tu modelo, pero si no es así, deja aquí el código tal como te ha quedó para ajustarlo.

Veo que hay una instrucción que siempre busca en la misma fila, obteniendo siempre el mismo valor.

En Function Poner_Encabezado(h1, c15, c16)

La primera vez (i = 4) la variable Permes convierte la fecha que aparece en O2 = 2018-12

Permes = Format(CDate(Replace(Range("O2"), " de ", " ")), "yyyy-mm")

La segunda vez (i = 5), la variable Permes sigue tomando la fecha que aparece en O2 = 29018-12... por eso siempre te mostrará el nro de la primera fila en Hoja3.

En cambio, si se toma la fecha de la variable c15 obtendrás los nros correctamente como te muestro en la imagen enviada.

Por lo que tus instrucciones debieran quedar así:

Campo8 = String(10, "0")
        'Permes = Format(CDate(Replace(Range("O2"), " de ", " ")), "yyyy-mm")     'quitar
Set f = Sheets("Hoja3").Range("A:B").Find(c15, , xlValues, xlWhole)
Campo8 = f.Offset(, 1).Value

Sdos!

Si necesitas que se coloque el valor 1 ante un registro no encontrado, así quedarían las instrucciones:

Campo8 = String(10, "0")
    Set f = Sheets("Hoja3").Range("A:B").Find(c15, , xlValues, xlWhole)
    If Not f Is Nothing Then
      Campo8 = f.Offset(, 1).Value
    Else
      Campo8 = 1
    End If

Sdos!

1 respuesta más de otro experto

Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas