将一个对象数组传递给Sub

时间:2015-03-26 10:22:30

标签: arrays object vbscript parameter-passing

我需要创建一个动态Sub。贝娄是我想要实现的示例代码。

'File1.vbs
Sub MainProcess()
   Dim arrElements(3)
   arrElements(0) = div1
   arrElements(1) = div2
   arrElements(2) = div3
   arrElements(3) = div4
   Call InitHtml(arrElements)
End Sub


'file2
Sub InitHtml(arrEl)
   Dim arr, count
   count = 1
   For each arr in arrEl
      arr.innerHtml = "number: " & count
      count = count + 1
   Next
End Sub

但问题是它在这里抛出错误arr.innerHtml = "number: " & count说该对象是必需的。

我应该怎么做才能实现目标并摆脱错误?

2 个答案:

答案 0 :(得分:0)

您通过数组For Each。 Arr与ArrElements(0),ArrElements(1),...,ArrElements(n)

相同

所以目前还不清楚你在做什么。

ArrElements正在传递给InitHTML。你在InitHTML中调用ArrElements ArrEL。因此For Each Arr in ArrEL表示第一次通过ArrArrEL(0)相同(与ArrElement(0)相同),然后第二次通过ArrEL(1)。在分配未经过类型化的变量时,Arr可能为null。所以你循环4次(如果你没有错误第一次)在一个不存在的东西上调用一个属性。

答案 1 :(得分:0)

实际上@MCND回答了我的问题。您可以在我的问题的第一条评论下找到@ MCND的答案。他说,如果它是一个对象,应该有一个设置前缀。我可能错了,但它给了我一个想法......

解释一下。

objDiv1,objDiv2,...是HTML中元素的id。 我做的是这个。

'File1.vbs
    Sub MainProcess()
       Dim arrElements(5)
       set arrElements(0) = objDiv1
       set arrElements(1) = objDiv2
       set arrElements(2) = objDiv3
       set arrElements(3) = objDiv4
       set arrElements(4) = objDiv5
       Call InitHtml(arrElements)
    End Sub

有效!。

但我也通过使用Array找到了解决方案。这是一个示例代码

'File1.vbs
Sub MainProcess()
   Dim arrElements
   arrElements = Array(objDiv1,objDiv2,objDiv3,objDiv4,objDiv5)
   Call InitHtml(arrElements)
End Sub


'file2
Sub InitHtml(arrEl)
   Dim count
   count = 1
   For each obj in arrEl
      obj.innerHtml = "number: " & count
      count = count + 1
   Next
End Sub

我希望这可以帮助那些人。

欢呼......