2016-12-01 13 views
2

Я конвертирую VBS код на VB6. Большая часть упражнений является копирование и вставка дело, для этой функции, за исключением,VBS 2D динамический массив не работает в VB6

Public Function TestMe() 

    Dim RowCount: RowCount = -1 
    Dim FieldCount: FieldCount = -1 
    ReDim ANames(RowCount, FieldCount) 
    MsgBox UBound(ANames) 

End Function 

Код отлично компилируется в VBS. Однако я получаю другой результат, когда я использую эту функцию в VB6.

В VBS это показывает сообщение -1

В VB6 это показывает сообщение Подстрочный вне диапазона

Почему это и как я могу преобразовать это VB6?

+0

Пожалуйста, покажите больше кода и строку, в которой вы получите сообщение об ошибке. –

+0

добавил функцию и перефразировал некоторые детали. – hyperkittie

ответ

3

В VBScript Redimming массив, чтобы его UBound равнялся -1, является способом пометить массив пустым массивом. В VB6 возможны отрицательные оценки, но верхние границы должны быть> = нижние границы. Рассмотрим следующий пример:

Public Function TestMe() 

    Dim RowCount: RowCount = -1 
    Dim FieldCount: FieldCount = -1 
    ReDim ANames(-2 To RowCount, -2 To FieldCount) 
    ANames(-1, -1) = "Hi" 
    MsgBox ANames(-1, -1) 

End Function 

В VB6, это работает без сучка и задоринки, выскакивают «Привет», как и ожидалось.

Насколько обходной путь, если ANames является переменной массива, вы можете просто использовать

Erase ANames 

Вместо вашего ReDim. Аналогично, если ANames является переменной варианта (но не переменной массива), просто назначьте ей Empty.

+0

Принятый ответ, спасибо Джон, это помогло решить мою проблему! – hyperkittie

 Смежные вопросы

  • Нет связанных вопросов^_^