エラー内容
VBAコンパイル時に、「値の取得のみ可能なプロパティに値を設定することはできません。」と表示される。
原因と解決方法
1つの原因と、その解決方法が考えられます。
原因1.読み取り専用のプロパティに値をセット
解説
読み取り専用のプロパティに対して、値をセットしようとすると起こるエラーです。
「読み取り専用」は、情報の取得はできるけど、上書きなど変更ができないってことです!
たとえば、SheetsのCountプロパティや、ThisWorkbookのPathプロパティやNameプロパティに値をセットしようとすると発生します。
(MsgBoxなどで値を取得することはできます。)
1 2 3 4 5 |
Sub ErrSample23_01() Sheets.Count = 8 'シート数を変更しようとしている End Sub |
1 2 3 4 5 |
Sub ErrSample23_02() ThisWorkbook.Path = "" 'ワークブックのパスを変更しようとしている End Sub |
解決方法
読み取り専用のプロパティなので、値をセットすること自体ができません。なので、そのエラーとなっているコードを削除するしかありません。
サンプルソースのSheets.Countであれば、現在のシート数が設定したいシート数より少ない場合は「シートの追加」、多い場合は「シートの削除」をするプログラムを書けば実現することができます。
または、他の読み取り専用でないプロパティと勘違いしていたのであれば、正しいプロパティに修正すればOKです。
オマケの話
読み取り専用のプロパティに値をセットする時、必ずこのエラーが発生するとは限りません。
たとえば、セルの行番号を取得するプロパティRowに値をセットしようとすると、エラーメッセージは、「引数の数が一致していません。または不正なプロパティを指定しています。」と表示されます。
1 2 3 4 5 |
Sub ErrSample23_02() Range("D5").Row = 8 'セルD5の行番号を変更しようとしている End Sub |
なので、エラーメッセージは参考程度に考えて、実際のエラー原因を探してください。
まあサンプルソースは、セルD5の行番号は5しかありえないのに、それを8に変更しようとしているってロジック的にも意味がわからないですよね・・・