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: =

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


person user366121    schedule 06.06.2011    source источник


Ответы (3)


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

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 это не нужно и может только создать проблемы для вас в будущем.

person Simon Cowen    schedule 06.06.2011
comment
Хотя я определил другую подпрограмму: Sub EnterCellValue(cells As range) range(cells).Select ActiveCell.FormulaR1C1 = M End Sub и назвал ее так: EnterCellValue (N23:Q23) и не имел проблем. Это раздражает. - person user366121; 06.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
person Hari Seldon    schedule 06.06.2011

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

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

    Range(cells).Select

    ActiveCell.FormulaR1C1 = number

End Sub
person Ramakrishnan N    schedule 08.06.2015