Доступ к элементам в 2D массиве, который является массивом массива (вариант) - PullRequest
0 голосов
/ 19 сентября 2019

Я новичок в vbscript и пытаюсь понять, как работать с 2D-массивами.Из моего исследования есть два способа получения 2D-массива, один из которых объявлен как 2D-массив:

Dim matrix(10, 10) 

Однако проблема с этим типом 2D-массива заключается в том, что я не могу эффективно динамически изменить размер массива.Итак, я решил иметь двумерный массив, который по сути является одномерным массивом вариантов, которые являются массивами.Мой код для заполнения 2D-массива приведен ниже:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\Users\johnk\Desktop\test.xlsx")

intRow = 1
intCol = 1
ReDim matrix(10) 'two dimensional array; 

Do Until objExcel.Cells(intRow,1).Value = ""
    ReDim cols(10) 'columns to be inserted for each row
    Do Until objExcel.Cells(intRow, intCol).Value = ""
        if UBound(cols) < intCol Then
            ReDim Preserve cols(intCol * 2)
        End If
        cols(intCol) = objExcel.Cells(intRow, intCol).Value
        obj1.Write(cols(intCol))
        intCol = intCol + 1
    Loop
    intCol = 1
    matrix(intRow) = cols
    obj1.Write(vbCrLf)
    if UBound(matrix) < intRow Then
        ReDim Preserve rows(intRow * 2)
    End If
    intRow = intRow + 1
Loop
obj1.Write(vbCrLf)
obj1.Write(matrix(0)(0))

В этом коде я просто читаю из таблицы Excel и вводю их в матричную переменную.Однако, когда я пытаюсь получить к нему доступ:

obj1.Write(matrix(0)(0))

я получаю несоответствие типов.Я также не могу перебрать массив:

For i = LBound(matrix) To UBound(matrix)
    For j = LBound(matrix(i)) To UBound(matrix(i))
        obj1.Write(matrix(i)(j))
    Next
    obj1.Write(vbCrLf)
Next

, так как я получаю несоответствие типов во внутреннем цикле.Я объявляю или заполняю массив неправильно?Как правильно это сделать?

1 Ответ

0 голосов
/ 19 сентября 2019

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

Для vbscript кажется, что важно точно знать, насколько большим должен быть ваш массив, и убедиться, что ваш массив полностью заполнен до указанного вами размера, в противном случае LBound и UBound вызовут ошибки несоответствия при попыткезапустить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...