2017-10-12 59 views
2

下面的粗体和斜体行继续回到我的“运行时错误'424':Object Required。我正在作为自学课程,我已经检查了三倍,以确保我正确地输入代码,并且仍然返回这个错误。我试着在这里查看这个错误的其他例子,但是没有一个对这个实例有帮助,因为我不知道代码不够好呢。VBA错误代码对象要求---有三重检查,但仍然不起作用

谢谢!

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

对不起,与*** .... ***的界限。我没有意识到代码不会让我在这里发布为粗体或斜体。...... – EricHH11

+2

'.Text'是一个只读属性。你想'.Value' –

+0

你可以添加注释( - )到你想要我们看的代码部分 – kazzi

回答

4

你只需要改变.Text.Value

+0

非常感谢,这改正了我的问题! – EricHH11

+0

或者,只需* drop *'.Text',并让'Range'对象的* default成员*被赋值,这恰好指向...它的'Value'。 (我个人更喜欢明确提及'.Value') –

0

也许

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

同为

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

Changing .Text for .Value将修复它,但如果你想知道“所需的对象”怎么连远程有意义的,因为一个错误信息,这里的原因。

你知道隐含赋值语法:

foo.Bar = 42 

明确赋值语法仍然支持,但陈旧/过时:

Let foo.Bar = 42 

这种分配调用Property Letfoo对象的Bar属性的访问器,其外观可能如下所示:

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,完全相同的方式 - 两个是一模一样 ..除了后者含蓄调用默认成员,而前者明确这样做。

默认成员被隐藏的成员确定属性 ,你只能看到如果导出类模块,并在 文本编辑器打开:

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抱怨对象需要

+1

我回答了这个问题,这对我仍然很有帮助。所以谢谢花时间来解释。 – jcarroll

相关问题