エラー内容
VBAコンパイル時に、「定数には値を代入できません。」と表示される。
原因と解決方法
2つの原因と、その解決方法が考えられます。
原因1.定数として定義している
解説
Constを使って定数として定義した変数に、コードの途中で新しい値を代入しようとすると、このエラーが発生します。
定数は最初に値を設定したら、後から値を変更できません。
1 2 3 4 5 6 7 |
Sub ErrSample19_01() Const lngMax As Long = 1000 lngMax = 500 End Sub |
解決方法
定数ではなく、普通の変数として定義します。
サンプルソースの場合は、ConstをDimに修正します。
1 2 3 4 5 6 7 |
Sub ErrSample19_02() Dim lngMax As Long lngMax = 500 End Sub |
原因2.VBAの組み込み定数に代入している
解説
VBAであらかじめ用意されている定数(組み込み定数)に、値を代入しようとすると、このエラーが発生します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub ErrSample19_03() If Cells(1, 1) <= 30 Then '30点以下は、文字色を赤(255) vbBlack = 255 End If 'セルの文字色変更 Cells(1, 1).Font.Color = vbBlack End Sub |
サンプルソースの場合、vbBlackには黒を表す0が格納されています。
この値は変更することができません。
解決方法
組み込み定数へ値を代入するコード事態を削除します。
または、別で変数を定義し、その変数に値を代入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub ErrSample19_04() Dim lngFontColor As Long 'セルの文字色 If Cells(1, 1) <= 30 Then '30点以下は、文字色を赤(255) lngPrintColor = 255 Else '30点以上は、文字色を黒 lngPrintColor = 0 End If 'セルの文字色を変更 Cells(1, 1).Font.Color = lngPrintColor End Sub |
lngPrintColorに値を代入する時は、数値で設定するより、定数vbRed、vbBlackを使った方が可読性もあがります。
今回はエラーを理解しやすいように、サンプルソースでは数値を代入しています。