Intereting Posts
Почему я не вижу, что оператор + = перегружен на System.Delegate? Как читать перемеженный файл одновременно с использованием реактивных расширений C # Высокое использование ЦП в streamе слушателя, отсоединение спальных промахов Получите следующий минимальный двойной номер EventToCommandBehavior не найден в xmlns clr-namespace: Prism.Behaviors SemanticModel.GetTypeInfo () для ObjectCreationExpressionSyntax.Type возвращает null Скопировать файл из одного каталога в другой Как написать в определенном месте zapfdingbatslist в pdf-документе с помощью iTextSharp Являются ли BinaryFormatter Serialize и Deserialize streamом безопасным? Ошибка таблицы OpenXml « требуется перед каждым “ ICollection не ковариант? C # decimal.Parse поведение обнаружение соединения падает, а WebClient загружает файл асинхронно (в C #) Как создать пользовательский элемент управления с закругленными углами? Использование свойств отражения чтения объекта, содержащего массив другого объекта

Добавьте код excel vba к кнопке, используя c #

У меня возник вопрос о создании кнопки excel и добавлении на нее функции кода vba. Я создал код кнопки и модуля, но не знаю, как установить связь между ними. Может ли кто-нибудь показать мне, как?

мой код для кнопки:

Excel.Shape btn = xlWorkSheet5.Shapes.AddOLEObject("Forms.CommandButton.1", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 300, 10, 150, 22); Excel.OLEObject sheetBtn = (Excel.OLEObject)xlWorkSheet5.OLEObjects(btn.Name); sheetBtn.Object.GetType().InvokeMember("Caption", System.Reflection.BindingFlags.SetProperty, null, sheetBtn.Object, new object[] { "Calculate Bus Load" }); 

и код для модуля:

  String sCode = "Sub main()\r\n" + " MsgBox \"Hello world\"\r\n" + "end Sub"; VBA.VBComponent oModule = xlWorkBook.VBProject.VBComponents.Add(VBA.vbext_ComponentType.vbext_ct_StdModule); oModule.Name = "Module1"; oModule.CodeModule.AddFromString(sCode); xlWorkBook.VBProject.VBComponents.Item(1).CodeModule.AddFromString(sCode); 

Я искал в Интернете, но не нашел ничего полезного, поэтому я очистил свой разум и снова сосредоточился на помощи c #, и я нашел ответ, как правильно это сделать.

Мой код:

 String updateBT "...// macro code for button"; VBA.VBComponent oModule1 = xlWorkBook.VBProject.VBComponents.Add(VBA.vbext_ComponentType.vbext_ct_StdModule); oModule1.Name = "Update"; oModule1.CodeModule.AddFromString(updateBT); Excel.Shape btn2 = xlWorkSheet1.Shapes.AddFormControl(Excel.XlFormControl.xlButtonControl, 150, 5, 150, 22); btn2.Name = "Update"; btn2.OnAction = "... // name of your macro code"; btn2.OLEFormat.Object.Caption = "... // Button name"; 

Насколько я понимаю, вам нужен промежуточный call модуля кода / макроса из button при click на кнопку. Таким образом, код запускается и делает то, что вы хотите.

Обычно, например,

  • мы добавляем кнопку в Excel Sheet
  • выбрать событие on_click
  • добавить код, например, call mySub

Вам нужно сделать это в C #.

Пожалуйста, настройте для своего модуля и управляйте именами. Вот пример.

 //Within your above code add, sheetBtn.Click += new MSForms.CommandButtonEvents_ClickEventHandler(sheetBtn_Click); } //button click event triggers void sheetBtn_Click() { call subMain // try a test using : MessageBox.Show("button test!"); } 

** ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ ЭТОТ УЧРЕЖДЕНИЕ У него есть в значительной степени то, что вам нужно.

В соответствии с предметом при простом вызове субсайта листа или модуля, написанного в Excel из C #, вы можете использовать метод run macro .

 //instead of this.application, you call refer to the Excel app object this.Application.Run("yourMacroName",missing,missing........) 

Ссылка: