Excel - (VBA) Problema con función VLOOKUP

 
Vista:
Imágen de perfil de Fernanda
Val: 2
Ha aumentado su posición en 15 puestos en Excel (en relación al último mes)
Gráfica de Excel

(VBA) Problema con función VLOOKUP

Publicado por Fernanda (1 intervención) el 29/03/2021 05:34:03
Hola a tod@s! Espero que se encuentren muy bien :D

Quería pedirles un poco de orientación con un código en el que estoy trabajando. Se trata de una macro que, a través de un botón (ubicado en un Libro Reporte), llama a un archivo de excel externo con datos normalizados, y la finalidad del código es hacer que los datos de este archivo se traspasen a una hoja en específico del Libro Reporte con datos determinados por unos parámetros que son buscados con VLOOKUP (los cuales coloqué en otra hoja).

El problema que se me presenta con la función es que, si bien comienza reconociendo bien un primer parámetro, después reconoce los siguientes bajo la misma asignación (cuando en realidad, debería decir #N/A). Por ejemplo, en el traspaso pasa lo siguiente:

Dato 1 -> No reconocido, se traspasa en blanco
Dato 2 -> No reconocido, tampoco se traspasa
Dato 3 -> Correctamente reconocido, lo traspasa con los datos que corresponden
Dato 4 -> Lo reconoce con los mismos datos que tiene el de arriba, cuando eso no debería ser porque este dato no está en los parámetros originales.

Les adjunto el código a continuación. Muchas gracias de antemano a tod@s!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Sub TraspasarArchivo()
 
Dim LibroReporte As Workbook
Dim Origen As Workbook
Dim Archivo As String
Dim Fila As String
Dim FilaEscribir As String
Dim Valor As String
Dim Dato1 As String
Dim Dato2 As String
Dim Dato3 As String
 
Set LibroReporte = ThisWorkbook
 
    Archivo = Application.GetOpenFilename
    Set Origen = Workbooks.Open(Archivo)
 
    If Archivo <> "False" Then
 
        Fila = 2
 
        Origen.Activate
        Do While Range("E" & Fila).Value <> ""
 
            With LibroReporte.Worksheets("Traspaso")
 
            If .Range("C2").Value = "" Then
                FilaEscribir = 2
            Else
                FilaEscribir = .Range("C1").End(xlDown).Row + 1
            End If
 
            Valor = Origen.Worksheets(1).Range("E" & Fila).Value
 
            On Error Resume Next
            Dato1 = Application.WorksheetFunction.VLookup(Valor, LibroReporte.Worksheets("Parametros").Range("A:B"), 2, False)
            On Error GoTo 0
 
            On Error Resume Next
            Dato2 = Application.WorksheetFunction.VLookup(Valor, LibroReporte.Worksheets("Parametros").Range("A:D"), 4, False)
            On Error GoTo 0
 
            On Error Resume Next
            Dato3 = Application.WorksheetFunction.VLookup(Valor, LibroReporte.Worksheets("Parametros").Range("A:E"), 5, False)
            On Error GoTo 0
 
 
                .Range("A" & FilaEscribir).Value = Valor
                .Range("B" & FilaEscribir).Value = Dato1
                .Range("C" & FilaEscribir).Value = Dato2
                .Range("D" & FilaEscribir).Value = Dato3
 
            End With
 
        Fila = Fila + 1
 
 
        Loop
    End If
 
    Origen.Close
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

(VBA) Problema con función VLOOKUP

Publicado por Antoni Masana (2473 intervenciones) el 29/03/2021 19:21:47
Te falta un pequeño detalle y he realizado unos pequeños cambios para mejor.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Sub TraspasarArchivo()
    Dim LibroReporte As Workbook
    Dim Origen As Workbook
    Dim Archivo As String
    Dim Fila As String
    Dim FilaEscribir As String
    Dim Valor As String
    Dim Dato1 As String
    Dim Dato2 As String
    Dim Dato3 As String
 
    Set LibroReporte = ThisWorkbook
    Archivo = Application.GetOpenFilename
    Set Origen = Workbooks.Open(Archivo)
 
    If .Range("C2").Value = "" Then
        FilaEscribir = 2
    Else
        FilaEscribir = .Range("C1").End(xlDown).Row + 1
    End If
 
    If Archivo <> "False" Then
        Fila = 2
        Origen.Activate
        Do While Range("E" & Fila).Value <> ""
            With LibroReporte.Worksheets("Traspaso")
 
                Valor = Origen.Worksheets(1).Range("E" & Fila).Value
 
                On Error Resume Next
                Dato1 = Application.WorksheetFunction.VLookup(Valor, LibroReporte.Worksheets("Parametros").Range("A:B"), 2, False)
                On Error GoTo 0
 
                On Error Resume Next
                Dato2 = Application.WorksheetFunction.VLookup(Valor, LibroReporte.Worksheets("Parametros").Range("A:D"), 4, False)
                On Error GoTo 0
 
                On Error Resume Next
                Dato3 = Application.WorksheetFunction.VLookup(Valor, LibroReporte.Worksheets("Parametros").Range("A:E"), 5, False)
                On Error GoTo 0
 
                .Range("A" & FilaEscribir).Value = Valor
                .Range("B" & FilaEscribir).Value = Dato1: Dato1 = ""
                .Range("C" & FilaEscribir).Value = Dato2: Dato2 = ""
                .Range("D" & FilaEscribir).Value = Dato3: Dato3 = ""
                FilaEscribir = FilaEscribir + 1
            End With
            Fila = Fila + 1
        Loop
    End If
    Origen.Close
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar