VBA – 循环不会每次在ID列中增加一个
在我的VBA代码中,我试图做到以下几点:
- 将活动单元格设置为C11
- 将数字1添加到一个
id
- 提示用户input名称,然后在右侧的单元格中input该名称
- 转到下一行并重复。
然而,input的数字是另一个,而不是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)很less(我敢说,从不)需要使用。在Excel VBA中select,您可以直接访问对象的属性而不select实际的对象。 这通常被认为是不好的做法。
2) id = mycell.Select
不是一个有效的语句,.Select方法只是把焦点设置到一个不用于返回值的对象上。
3) ActiveCell.Value = 1
< – 就你的问题而言,这是你错误的地方
4)你的代码在每个循环中增加了id
的值,但实际上并没有将这个值用于任何东西 – 另一个暗示为什么它不像你期望的那样工作。
5)尝试并在代码中使用缩进,这将使您(和其他人)更容易遵循代码的逻辑,并帮助确保已closures所有“块”语句。
试试这个代码:
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
这会访问Range
对象的.Value
方法,而不用实际select或激活它,所以我们直接跳过几行代码。 其次 – 我已经使用了一个Array
来分配值,这样我们就可以在一行代码中完成所有的工作 – 这不是什么突破性的,你不会看到任何速度/性能的差异,但是希望有一些东西给你看并可能在将来为您自己的使用而操纵。