我的macros没有拿起值“#N / A”来清除内容

所以我有从列A到J(行可以不同)的一系列数据。 我需要我的macros做的是拿起行a的单元格值是IGNORE或#N / A的任何地方,并清除整个行的内容。 此后我有VBA删除所有空白行。 我遇到的问题是,VBA不希望拿起“#N / A”值并清除内容 – 如果我离开这一点,它确实是我想要的只有IGNORE。

请有人协助 – 我认为这可能与N / A不作为文本被拿起有关。

谢谢。

Dim end_range As Double Dim n As Double 'Set the range in which to search for Ignore Sheets("Submit").Select Range("A1").End(xlDown).Select end_range = ActiveCell.Row 'Store the values of in a range ReDim storeval(end_range) For n = 1 To end_range storeval(n) = Range(Cells(n, 1), Cells(n, 1)).Value Range(Cells(n, 2), Cells(n, 2)).Value = storeval(n) Next n 'Delete the entirerow if the value contains ignore or N/A For n = 1 To end_range If storeval(n) = "IGNORE" Or storeval(n) = "#N/A" Then Range("A" & n).EntireRow.ClearContents End If Next n Sheets("Submit").Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

如果您在单元格中使用=NA() ,那么您看到的#N/A只是错误对象的文本表示forms。 因此,不要使用storeval(n) = "#N/A" ,您需要testing是否:

  • 这是一个错误,使用IsError
  • 这是使用CVErr(xlErrNA)的NA错误,

这里是一个小函数,会给你真正的单元格是NA,假如它不是NA:

 Function IsNa(value) If Not IsError(value) Then IsNa = False ElseIf value = CVErr(xlErrNA) Then IsNa = True Else IsNa = False End If End Function 

那么就由IsNa(storeval(n))调用它

要发现"#N/A" CVErr(xlErrNA) "#N/A"您需要查找单元格的值CVErr(xlErrNA)

您也可能想要将您的IfOrSelect Case切换

 For n = 1 To end_range Select Case storeval(n) Case "IGNORE", CVErr(xlErrNA) Range("A" & n).EntireRow.ClearContents End Select Next n