2016-11-23 34 views
0

我正在做一个for循环,需要使用变体数组类型,但我得到错误13(类型不匹配)。我希望k的第一个值是3,4,5,依此类推(根据下面的变量检查)。我只是不知道如何让vba读取数组。我试过使用tsperiodo(i)(j),但它也没有奏效。在循环中使用变体数组(错误13类型不匹配)

这里是变量数组:

ReDim ocup(1 To numDis, 1 To numSalas) As Variant 

For i = 1 To numDis 
    For j = 1 To numSalas 
     If capacidadeSalas(j) - alunos(i) >= 0 Then 
     ocup(i, j) = 1 
     End If 
    Next 
Next  

ReDim tsPeriodo(1 To numDis) As Variant 

For i = 1 To numDis 
    tsPeriodo(i) = Application.Transpose(Evaluate("=ROW(" & tsInicio(i) & ":" & tsFim(i) & ")")) 
Next 

和这里就是我想使用它:

For i = 1 To ocup(numDis, 1) 
    For j = 1 To ocup(1, numSalas) 
     For k = 1 To tsPeriodo(i) 'this is where im getting error 13 
      variable = "x_" & i & "_" & j & "_" & k 
     Next 
    Next 
Next 

variable inspection for the tsperiodo(i)

+0

您使用的是什么版本的Excel?法语? 'For i = 1 To ocup(numDis,1)'suppost是什么? –

+0

我在葡萄牙语中使用excel 2016! “ocup”也是一个variat数组,但是这个工作正常,我将编辑主帖插入代码。 – jf8769

+0

你永远不会显示'tsInicio(i)'和'tsFim(i)'是如何实例化的。 'Evaluate(“= ROW(”&tsInicio(i)&“:”&tsFim(i)&“)”)'只会返回一个数字而不是数组。 – 2016-11-23 07:12:40

回答

1

不理解深深你想达到什么目的,显然tsPeriodo的每个元素本身就是一个变体/数组,所以你最终得到某种(非标准)二维数组。要捕捉循环中的所有元素,您可以试试这个:

Dim k, l 
For Each k In tsPeriodo 
    For Each l In k 
     ' doSomething, i.e. 
     variable = "x_" & i & "_" & j & "_" & l 

    Next 
Next 
+0

它工作,谢谢!是否有另一种方法来从变体类型数组中检索变量,或者这是唯一的方法? – jf8769

+0

通常你也可以用通常的方式对它进行索引,但是你需要知道维数,每个元素的大小等等。对于'For Each',你需要更少的先验知识。 –