Excel VBA вызов подпрограммы с переменными - PullRequest
30 голосов
/ 06 июня 2011

Я определил следующую подпрограмму:

Sub EnterCellValueMonthNumber(cells As range, number As Integer)

range(cells).Select
ActiveCell.FormulaR1C1 = number

End Sub

Когда я вызываю подпрограмму следующим образом:

EnterCellValueMonthNumber ("N23:Q23",1)

Я получаю следующее сообщение об ошибке:

Compile error Expected: =

Понятия не имею, почему я получаю это сообщение. Кто-нибудь знает, чего мне не хватает?

Ответы [ 3 ]

48 голосов
/ 06 июня 2011

Вы бы назвали подпрограмму как

EnterCellValueMonthNumber "N23:Q23", 1

Без скобок.Или

Call EnterCellValueMonthNumber("N23:Q23", 1)

в скобках и Call перед ним.

Кроме того, ваша Sub ожидает объект Range в качестве первого аргумента, и вы предоставляете строку;Вы должны изменить сигнатуру сабвуфера на:

Sub EnterCellValueMonthNumber(cells As String, number As Integer)

Кроме того, я не уверен относительно того, что вы пытаетесь достичь с помощью этого кода, поскольку он будет устанавливать только верхнюю левую ячейку диапазона в1. Было бы что-то вроде

Range(cells).Value = number
' Or, if you're going to be passing in something more complex later...
Range(cells).FormulaR1C1 = number

более подходящим?

Я бы также очень осторожно использовал Range("...") без указания того, на какой лист вы ссылаетесь.Это будет действовать в зависимости от того, какой лист является активным, и, таким образом, может вызвать неожиданные проблемы, почти всегда предпочитая SheetX.Range("...").Точно так же для использования .Select это не нужно, и может вызвать проблемы только у вас в будущем.

2 голосов
/ 06 июня 2011

У вас на самом деле есть 2 проблемы.

Сначала актуальный ответ на ваш вопрос. Вы должны сказать:

Call EnterCellValueMonthNumber("N23:Q23",1)

Но это все равно не сработает, если вы запустите его, поскольку вы установили cells типа range ... установите его как тип string, используя вместо этого:

Sub EnterCellValueMonthNumber(cells As String, number As Integer)
    Range(cells).Select
    ActiveCell.FormulaR1C1 = number
End Sub
0 голосов
/ 08 июня 2015

Попробуйте следующий код:

Sub EnterCellValueMonthNumber(ByVal cells As String, number As Integer)

    Range(cells).Select

    ActiveCell.FormulaR1C1 = number

End Sub
...