У меня есть такой код:
rs1 = getResults(sSQL1)
rs2 = getResults(sSQL2)
rs1 и rs2 и 2D-массивы. Первый индекс представляет количество столбцов (статический), а второй индекс представляет количество строк (динамический).
Мне нужно объединить два массива и сохранить их в rs3. Я не знаю, что это за тип rs1 и rs2.



Вы уверены, что столбцы совпадут? Потому что, если это не так, я не знаю, как бы вы сделали это в общем виде на любом языке. Если это так, то вы, вероятно, могли бы сделать это очень просто так:
rs1 = getResults(sSQL1 & " UNION " sSQL2)
Я понял это. Оказывается, я все время делал это правильно, я только что сбивался с пути. Вам также не нужен третий массив.
aRS_RU = rowsQuery(sSQL & ", 'RU'")
aRS_KR = rowsQuery(sSQL & ", 'KR'")
uboundRU1 = UBound(aRS_RU, 1)
uboundRU2 = UBound(aRS_RU, 2)
uboundKR2 = Ubound(aRS_KR, 2)
' Redim original array
ReDim Preserve aRS_RU(uboundRU1, uboundRU2 + uboundKR2 + 1 )
uboundRU2 = UBound(aRS_RU, 2)
' Add the values from the second array
For m = LBound(aRS_KR, 1) To UBound(aRS_KR, 1) 'Loop for 1st dimension
For n = LBound(aRS_KR, 2) To UBound(aRS_KR, 2) 'Loop for 2nd dimension
aRS_RU(m, uboundRU2 + n) = aRS_KR(m,n)
Next
Next
Я знаю, что этот пост старый, но я адаптировал код, чтобы исправить некоторые ошибки, которые у меня были во время его выполнения. У меня работает следующий пример кода:
Sub ConcatRecordSets(ByRef avFirstRS As Variant, ByRef avSecondRS As Variant)
Dim lIndex1 As Long, lIndex2 As Long
Dim lFirstRSSize As Long, lSecondRSSize As Long
' Redim original array
lFirstRSSize = UBound(avFirstRS, 2) - LBound(avFirstRS, 2) + 1
lSecondRSSize = UBound(avSecondRS, 2) - LBound(avSecondRS, 2) + 1
ReDim Preserve avFirstRS(LBound(avFirstRS, 1) To UBound(avFirstRS, 1), LBound(avFirstRS, 2) To UBound(avFirstRS, 2) + lSecondRSSize)
' Add the values from the second array
For lIndex1 = LBound(avSecondRS, 1) To UBound(avSecondRS, 1) ' Loop for 1st dimension
For lIndex2 = LBound(avSecondRS, 2) To UBound(avSecondRS, 2) ' Loop for 2nd dimension
avFirstRS(lIndex1, lFirstRSSize + lIndex2) = avSecondRS(lIndex1, lIndex2)
Next lIndex2
Next lIndex1
End Sub
почему бы вам просто не использовать Array.Resize + Array.Copy?
Да, я уверен. Они оба выполняют одни и те же хранимые процедуры (я знаю, но я этого не писал, мне просто нужно поддерживать это)