Это гипотетическая ситуация.
Я хотел бы узнать, возможно ли выставить класс С# для VBA в надстройке уровня документа.
Здесь SSCCE:
В VS PRO 2012 я начал новый проект Selected Office → Excel 2010 Workbook. (убедитесь, что вы выбрали .Net framework ver 4)
Я добавил элемент управления DateTimePicker
для Sheet1.
Я могу установить/получить свойство .Value
с помощью элемента управления DateTimePicker
в решении С# без проблем.
При отладке: в VBA свойство .Value
отображается не. (пробовал .OLEFormat.Object.Value
)
Не все свойства могут быть выставлены VBA, потому что элемент управления ActiveX DateTimePicker
обернут MSForms
, поэтому Excel распознает его (совместимость).
Мне нужно иметь возможность захватить фактическое значение обернутого элемента управления из VBA,, но я не уверен, как это сделать (возможно ли это или нет)...
Я знаю, что сам элемент управления поддерживает события, но это не тот путь, который я хочу принять. Я хочу иметь возможность захватить статическое/текущее значение с элемента управления.
Вот что я хотел бы сделать:
-
Добавить класс в мое решение С#
-
Выставляем его, поэтому он может быть полезен из VBA, например
Dim obj as new MyExposedClass
-
затем
MyExposedClass
сохраните ссылку наDateTimePicker
, как показано на С# (все доступные свойства) -
то я могу определить функцию
GetValue(string controlName)
, которая возвращает значение из С# POV
Итак, я нашел это решение + ( Вызов кода в настройках уровня документа из VBA
Как открыть код VBA в Visual С# Project
Пошаговое руководство: код вызова из VBA в проекте Visual С#