web-dev-qa-db-ja.com

変数を持つ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: =

このメッセージが表示される理由がわかりません。誰かが私が何を失っているのか知っていますか?

30
user366121

サブルーチンを次のように呼び出します

_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_を使用する場合、これは不要であり、将来的には問題を引き起こす可能性があります。

49
Simon Cowen

実際には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
2
Hari Seldon

次のコードを試してください:

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

    Range(cells).Select

    ActiveCell.FormulaR1C1 = number

End Sub
0
Ramakrishnan N