2017-03-21 18 views
2

我能夠循環播放數字,但使用文本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 

該如何實現?

回答

4

您可以循環這樣的,你沒有任何錯誤,當談到VBA語法。唯一的問題是,在表達:當Cells(i, 1).Value是不能轉換爲數字

Cells(i, 1).Value + 1

將引發運行時錯誤。這很簡單,你有一個類型不匹配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 
+0

謝謝A.S.H我決定離開去看看與文本有關的錯誤。所以我能夠看到你的方法,但我決定刪除和複製結尾部分,以幫助我實現我所需要的。您的代碼+&「 - 」&Cells(2,2)。值 – user7568042

+2

好點!我希望你不介意我也補充說 - 覺得值得保留我的答案也是值得的(雖然你+1!) – CallumDA

+2

@CallumDA是的,我認爲你的其他言論也很有用。 –

3

@ A.S.H在這裏發現了真正的錯誤,但是還有一些其他的事情需要注意:

  1. 當通過列循環/行這樣的,它通常最好使用For Each循環。
  2. 自己使用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 
+0

謝謝CallumDA,我沒有,因爲我通常會嘗試你的代碼當啓動插入>模塊。但是我遇到了一些錯誤:Set。我確實研究了這是否是一個可變問題(通過查看其他帖子),並注意到您進行了更改。我可以證實它也是一個很好的解決方案。代碼很好。 – user7568042