我可以使用数字循环,但是使用文本时Do While不会循环。
Dim i As Integer
i = 1
Do While Cells(i, 1).Value <> ""
Cells(i, 2).Value = Cells(i, 1).Value + 1
i = i + 1
Loop
我该如何实现?
答案 0 :(得分:4)
您可以像这样循环,并且在 VBA语法方面没有任何错误。唯一的问题是表达式:
当
Cells(i, 1).Value + 1
Cells(i, 1).Value
无法转换为数字时,将引发运行时错误。这很简单,当Cells(i, 1).Value
是像“abcd”这样的字符串时,你有类型不匹配,你不能将该变量转换为数字以便向其添加1
在这种情况下,它不是宏代码的错误,而是数据的错误。
要处理异构数据,您可以检查,如果值是数字,然后再将其作为数字操作,如下所示:
Do While Cells(i, 1).Value <> ""
If IsNumeric(Cells(i, 1).value) then Cells(i, 2).Value = Cells(i, 1).Value + 1
' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
i = i + 1
Loop
答案 1 :(得分:3)
@ A.S.H在这里发现了真正的错误,但还有一些需要注意的事项:
For Each
循环。Cells
会隐式引用ActiveWorksheet
。最好明确指出您所指的细胞,例如: ThisWorkbook.Worksheets("Sheet1").Cells
试试这个:
Sub Test()
Dim rng As Range, r As Range
Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1:A100") 'range to loop through
For Each r In rng
If r.Value <> vbNullString and IsNumeric(r.value) Then
r.Offset(0, 1).Value = r.Value + 1
End If
Next r
End Sub