У меня есть решение VSTO Excel Addin, которое предоставляет определенные методы VBA через интерфейс ComVisible. Пожалуйста, обратитесь это для примера реализации. Я использую VSTO 4 и Excel 2007/2010 для этого.
Некоторые методы открытого интерфейса вставляют элемент управления (кнопку, поле со списком или Winform UserControl) при вызове из VBA. Метод выполняется правильно и также вставляет элемент управления на лист.
public void AddButtonControl(string strControlName)
{
Microsoft.Office.Interop.Excel.Worksheet nativeWorksheet = Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet;
Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = Globals.Factory.GetVstoObject(nativeWorksheet);
vstoWorksheet.Controls.AddButton(nativeWorksheet.Range["A1", "E5"], strControlName);
}
Теперь, как только элемент управления вставлен в рабочую книгу, все переменные, объявленные в VBA, сбрасываются. Весь код возвращается в состояние, как будто он никогда не выполнялся.
Мое решение и книга Excel доступны для совместного использования здесь
Просто создайте решение и откройте рабочую книгу SampleTest.xlsm
Нажмите «Проверить строковое значение», появится окно с сообщением «Текст по умолчанию».
Нажмите на кнопку - «Добавить кнопку динамически». Кнопка будет вставлена в верхней части листа. и появится сообщение «Присвоение текста строке: образец текста».
Теперь снова нажмите «Проверить строковое значение». Должно было отображаться «Образец текста», но отображается пустое окно сообщения.
Любые предложения / обходные пути приветствуются.