使用Select Case优化Long for循环

时间:2017-07-10 10:53:11

标签: vba loops for-loop select optimization

我必须迭代大循环并使用Case Select结构。我首先遍历请求的参数(通常大约为10),然后对于每个匹配,我循环遍历文件列表(大约10k)。代码具有以下结构,但有更多案例。

For i = 1 To dNumColumns Step 1 
Debug.Print(CStr(Now() & " Column: " & UCase(vInHeaders(1,i))))

    Select Case UCase(Cols(1,i))
        Case "NAME":
            row = 1
            For Each t In vT
                vTestsValues(row, i) = t.Name : row += 1
            Next
        Case "DATE":
            row = 1
            For Each t In vT
                vTestsValues(row, i) = t.Date : row += 1
            Next
        Case "PATH":
            row = 1
            For Each t In vT
                vTestsValues(row, i) = t.Path : row += 1
            Next
        Case "RIGHTS":
            row = 1
            For Each t In vT
                vTestsValues(row, i) = t.Rights : row += 1
            Next
        Case "AUTHOR":
            row = 1
            For Each t In vT
                vTestsValues(row, i) = t.Author : row += 1
            Next
        Case "TYPE":
            row = 1
            For Each t In vT
                vTestsValues(row, i) = t.Type : row += 1
            Next
        Case "VERSION":
            row = 1
            For Each t In vT
                vTestsValues(row, i) = t.Version : row += 1
            Next
        Case Else
            row = 1
            For Each t In vT
                vTestsValues(row, i) = "ERR"
                row += 1
            Next
        End Select

dNumColumns is a Variant Array, containing Strings;
vT is a Variant Array containing a Document Object

将这些结果添加到vTestsValues的最有效方法是什么?已经尝试过“For Each t in vT”(通常有10k项)并在其中嵌套“For i = 1 To dNumColumns”循环以选择Cases并获得稍慢的性能。任何提示都表示赞赏。

1 个答案:

答案 0 :(得分:0)

    For Each t In vT
        vTestsValues(row, i) = CallByName(t, Cols(1,i), vbGet)  : row += 1
    Next