2017-08-28 14 views
3

私はVBAの初心者ですので、以下は私が逃した基本的なステップになる可能性があります。 RangeメソッドのTextプロパティを編集しようとするとランタイムエラー424 - Rangeオブジェクトのテキストプロパティ

、私は、実行時エラー424、必要なオブジェクト

得続けます。

次のコードの場合:

Range("A1").Text = "ABC" 

これは範囲を設定する場合ですか?

+3

テキストはreadonlyプロパティで、 '.Text'の代わりに' .Value'を使用します。 –

+1

読み取り専用プロパティに書き込むことはできません。 https://msdn.microsoft.com/VBA/Excel-VBA/articles/range-text-property-excelただし、これは恐らく1004エラーを発生させるはずであり、424オブジェクトが必要ではありません。 –

+1

@DavidZemensただ1行のサブとして試してみましたが、424エラーを返しました。私も1004エラーを想定していました。 –

答えて

3

実行時エラー "424 Object Required"は説明可能であり、実際には理にかなっていると考えられます。

Range.Textは読み取り専用なので、割り当てできません。プロパティ

それとも

の不正使用は読み取り専用プロパティを割り当てることができません

:間違いなくそこのような、譲渡の試み文句コンパイル時エラーでなければなりませんしかし

Range.TextVariantなくを返すためVBAは割り当てが合法であるとみなし、Variant/Objectを返します。Objectには、のデフォルトプロパティが割り当てられています。

のでSheet1のコードビハインドでこのプロパティを割り当てる:

Public Property Get Foo() As String 
    Foo = "FOO" 
End Property 

ことが読み取り専用にプロパティにエラーを割り当てることはできませんコンパイル時です。エラーを必要

Public Property Get Foo() As Variant 
    Foo = "FOO" 
End Property 

実行時オブジェクトである - 合法的に割り当てるために、Property Get機能がオブジェクトを返すことが予想されるため:

しかし、これは。そして、そうでなければ、オブジェクトが必要ですは完全に意味を成しています。

この考えてみましょう:

Public Property Get Foo() As Range 
    Set Foo = ActiveCell 
End Property 

このプロパティは読み取り専用と同じように上記のいずれかのようである:あなたが合法的に再割り当てすることはできません参照Fooが戻っています。

しかし、これは完全に合法である:

Sheet1.Foo = 42 

そして、このため実際には、暗黙のコード:

Sheet1.Foo().Value = 42 

だから、割り当てが書き込み可能に代入され、デフォルトプロパティの戻り値のオブジェクト参照

この基準の割り当て:FooSetアクセサを公開していないため、

Set Sheet1.Foo = ActiveCell 

は、財産のコンパイル時無効使用です。

これは初心者にとっては本当に混乱しています。皮肉なことに、VB6/VBAの公開のデフォルトプロパティは、初心者の方にとって「簡単に」できると考えられていました。

関連する問題