下面的粗体和斜体线继续向我返回“运行时错误'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
答案 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)