Vba 当你试着读名字的时候?从excel到字符串的值给出了类型不匹配错误

Vba 当你试着读名字的时候?从excel到字符串的值给出了类型不匹配错误,vba,excel,Vba,Excel,我有一个宏,它从excel中读取描述字符串,并找出数据中是否存在特定字符串 有时输入文件可能包含#NAME?在牢房里。当宏到达该单元格时,它只在下一行给出错误类型不匹配运行时错误13 我只想忽略这一行,继续下一行。我应该如何进行验证(如果)。我在循环中使用“do-loop-until”。descriptionString是一个字符串变量 descriptionString = currentwrkbk.Worksheets(1).Cells(i, 1).Value 使用IsError,类似这样

我有一个宏,它从excel中读取描述字符串,并找出数据中是否存在特定字符串

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

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

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

使用IsError,类似这样的东西


如果iserror(currentwrkbk.工作表(1).Cells(i,1).Value))..
@Nathan_Sav已经给了您一个选项。还有一个

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.

为什么不使用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

您可能希望仅使用
Range
object的方法遍历有效单元格,该方法允许您过滤返回“与指定类型和值匹配的所有单元格”范围的范围

比如说

myRange.SpecialCells(XlCellType.xlCellTypeConstants, xlTextValues)
将仅返回包含常量(即不是由公式产生的)文本值的
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
选项显式
副标题()
暗淡单元格作为范围
将currentwrkbk设置为工作簿
Dim descriptionString作为字符串
使用currentwrkbk.工作表(1)

对于.Range(“A1”,.Cells(.Rows.Count,1).End(xlUp)).SpecialCells(XlCellType.xlcelltypectants,xlTextValues)“++中的每个单元格,这是最简单的方法:)哇,已经20年没有看到SpecialCells了。很好的小功能。谢谢你的帮助。对于这个问题,我采用了内森的方法。但我想你的回答将解决我面临的另一个问题。