Массивы: определены в .NET, применяются в VBA - PullRequest
1 голос
/ 13 августа 2010

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

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

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

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

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

1 Ответ

2 голосов
/ 31 августа 2010

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...