在我的VBA代码中,我尝试执行以下操作:
id
但是,输入的数字是另一个,而不是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
答案 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
来分配值,以便我们可以在一行代码中完成所有操作 - 这不是突破性的,你不会看到速度/性能的任何差异但是希望你能够看到并可能在将来操纵自己的用途。