0

我有一个数组设置

Dim managerList(1 To 50, 1 To 100) As String

我想要做的是设置行中的第一个、第二个和第三个元素

managerList(index,1) = tempManagerName
managerList(index,2) = tempIdeaNumber
managerList(index,3) = 1    

但是当我尝试这样做时会出错,说未设置对象变量。我将索引维护为整数,并且该值对应于单个管理器,但我似乎无法手动设置第三个元素。第一个和第二个元素设置正确。

另一方面,我有以下代码可以设置元素,

For x=1 To 50
  If StrConv(tempManagerName,3) = managerList(x,1) Then
    found = x 
      For y=3 to 100
        If managerList(x,y) = "" Then                                                                       
          managerList(x,y) = tempIdeaNumber                                                                                             
            Exit for
    End If
      Next

     Exit For
  End If
Next

它旋转穿过数组(横向)试图找到一个空元素。理想情况下,我想将 y 变量所在的元素的索引设置为行中的第三个元素,以计算行中有多少想法。

保持这样计数的最佳方法是什么?知道为什么我在尝试手动设置元素时收到 Object variable not set 错误吗?

4

1 回答 1

1

object variable not set意味着您正在尝试调用方法或访问未初始化对象的属性。我在您发布的代码片段中没有看到类似的内容,您确定错误发生在这些行中吗?

查明错误的一个好方法是在错误消息中包含模块和行号。在您的子例程周围添加它以获得更详细的消息:

Sub Initialize
    On Error Goto errorthrower  
    //
    // your code goes here...
    //
    Exit sub
ErrorThrower:
    Error Err, Str$(Err) & " " & Error & Chr(13) + "Module: " & Cstr( Getthreadinfo(1) ) & ", Line: " & Cstr( Erl )
End sub

(我最初是在Ferdy Christants博客上发现的)

目前尚不清楚您要在这里解决什么问题,但看起来您有 1..50 个“经理”可以有 1..100 个“想法”?我会class为经理做一个:

Class manager
    Private managername As String
    Private ideas(1 To 100) As String

    Sub new(managername As String)
            Me.managername=managername
    End Sub

    // whatever methods you need....

End Class

然后,我会使用这些对象的列表来跟踪它们:

    Dim managerlist List As manager

    Dim key As String
    key = Strconv(tempmanagername,3)

    if not iselement(managerlist(key)) then 
        set managerlist(key) = new manager(key)
    end if

    Dim currentmanager As manager
    Set currentmanager = managerlist(key)

这只是一个让您入门的示例,您必须对其进行调整以解决您的实际问题。

于 2010-05-12T07:18:40.800 回答