Vba 当你试着读名字的时候?从excel到字符串的值给出了类型不匹配错误
我有一个宏,它从excel中读取描述字符串,并找出数据中是否存在特定字符串 有时输入文件可能包含#NAME?在牢房里。当宏到达该单元格时,它只在下一行给出错误类型不匹配运行时错误13 我只想忽略这一行,继续下一行。我应该如何进行验证(如果)。我在循环中使用“do-loop-until”。descriptionString是一个字符串变量Vba 当你试着读名字的时候?从excel到字符串的值给出了类型不匹配错误,vba,excel,Vba,Excel,我有一个宏,它从excel中读取描述字符串,并找出数据中是否存在特定字符串 有时输入文件可能包含#NAME?在牢房里。当宏到达该单元格时,它只在下一行给出错误类型不匹配运行时错误13 我只想忽略这一行,继续下一行。我应该如何进行验证(如果)。我在循环中使用“do-loop-until”。descriptionString是一个字符串变量 descriptionString = currentwrkbk.Worksheets(1).Cells(i, 1).Value 使用IsError,类似这样
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了。很好的小功能。谢谢你的帮助。对于这个问题,我采用了内森的方法。但我想你的回答将解决我面临的另一个问题。