Мне удалось запустить ваш код без ошибок, поэтому, как сказал @Tim Williams, было бы полезно описать получаемую вами ошибку.
Я обнаружил одну нефатальную ошибку в этой строке:
MsgBox (Cells(HRCounter & 1)
Вы, наверное, имели в виду Cells(HRCounter, 1)
. Опечатка не вызывает программной ошибки, но строка не может захватить то, что вы намеревались записать.
Помимо опечатки, код, похоже, делает то, что вы намеревались сделать. Однако, чтобы ответить на ваш вопрос более прямо, вы, безусловно, можете работать со ссылками на переменные ячейки. В базовом шаблоне c просто используйте SomeWorksheet.Cells(MyVar,1).Value
, где MyVar - это переменная, содержащая номер вашей строки.
Чтобы писать эффективный код VBA, научитесь по возможности избегать Activate
и Select
. Думайте о них как о коде, имитирующем действия человека-пользователя, что редко требуется. Вместо этого работайте напрямую с объектами Excel и их свойствами. Ваш код можно изменить следующим образом, что также сделает использование ссылки на строку переменной более заметной:
Sub HomeRunCounterFNCTN()
Dim HomeRuns(27) As Integer, ReadRow As Integer
Dim HRCounter As Variant
With Worksheets("Baseball")
For HRCounter = 0 To 27
ReadRow = HRCounter + 3
HomeRuns(HRCounter) = .Cells(ReadRow, 12).Value
If (HomeRuns(HRCounter) >= 45) Then MsgBox HomeRuns(HRCounter)
Next HRCounter
End With
End Sub