VBA错误代码对象必需---已检查三重但仍无法正常工作

时间:2017-10-12 19:23:43

标签: excel vba excel-vba runtime-error

下面的粗体和斜体线继续向我返回“运行时错误'244':对象必需。我正在研究这个作为自学课程的一部分,我已经检查了三次以确保我进入正确的代码,我仍然返回此错误。我尝试在这里查看此错误的其他示例,但没有一个对此实例有帮助,因为我还不太了解代码。

谢谢!

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

3 个答案:

答案 0 :(得分:4)

您只需将.Text更改为.Value

即可

答案 1 :(得分:3)

Changing .Text for .Value会修复它,但万一你想知道"对象是如何需要的"甚至远程作为错误信息都有意义,这就是原因。

您知道隐式值赋值的语法:

foo.Bar = 42

仍然支持显式值赋值语法,但过时/弃用:

Let foo.Bar = 42

此赋值调用Property Let对象的Bar属性的foo访问器,其外观如下:

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访问者,所以:

someRange.Text = "foo"

不合法,因为Text属性不会公开Property Let访问者。

那么对象需要处理什么?到达目的地。

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

这意味着你是否这样做:

foo = myCollection.Item(12)

或那:

foo = myCollection(12)

你得到完全相同的foo,完全相同 - 两者完全相同 ..除了后者隐式地调用默认成员,前者明确

  

课程' 默认成员由隐藏的成员属性决定   您只能看到导出类模块并在a中打开它   文本编辑器:

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

类中只有1个成员可以是默认成员。

所以错误信息的含义是,当它看到这个时:

foo.Bar = 42

并且知道Bar是一个只读属性,只显示Property Get访问者,然后这个代码合法的唯一方法是,如果Bar返回一个对象,有一个默认成员,可以指定该成员获取该值。

由于Range.Text会返回String而不是Object,因此VBA会抱怨需要一个对象

答案 2 :(得分:0)

也许

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

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