我的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)
您也可能想要将您的If
和Or
与Select Case
切换
For n = 1 To end_range Select Case storeval(n) Case "IGNORE", CVErr(xlErrNA) Range("A" & n).EntireRow.ClearContents End Select Next n