Excel 在VBA中处理#NA值
我编写了VBA代码,该代码通过基于列值的Excel 在VBA中处理#NA值,excel,vba,match,lookup,worksheet,Excel,Vba,Match,Lookup,Worksheet,我编写了VBA代码,该代码通过基于列值的匹配功能将数据从Sheet1复制到Sheet2 Match函数抛出错误,因为Sheet2列中的某些值不可用,因此我尝试使用以下代码: On Error Resume Next 代码将数据从Sheet1复制到Sheet2,但当代码未找到匹配的时,它也将上一列的相同值插入下一列 因此,我尝试使用以下代码来处理#NA错误: cont=Application.WorksheetFunction.IsNA(Excel.WorksheetFunction.Match
匹配功能将数据从Sheet1
复制到Sheet2
Match
函数抛出错误,因为Sheet2
列中的某些值不可用,因此我尝试使用以下代码:
On Error Resume Next
代码将数据从Sheet1
复制到Sheet2
,但当代码未找到匹配的时,它也将上一列的相同值插入下一列
因此,我尝试使用以下代码来处理#NA
错误:
cont=Application.WorksheetFunction.IsNA(Excel.WorksheetFunction.Match(Sheet2.Cells(1,i),Sheet1.Range(“A3:Ah3”),0))
但是代码本身开始抛出错误,当我尝试同时使用这两个代码时,cont variables值总是false
问题的完整代码如下所示:
Sub Copy()
Dim lastColumnSheet2 As Long
Dim i As Long
Dim temp As Long
Dim cont As Boolean
lastColumnSheet2 = Sheet2.Cells(1, Columns.Count).End(xlToLeft).Column
On Error Resume Next
For i = 2 To lastColumnSheet2
'cont = Application.WorksheetFunction.IsNA(Excel.WorksheetFunction.Match(Sheet2.Cells(1, i), Sheet1.Range("A3:Ah3"), 0))
'If cont = False Then
temp = Excel.WorksheetFunction.Match(Sheet2.Cells(1, i), Sheet1.Range("A1:Ah1"), 0)
If Sheet2.Cells(2, i).Value = "" Then
Sheet2.Cells(2, i).Value = Sheet1.Cells(2, temp).Value
End If
'Else
'End If
Next i
有人能告诉我如何处理VBA中的#NA
错误吗
这是指向代码示例数据的链接:不确定代码的其余部分,只是为了说明如何处理Match
函数可能返回的错误。将temp
声明为变量,以便在返回时存储错误值。使用Application.Match
,它可以返回错误值,而不会发出嘶嘶声。测试temp
是否为iError
错误,然后采取相应措施
Option Explicit
Public Sub CopyInfo()
Dim lastColumnSheet2 As Long
Dim i As Long
Dim temp As Variant
Dim cont As Boolean
lastColumnSheet2 = Sheet2.Cells(1, Columns.Count).End(xlToLeft).Column
For i = 2 To lastColumnSheet2
temp = Application.Match(Sheet2.Cells(1, i), Sheet1.Range("A1:AH1"), 0)
If Not IsError(temp) And IsEmpty(Sheet2.Cells(2, i)) Then
Sheet2.Cells(2, i).Value = Sheet1.Cells(2, temp).Value
End If
Next
End Sub
通常应避免在出现错误时继续下一步
。它不是用于处理错误,而是用于忽略错误。这里是Chip Pearson的概述。提供足够的代码和数据样本,我们可以以有意义的方式为您重现。这是指向样本数据的链接,代码为@Karan-最好在您的问题中包含所有相关信息。您可以在帖子中添加相关代码和示例数据。(请参见如何创建a以及“”,以及此。)@Karan…实际上,几小时前我的另一个问题显示了使用.Find
(并提到为什么它比VBA中的Match
或VLookUp
更好)的替代解决方案。当您运行VBA文件时,该文件开始在分配临时值的行上给出错误,代码甚至没有转到if语句请问错误是什么?您是否将temp声明为variant?temp声明为Double,我得到的错误是“运行时错误'1004'无法获取工作表函数类的匹配属性”。请按照我的示例使用代码。看到我说的那句话了吗。。。将temp声明为变量,以便在返回的值不存在时存储错误值。另外,请仔细看我的答案。它使用Application.Match和原因使用Application.Match,它可以返回错误值,而不会抛出嘶嘶声