在VBA中使用VLookup引用另一个Excel文件时,为什么会得到#N / A?

问题描述

我正在尝试在VBA中编程一个引用另一个工作簿的VLookup。基本上,我正在尝试在两本工作簿中进行查找。

这是我的目标的简单概述:

  • 在workbook1的A列的所有行中查找值
  • 从工作簿2的A列(与工作簿1中的A列相对应的值)和C列(要复制的值)中提取信息,并在相应的单元格(行)中将其放置在Workbook1的B列中。其他条件:(1)如果单元格中已经有值,请覆盖;(2)如果未找到单元格的值,则保持单元格不变。因此也没有#N / A。
  • 继续并重复该过程,直到workbook1的A列中没有剩余的条目为止

下面是我已经拥有的代码。我偶然发现了代码无法正常工作的事实。我一直在B列的每一行获得#N / As,同时至少应该找到一些值并将其粘贴到某些单元格中。为了进行测试,我将工作簿2中的引用表复制到工作簿1中的工作表中,当我在同一工作簿1中引用该特定工作表时,该代码似乎可以正常工作。

Sub Import()

Dim rw As Long,x As Range
Dim extwbk As Workbook,twb As Workbook

Set twb = ThisWorkbook
Set extwbk = Workbooks.Open("C:\Documents\workbook2.csv")
Set x = twb.Worksheets("Sheet1").Range("A1:H100")

With twb.Sheets("Sheet1")

     For rw = 2 To .Cells(Rows.Count,1).End(xlUp).Row
         .Cells(rw,2) = Application.Vlookup(.Cells(rw,1).Value2,x,3,False)
     Next rw

End With


End Sub

您在我的代码中看到错误吗?还是有人有更好的方法来完成这项任务?最好,我也想打开一个选定的文件,而不是引用完整路径。

谢谢!

解决方法

也许试试看:

    For ...    
         on Error Resume Next
         .Cells(rw,2).Value = WorksheetFunction.Vlookup(.Cells(rw,1).Value,x,3,False))
    Next ...

但是,如果我对,“ x”是您搜索值的范围,并且被定义为同一张纸上的范围。这样范围会重叠!?

,

可能因为此行:

Set x = twb.Worksheets("Sheet1").Range("A1:H100")

引用了错误的工作簿。应该是:

Set x = extwbk.Worksheets("Sheet1").Range("A1:H100")

处理N / A值 在您的循环中尝试这样的代码:

For rw = 2 To .Cells(Rows.Count,1).End(xlUp).Row
        If Application.IsNA(Application.VLookup(.Cells(rw,1).Value2,False)) Then
            .Cells(rw,2) = "NOT FOUND"
        Else
            .Cells(rw,2) = Application.VLookup(.Cells(rw,False)
        End If
         
     Next rw

将“找不到”替换为您要显示的内容,或者如果要保留空白单元格,则替换为“”。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...