VBA错误代码对象要求 – 有三重检查,但仍然无法正常工作

下面的粗体和斜体行继续回到我的“运行时错误'424':Object Required。我正在作为一个自学类的一部分,我已经检查了三倍,以确保我正确地input代码并且仍然返回这个错误,我试着在这里查看这个错误的其他例子,但是没有一个对这个实例有帮助,因为我还不知道代码。

谢谢!

Sub FirstArray() Dim Fruit(2) As String Fruit(0) = "Apple" Fruit(1) = "Banana" Fruit(2) = "Cherry" ***Range("A1").Text = "First Fruit: " & Fruit(1)*** Dim Veg(1 To 3) As String Veg(1) = "Artichoke" Veg(2) = "Broccoli" Veg(3) = "Cabbage" ***Range("B1").Text = "First Veg:" & Veg(1)*** Dim Flower() As String ReDim Flower(1 To 3) Flower(1) = "Azalea" Flower(2) = "Buttercup" Flower(3) = "Crocus" ***Range("C1").Text = "Final Flower:" & Flower(3)*** End Sub 

您只需将.Text更改为.Value

更改.Text .Value会修复它,但是如果您想知道“Object required”作为错误消息是否有意义,那么原因如下。

您知道隐式赋值的语法:

 foo.Bar = 42 

显式值分配语法仍然受支持,但已过时/不推荐使用:

 Let foo.Bar = 42 

该赋值调用foo对象的Bar属性的Property Let访问器,该属性可能如下所示:

 Public Property Let Bar(ByVal value As Long) internalBar = value End Property Public Property Get Bar() as Long Bar = internalBar End Property 

Range.Text的情况下,该属性可能如下所示:

 Public Property Get Text() As String Text = GetStringRepresentationOfValue End Property 

注意没有Property Let accessor,所以这个:

 someRange.Text = "foo" 

不合法,因为Text属性不公开一个Property Let访问器。

那么对象需要处理什么? 到达它。

但首先你需要知道什么是默认成员 。 你看每个类模块都可以定义一个“默认成员”。 按照惯例,对于成员通常是Item属性的集合。

这意味着你是否这样做:

 foo = myCollection.Item(12) 

或者那个:

 foo = myCollection(12) 

你得到完全一样的foo ,完全一样的方式 – 两者是完全一样的 ,除了后者隐式调用默认成员 ,前者明确这样做。

类的默认成员由隐藏成员属性决定,只有在导出类模块并在文本编辑器中打开它时才能看到该成员属性。

 Public Property Get Item(ByVal Index As Long) As Variant Attribute Foo.VB_UserMemId = 0 Item = internalCollection(Index) End Property 

只有一个class级的成员可以是默认的。

那么错误信息是什么,当它看到这个:

 foo.Bar = 42 

并且知道Bar是只显示Property Get访问器的只读属性,那么这个代码合法的唯一方法就是如果Bar返回一个具有可以被赋值的默认成员的对象。

由于Range.Text返回一个String而不是一个Object ,VBA抱怨对象是必需的

也许

 Range("B1") = "First Veg:" & Veg(1) 

同样的

 Range("C1") = "Final Flower:" & Flower(3)