VBA - 循环在ID列中不会每次增加1

时间:2014-12-28 11:16:53

标签: excel vba loops

在我的VBA代码中,我尝试执行以下操作:

  1. 将活动单元格设置为C11
  2. 将数字1添加到id
  3. 提示用户输入名称并在右侧单元格中输入
  4. 转到下一行&重复。
  5. 但是,输入的数字是另一个,而不是2,3,4 ....

    相反,我得到以下内容:

    1    Name 1
    1    Name 2
    1    Name 3
    

    我希望:

    1    Name 1
    2    Name 2
    3    Name 3
    

    这是代码,我错过了什么?

    Sub AddToSheet()
    Dim id As Integer
    Dim name As String
    
    Worksheets("sheet1").Activate
    ActiveCell.Range("C11").Select
    For Each mycell In Range("C11:C20")
    
    id = mycell.Select
    ActiveCell.Value = 1
    id = id + 1
    
    name = mycell.Offset(0, 1).Select
    name = InputBox("what is the film?")
    ActiveCell.Value = name
    Next mycell
    End Sub
    

1 个答案:

答案 0 :(得分:1)

这不是你错过的,它是你错了什么 - 一些指示:

1)很少(我敢说,永远不需要)在Excel VBA中使用.Select,您可以直接访问对象的属性而无需选择实际对象。这通常被认为是不好的做法。

2)id = mycell.Select不是有效语句,.Select方法只是将焦点设置为不用于返回值的对象。

3)ActiveCell.Value = 1< - 就你的问题而言,这是你出错的地方

4)你的代码会在每个循环中增加id的值,但你实际上并没有将这个值用于任何东西 - 另一个暗示它为什么没有按预期工作。

5)尝试使用代码缩进,这将使您(和其他人)更容易遵循代码的逻辑并帮助确保您已关闭所有'阻止'语句。

请尝试使用此代码:

Sub AddToSheet()

Dim i As Integer

For i = 11 To 20
   Range("C" & i & ":D" & i).Value = Array(i - 10, InputBox("What is the film?"))
Next i

End Sub

这会访问.Value对象的Range方法而不实际选择或激活它,因此我们会立即跳过几行代码。其次 - 我使用Array来分配值,以便我们可以在一行代码中完成所有操作 - 这不是突破性的,你不会看到速度/性能的任何差异但是希望你能够看到并可能在将来操纵自己的用途。