Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba “我的宏”不拾取值#不适用;清除内容_Vba_Excel - Fatal编程技术网

Vba “我的宏”不拾取值#不适用;清除内容

Vba “我的宏”不拾取值#不适用;清除内容,vba,excel,Vba,Excel,所以我有一个从a列到J列的数据范围(行可以变化)。我需要宏做的是拾取a行中单元格值为IGNORE或#N/a的任何位置,并清除整行的内容。之后,我有VBA删除所有空行。我遇到的问题是VBA不希望拾取“#N/A”值并清除内容-如果我忽略此项,它只需忽略即可完成我想要的操作 请有人帮忙-我想这可能与N/A没有作为文本提取有关 多谢各位 Dim end_range As Double Dim n As Double 'Set the range in which to search for Ignor

所以我有一个从a列到J列的数据范围(行可以变化)。我需要宏做的是拾取a行中单元格值为IGNORE或#N/a的任何位置,并清除整行的内容。之后,我有VBA删除所有空行。我遇到的问题是VBA不希望拾取“#N/A”值并清除内容-如果我忽略此项,它只需忽略即可完成我想要的操作

请有人帮忙-我想这可能与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
只是错误对象的文本表示。 因此,您需要测试以下各项,而不是使用
storeval(n)=“#n/A”

  • 这是一个错误,使用
    iError
  • 使用
    CVErr(xlErrNA)
这里有一个小函数,它会告诉你,如果单元格为NA,则为true,如果单元格不是NA,则为false:

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))调用它。

如果您在单元格中使用
=NA()
,那么您看到的
#n/A
只是错误对象的文本表示。 因此,您需要测试以下各项,而不是使用
storeval(n)=“#n/A”

  • 这是一个错误,使用
    iError
  • 使用
    CVErr(xlErrNA)
这里有一个小函数,它会告诉你,如果单元格为NA,则为true,如果单元格不是NA,则为false:

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(xlerna)

您可能还想切换
If
选择大小写

For n = 1 To end_range
    Select Case storeval(n)
        Case "IGNORE", CVErr(xlErrNA)
            Range("A" & n).EntireRow.ClearContents
    End Select
Next n
要发现
“#N/A”
您需要查找单元格的值
CVErr(xlErrNA)

您可能还想切换
If
选择大小写

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

我删除了我的帖子,我想我们都做得太快了,如果单元格出错,运行时会出错。谢谢你,但是当我在if的位置插入case函数时,它会给我错误类型不匹配。还有一个简单的问题。我的单元格中的#N/A是由于以前的公式错误造成的,但在我查看的工作表中,它们被粘贴为值(单元格格式常规)。CvErr(xlErrNA)还会接收它们吗?我删除了我的帖子,我认为我们都太快了,如果单元格出错,运行时出错。谢谢你,但是当我插入if将是的case函数时,它给了我错误类型不匹配。还有一个简单的问题。我的单元格中的#N/A是由于以前的公式错误造成的,但在我查看的工作表中,它们被粘贴为值(单元格格式常规)。CvErr(xlErrNA)还会把它们捡起来吗?很抱歉这个愚蠢的问题,但是在我的代码中我应该把它叫做哪里?
如果storeval(n)=“IGNORE”或IsNa(storeval(n)),那么
很抱歉这个愚蠢的问题,但是在我的代码中我应该把它叫做哪里?
如果storeval(n)=“IGNORE”或IsNa(storeval(n)),那么