Подтвердить что ты не робот

Excel vba вызов подпрограммы с переменными

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

Sub EnterCellValueMonthNumber(cells As range, number As Integer)

range(cells).Select
ActiveCell.FormulaR1C1 = number

End Sub

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

EnterCellValueMonthNumber ("N23:Q23",1)

Появляется следующее сообщение об ошибке:

Compile error Expected: =

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

4b9b3361

Ответ 1

Вы бы назвали sub как

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

У вас на самом деле есть 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

Ответ 3

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

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

    Range(cells).Select

    ActiveCell.FormulaR1C1 = number

End Sub