2010-08-13 2 views
1

Я создал библиотеку классов VB.NET 2008, которая по большей части отлично работает с VBA. Я могу выполнить большую часть функциональности, которая требуется, но я недавно столкнулся с довольно серьезной проблемой.Массивы: Определены в .NET, применяются в VBA

Причина, по которой мы работаем с обоими интерфейсами программирования, заключается в том, что мы должны иметь возможность делать «на лету» кодирование, и это может быть выполнено только в VBA. Итак, как я уже упоминал, в .NET есть «базовый» код. Код .NET содержит массивы, поля, свойства и т. Д. (Типичная структура программы). Моя проблема в массивах.

Хорошо, в .NET DLL У меня есть массив - назовем его X() как Double. Есть два свойства, поскольку VBA не поддерживает перегрузку. Один из них: X (rowNum) как Double, а другой: X() как Double(). Обратите внимание, что первое свойство возвращает только один элемент массива, а последний возвращает весь массив.

В моей программе VBA я могу прочитать файл и заполнить этот массив значениями (это все в DLL). Однако я не могу манипулировать этими же значениями один раз внутри VBA.

Например, в VBA я не могу сказать X (5) = 10. Он не изменит значение. Когда я пытаюсь настроить весь массив X() на другой, я получаю сообщение об ошибке компиляции: функция или интерфейс, помеченные как ограниченные, или функция использует тип автоматизации, не поддерживаемый в Visual Basic.

ответ

2

Вместо управления массивом напрямую, например, X(5) = 10, возможно, вам удастся создать методы get/set type. Проверьте некоторые примеры на примере here.

Public Sub SetX (ByVal i As Integer, ByVal v As Integer) 
    X(i) = v 
End Sub 

Public Function GetX (ByVal i As Integer) As Integer 
    Return X(i) 
End Function 
Смежные вопросы