Поскольку вы имеете дело со строками, я бы рекомендовал использовать Long
вместо Integer
. Вы получаете эту ошибку, потому что в Private Sub buttonclick(nr As Integer)
она ожидает Integer
, и вы передаете Variant
Изменить Private Sub buttonclick(nr As Integer)
на Private Sub buttonclick(nr As Long)
и используйте это
Private Sub distract2()
Dim nr As Long
Dim nVal As Long
nr = nextrow
If nr = 2 Then Exit Sub
nVal = nr - 1
buttonclick nVal
End Sub
Однако, когда я удаляю -1 после nr, VBA выдает ошибку ByRef.
Два вопроса:
кто-нибудь знает, почему это произошло?
Лучше тускнеть как Integer или нет?
Когда вы сохраняете -1
, оно вычитает значение на 1
, и результат имеет тип Integer
, и, следовательно, вы не получите ошибку. Если бы nr
было 104857
, это дало бы ошибку. Интересное чтение
Да, лучше сменить ваши переменные на соответствующий тип данных. Однако в вашем случае это должно быть Long
вместо Integer
, как указано выше
Ваш полный код можно записать как
Option Explicit
Private Sub distract2()
Dim nr As Long
Dim nVal As Long
nr = nextrow
If nr = 2 Then Exit Sub
nVal = nr - 1
buttonclick nVal
End Sub
Function nextrow() As Long
With ActiveSheet
nextrow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
End Function
Private Sub buttonclick(nr As Long)
With ActiveSheet
.Cells(nr, 2) = Now
If nr = 2 Then Exit Sub
.Cells(nr - 1, 3) = .Cells(nr, 2) - .Cells(nr - 1, 2)
End With
End Sub