“参数不可选”VBA Excel SUB
我正在研究一些VBA代码,我正在做一个
参数不是可选的
错误。 我通过其他一些解决这个问题的答案,他们似乎没有回答我的问题。
代码被困在Sub Finding_number ()
的第一次迭代, Sub Finding_number ()
我困惑的。 我没有传递任何参数或从该子为什么错误?
我的代码 :
Sub Pedal_Actuations_per_hour() Dim counter As Integer Dim average_actuations As Single counter = 1 Do While IsEmpty(ActiveCell.Value) = False Finding_number average_actuations = (average_actuations + Pedal_actuations()) / counter counter = counter + 1 Loop Range("J2").Value = average_actuations End Sub Sub Finding_number() Dim index As Integer index = 1 Range("E2").Select Do While index = 1 If ActiveCell.Value = 121 Then index = 0 End If Range.Offset (1) Loop End Sub Function Pedal_actuations() As Integer Dim time_sum As Single Dim index As Integer index = 1 time_sum = 0 Do While time_sum < 1 If IsEmpty(ActiveCell.Value) = 0 Then date_number = Int(ActiveCell(, -2).Value) ActiveCell(, 6).Value = ActiveCell(, -2).Value - date_number ActiveCell(, 7).Value = Abs(ActiveCell(, 6).Value - ActiveCell(2, 6)) *24 Else index = 0 End If Pedal_actuations = Pedal_actuations + 1 time_sum = time_sum + ActiveCell(, 7).Value Loop End Function
最好避免使用Select
, ActiveCell
等等,而是使用被引用的对象作为Sheets
和Range
。
Sub Finding_number() Dim index As Integer index = 1 Dim Rng As Range Set Rng = Range("E2") Do While index = 1 If Rng.Value = 121 Then index = 0 End If Set Rng = Rng.Offset(1) Loop End Sub
下面的较短版本,会给你相同的结果:
Sub Finding_number() Dim Rng As Range Set Rng = Range("E2") Do While Rng.Value <> 121 Set Rng = Rng.Offset(1) Loop End Sub
很可能
Range.Offset (1)
你可能想把你的代码改成类似的东西
Sub Finding_number() Dim index As Integer index = 1 Dim rng As Range Set rng = Range("E2") Do While index = 1 If rng.Value = 121 Then index = 0 Set rng = rng.Offset(1, 0) Loop End Sub
那么,出了什么问题?
你想用你之前在代码中select的范围,然后移动到下一个Cell,等等。
你可能想要做的是
Selection.Offset(1, 0).Select
这抵消了我们当前所选单元格下的单元格,然后select它。
但是:更好的做法是只用定义和设置范围对象
Dim rng As Range Set rng = Range("E2")
然后在每个循环之后将其设置到下一个单元格
Set rng = rng.Offset(1, 0)
最后,为了进一步提高你的分数,考虑你是否真的需要你的index
variables。 没有它,这是一个镜头
Sub Finding_number() Dim rng As Range Set rng = Range("E2") Do While Not rng.Value = 121 Set rng = rng.Offset(1, 0) Loop End Sub