“参数不可选”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 

最好避免使用SelectActiveCell等等,而是使用被引用的对象作为SheetsRange

 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) 

最后,为了进一步提高你的分数,考虑你是否真的需要你的indexvariables。 没有它,这是一个镜头

 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