Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Excel VBA:元素未存储在循环中_Arrays_Vba_Excel_Nested Loops - Fatal编程技术网

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

以下问题使我感到困惑。我创建了一个函数,用于根据几个输入提供特定列的列索引:

  • 数组(来自一系列列标题)
  • 数据元素的数量(整数)
  • 选定列名的数组
  • 一个数组,用于保存返回sub的结果
  • 计数器(全局)
  • 显然,这里的目的是将列索引传递给其他函数和例程以进行偏移和附加处理

    函数本身工作时,第二个数据元素不工作。将使用适当的索引记录K,但不会将其传递给数组。这里有我遗漏的东西吗

    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(…)