在尝试阅读#NAME时?从excel到字符串的值会给出类型不匹配错误

时间:2016-08-08 12:42:17

标签: excel vba excel-vba

我有一个从excel读取描述字符串的宏,并发现数据中是否存在特定的字符串。

有时输入文件可能包含像#NAME这样的值?在牢房里。当宏到达此单元格时,它只是在下一行中给出错误类型不匹配运行时错误13。

我只是想忽略这一行并继续下一行。我该如何进行验证(如果)。我正在使用'do-loop until'来循环。 descriptionString是一个字符串变量。

descriptionString = currentwrkbk.Worksheets(1).Cells(i, 1).Value

4 个答案:

答案 0 :(得分:5)

使用IsError,类似

if iserror(currentwrkbk.Worksheets(1).Cells(i, 1).Value))....

答案 1 :(得分:2)

@Nathan_Sav有alredy给你一个选项。这是另一个。

If Not CVErr(currentwrkbk.Worksheets(1).Cells(i, 1).Value) = CVErr("2029") Then _
descriptionString = currentwrkbk.Worksheets(1).Cells(i, 1).Value

以下是列表的其余部分

2007 returns a #DIV/0! error.
2042 returns a #N/A error.
2029 returns a #NAME? error.
2000 returns a #NULL! error.
2036 returns a #NUM! error.
2023 returns a #REF! error.
2015 returns a #VALUE! error.

答案 2 :(得分:2)

您可能只想使用Range myRange.SpecialCells(XlCellType.xlCellTypeConstants, xlTextValues) 对象的SpecialCells方法迭代有效单元格,这样您就可以使用“所有符合指定类型的单元格来过滤返回范围的范围和价值“

例如

myRange

将返回Option Explicit Sub main() Dim cell As Range Dim currentwrkbk As Workbook Dim descriptionString As String With currentwrkbk.Worksheets(1) For Each cell In .Range("A1", .Cells(.Rows.Count, 1).End(xlUp)).SpecialCells(XlCellType.xlCellTypeConstants, xlTextValues) '<--| loop through text values of column "A" only descriptionString = cell.value Next cell End With End Sub 个包含常量(即不是公式的结果)文本值的单元格

以便为您的目的提供可能的代码段如下:

$ echo "cat //root/artifact/b" |  xmllint --shell BuildResult.xml | sed '/^\/ >/d' | sed 's/<[^>]*.//g' | tr -d '\n' | awk -F"-------" '{print $2}'
5.tar

答案 3 :(得分:0)

为什么不使用IsError和Clng转换为错误代码并测试

Option Explicit

Sub Test()


    Dim rng As Excel.Range
    Set rng = ThisWorkbook.Worksheets(1).Range("i13")
    '* i creat a #NAME here
    rng.Formula = "=namenoexist"

    Debug.Assert IsHashName(rng)


End Sub


Function IsHashName(ByVal rng As Excel.Range) As Boolean
    Debug.Assert Not rng Is Nothing
    Debug.Assert rng.Rows.Count = 1
    Debug.Assert rng.Columns.Count = 1

    Dim v As Variant
    v = rng.Value2
    '*So test for IsError and then cast to a long and test for 2029 to see if i
    If IsError(v) Then
        If CLng(v) = 2029 Then
            IsHashName = True
        End If
    End If
End Function