2017-08-28 101 views
3

我是VBA初學者,所以下面可能是我錯過的基本步驟。運行時錯誤424 - 範圍對象中的文本屬性

當您嘗試編輯Range方法的Text屬性,我不斷收到

運行時錯誤424,所需的對象。

例如,對於以下代碼:

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

這是設置範圍的情況嗎?

+3

文本是隻讀屬性,使用'.Value'而不是'.Text'。 –

+1

無法寫入只讀屬性。 https://msdn.microsoft.com/VBA/Excel-VBA/articles/range-text-property-excel但是,這可能應該引發1004錯誤,而不是424所需的對象。 –

+1

@DavidZemens剛剛嘗試過它作爲一個單行的子,它返回了424錯誤。我也會假設1004錯誤。 –

回答

3

運行時錯誤「424對象要求」是可以解釋的,並且相信與否,實際上是有道理的。

Range.Text是隻讀的,所以你不能指定它;按理說應該有一個編譯時錯誤抱怨分配的嘗試,如:

使用無效的財產

或者

無法分配給只讀屬性

但是,因爲Range.Text返回Variant而不是String,並且該屬性是隻讀的,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 

所以分配分配到的可寫入,默認屬性返回的對象引用。

而這個參考分配:

Set Sheet1.Foo = ActiveCell 

是一個編譯時間無效使用的財產,因爲Foo不公開Set訪問。

對於初學者來說,這確實很讓人困惑。具有諷刺意味的是,VB6/VBA暴露默認屬性應該爲初學者「變得更容易」。