Использование переменных в качестве параметров функции в VBA, в частности, функции Cells () - PullRequest
0 голосов
/ 12 июля 2020

Я работаю с циклами и массивами в VBA.

Я смотрел кучу видео в Интернете, и ни один из инструкторов не просмотрел это.

В Python вы можете динамически получить доступ к значениям из массива, установив индекс моей переменной:

array1 = [1,2,3,4,5]
b = 0

while(b < len(array1)):
  print(array1[b])
  b = b + 1

Вы можете сделать что-то подобное с возможностью pandas индексирования ilo c .... таким образом я могу изменить переменную _currentRow7 на все, что я хочу .... Мне просто нужно сделать _currentRow7 = _currentrow7+1

Array.iloc[_currentRow7, 11])

С функцией VBA Cells я получаю сообщение об ошибке. По сути, я хочу динамически получать доступ к значениям из Excel. Например - Cells (variable, 1) .... затем, когда переменная изменяется, я получаю доступ к значению в следующей ячейке.

Sub HomeRunCounterFNCTN()

Dim HomeRuns(27) As Integer
Dim HRCounter As Variant

Worksheets("Baseball").Activate
Range("L3").Activate
For HRCounter = 0 To 27

    HomeRuns(HRCounter) = ActiveCell.Offset(HRCounter, 0).Value
    If (HomeRuns(HRCounter) >= 45) Then MsgBox (HomeRuns(HRCounter))
    MsgBox (Cells(HRCounter & 1))

Next HRCounter

End Sub

По сути, мне бы хотелось, чтобы MsgBox (Cells (HRCounter & 1 )) для динамического обновления при изменении переменной HRCounter.

1 Ответ

0 голосов
/ 12 июля 2020

Мне удалось запустить ваш код без ошибок, поэтому, как сказал @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...