2
以下問題讓我困惑。我已經創建了一個函數,以提供基於若干輸入的特定列的列索引:Excel VBA:元素不被存儲在循環中
- 的陣列(從列標題的範圍)
- 數據元素(整數)的數
- 的選定列名稱陣列
- 一個Array,用於保存傳回子結果的結果。
- 計數器(全局)
顯然,這裏的意圖是通過列索引的其他功能和程序用於偏移和額外的處理。
雖然函數本身正在工作,但它不適用於第二個數據元素。 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
也許',爲ByRef resultindex爲Variant)'? – Slai
與許多帶有「返回」語句的常見語言相比,VBA有點奇怪。 VBA創建一個與該函數名稱相同的自動變量,並且分配給此變量的任何內容都將返回。所以就在函數結束之前(假設你想返回數組'resultindex'),你可以添加'getIndex = resultIndex'這一行。 – Blackhawk
哦,我明白了,所以你是通過引用返回的... – Blackhawk