我有这个简化的代码,其中infosOptions
是一个全局变量,其中包含不同的类型:
Dim optionsVecteur As Variant
For j = 0 To UBound(infosOptions)
If infosOptions(j, 11) & " Index" = transac.optionName Then
optionsVecteur(1) = infosOptions(j, 6)
optionsVecteur(2) = infosOptions(j, 5)
optionsVecteur(3) = infosOptions(j, 10)
Exit For
End if
End j
我在optionsVecteur(1) = infosOptions(j, 6)
上遇到了类型不匹配错误,但是如果它Redim optionsVecteur(3)
有效,为什么呢?
答案 0 :(得分:1)
您的代码存在一些问题。正如评论中指出的那样,您创建了一个标量Variant(如在单个变量中)而不是数组。你需要纠正这个。
此外,在多维数组上使用UBound在其他情况下可能会失败。最佳做法是使用UBound的完整定义来确保您实际选择正确的限制。
如下所示的更改应该可以解决您的问题:
Dim optionsVecteur() As Variant 'This creates an array of variants - But has not dimensioned the array.
ReDim optionsVecteur(1 to 3) as Variant 'This dimensions the array as having 3 elements. You could have just put this in the original line above, but doing this allows you to dynamically change the length of the array of required.
For j = 0 To UBound(infosOptions, 1)'This ensures that VBA considers the upper boundary of the first dimension.
If infosOptions(j, 11) & " Index" = transac.optionName Then
optionsVecteur(1) = infosOptions(j, 6)
optionsVecteur(2) = infosOptions(j, 5)
optionsVecteur(3) = infosOptions(j, 10)
Exit For
End if
Next j 'You want next j not end j.