Arrays Excel VBA:元素未存储在循环中
以下问题使我感到困惑。我创建了一个函数,用于根据几个输入提供特定列的列索引:Arrays Excel VBA:元素未存储在循环中,arrays,vba,excel,nested-loops,Arrays,Vba,Excel,Nested Loops,以下问题使我感到困惑。我创建了一个函数,用于根据几个输入提供特定列的列索引: 数组(来自一系列列标题) 数据元素的数量(整数) 选定列名的数组 一个数组,用于保存返回sub的结果 计数器(全局) 显然,这里的目的是将列索引传递给其他函数和例程以进行偏移和附加处理 函数本身工作时,第二个数据元素不工作。将使用适当的索引记录K,但不会将其传递给数组。这里有我遗漏的东西吗 Public Function getIndex(ByRef all_names As Variant, ByVal Elemen
Public Function getIndex(ByRef all_names As Variant, ByVal Elements As Integer, check_names() As Variant, resultindex() As Variant) As Variant
ReDim resultindex(1 To Elements)
For i = LBound(all_names) To UBound(all_names)
For j = 1 To Elements
For k = LBound(all_names, 2) To UBound(all_names, 2)
If all_names(i, k) = check_names(j) Then ' checks colName against dynamic names
resultindex(j) = k ' colIndex takes index of selected column
Debug.Print resultindex(j)
' k = UBound(all_names, 2) ' Jump to end?
End If
Next k
Next j
Next i
End Function
没有存储第二个元素是否有特殊原因?我尝试了几种不同的输入,并取得了相同的结果。非常感谢任何擅长嵌套循环的人在这个问题上给我一个正确的方向。谢谢
编辑:它看起来像是在即时窗口中工作。正如预期的那样,适当的指数正受到阻碍,但第二个元素没有被传递出去
验证是否传递了值:
results(i) = getIndex(subArray(), Elements, selNames(), results())
colIndex() = results()
For i = 1 To Elements
Debug.Print colIndex(i)
Next i
Erase result
您从不为函数指定返回值。您似乎还在使用
resultindex
作为ByRef
参数来保存结果。你不需要两者都做
重构,试试看
Public Function getIndex( _
ByRef all_names As Variant, _
ByVal Elements As Integer, _
check_names() As Variant) As Variant
Dim i As Long, j As Long, k As Long
Dim resultindex() As Variant
ReDim resultindex(1 To Elements)
For i = LBound(all_names) To UBound(all_names)
For j = 1 To Elements
For k = LBound(all_names, 2) To UBound(all_names, 2)
If all_names(i, k) = check_names(j) Then ' checks colName against dynamic names
resultindex(j) = k ' colIndex takes index of selected column
Debug.Print resultindex(j)
Exit For
End If
Next k
Next j, i
getIndex = resultindex
End Function
这样称呼它
results = getIndex(subArray(), Elements, selNames())
For i = 1 To Elements
Debug.Print results(i)
Next i
也许
,ByRef resultindex作为变体)
?与许多使用“return”语句的通用语言相比,VBA有点奇怪。VBA创建了一个与函数同名的自动变量,您为该变量赋值的内容就是返回的内容。因此,在函数结束之前(假设您想要返回数组resultindex
),您需要添加行getIndex=resultindex
。哦,我明白了,所以您是通过引用返回的……我已经发布了上面使用的代码。斯拉伊:拜里夫是个好主意,但没有骰子@布莱克霍克:这是个问题吗?和大多数其他人一样,我把VBA作为一种必需品,并且可能已经学会了一些坏习惯。你永远不会给你的函数赋值。可能是getIndex=resultIndex
?它应该被称为results=getIndex(…)