Добавление к каждой другой позиции массива MS Access - PullRequest
0 голосов
/ 03 июля 2018

Мне нужно взять один массив (firstArray) и ввести его во второй массив (secondArray). Однако первые четыре поля имеют одинаковое значение. После первых четырех позиций он начинает чередоваться в значениях.

Пример:

firstArray

+---------+
| ID#     |
| Name    |
| month1  |
| month2  |
| month3  |
| etc...  |
+---------+

secondArray

+----------+
| ID#      |
| Name     |
| month1   |
| month2   |
| NewField |
| month3   |
| NewField |
| month4   |
| etc...   |
+----------+

Я довольно новичок в VBA, поэтому я прошу прощения за ужасный код.

Код пока:

Dim i As Integer
i = 0
Dim j As Integer
ReDim secondArray(0 To (fieldCount - 4) * 2)
Dim finalCountDown As Integer
finalCountDown = (fieldCount - 4) * 2

secondArray(0) = firstArray(0)
secondArray(1) = firstArray(1)
secondArray(2) = firstArray(2)
secondArray(3) = firstArray(3)

i = 3
j = 3
Do Until i > finalCountDown
    i = i + 1
    secondArray(i) = "NewField"
    i = i + 1
    j = j + 1
    secondArray(i) = firstArray(j)
Loop

У меня также есть MsgBox для итерации и вывода моих полей:

'//------ testing output
i = 0
For i = 0 To finalCountDown
    MsgBox secondArray(i)
Next i

Я ценю любую помощь! Если есть какая-то путаница, я с удовольствием постараюсь объяснить еще немного!

EDIT:

Два массива имеют разный размер, но являются динамическими. firstArray сначала устанавливается на 20 позиций, в то время как secondArray изначально устанавливается на 32 позиций. (Они рассчитываются каждый раз, когда этот процесс запускается при извлечении архивных данных. Это позволяет моим пользователям добавлять данные и не беспокоиться о необходимости вручную добавлять значения в мои массивы.)

EDIT2:

Я добавил часть Эрика в свой код с некоторыми изменениями. Я также добавил отдельный счетчик для моего первого массива, чтобы убедиться, что он вводит правильные строки в правильные позиции моего второго массива.

EDIT3:

Вот код, который работал для меня:

Dim i As Integer
i = 0
Dim j As Integer
'removed the " - 4"
ReDim secondArray(0 To (fieldCount * 2))
Dim finalCountDown As Integer
'removed the " - 4"
finalCountDown = (fieldCount * 2)

secondArray(0) = firstArray(0)
secondArray(1) = firstArray(1)
secondArray(2) = firstArray(2)
secondArray(3) = firstArray(3)

i = 3
'created own counter for firstArray
j = 3
Do Until i > finalCountDown
    i = i + 1
    secondArray(i) = "NewField"
    i = i + 1
    j = j + 1
    secondArray(i) = firstArray(j)
Loop

Ошибка, которую я получил, произошла из-за того, что «Subscript not in Range» из-за того, что моя переменная finalCountDown была меньше, чем требовалось моему массиву. Разрешение переменной становиться больше, чем мой массив, позволил моему массиву завершить итерацию через себя и теперь вводит правильные поля в правильном порядке.

Я принимаю ответ Эрика, так как это был трамплин для ответа на вопрос!

1 Ответ

0 голосов
/ 03 июля 2018

Для скорректированного кода вы можете выполнить простую проверку, чтобы проверить, действительно ли значение j:

Dim i As Integer
i = 0
Dim j As Integer
ReDim secondArray(0 To (fieldCount - 4) * 2)
Dim finalCountDown As Integer
finalCountDown = (fieldCount - 4) * 2

secondArray(0) = firstArray(0)
secondArray(1) = firstArray(1)
secondArray(2) = firstArray(2)
secondArray(3) = firstArray(3)

i = 3
j = 3
Do Until i > finalCountDown
    i = i + 1
    finalArray(i) = "NewField"
    i = i + 1
    j = j + 1
    If j => LBound(colheaders) And j <= UBound(colHeaders) Then
        finalArray(i) = colHeaders(j)
    End If
Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...