Всем привет, пробую в .net средствами С# вставить Sub Worksheet_BeforeDoubleClick в саму страницу книги, но не получается.
Есть варианты вставки только в сам модуль.
Если интересно, выглядит это средствами библиотеки Interop Excel примерно вот так
[vba]
Код
public static class InsertionMacroVBAinFile { public static void InsertMacroInExcel(Microsoft.Office.Interop.Excel.Application app, Microsoft.Vbe.Interop.VBComponent xlMod) {
"Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)\r\n" + " If Target.Column = 2 Then\r\n" + " fname = ThisWorkbook.Path & Application.PathSeparator\r\n" + " Link = fname & ActiveCell & \" .png\" \r\n" + " On Error GoTo NoCanDo\r\n" + " ActiveWorkbook.FollowHyperlink Address:= Link, NewWindow:= True\r\n" + " Running = False\r\n" + " End If\r\n" + " Exit Sub\r\n" + "NoCanDo:\r\n" + " MsgBox \"Cannot find or open \" & Link\r\n" + " Running = False\r\n" + "End Sub";
xlMod.CodeModule.AddFromString(macroCode);
}
[/vba]
В итоге, так и не нарыл варианты вставки в сам лист.
Отсюда вопрос - можно ли каким-то образом привязаться к Worksheet_BeforeDoubleClick из самого модуля? Либо, как все - таки вставить код в сам лист. Не могу подобрать метод. Извините, если оффтоп
Всем привет, пробую в .net средствами С# вставить Sub Worksheet_BeforeDoubleClick в саму страницу книги, но не получается.
Есть варианты вставки только в сам модуль.
Если интересно, выглядит это средствами библиотеки Interop Excel примерно вот так
[vba]
Код
public static class InsertionMacroVBAinFile { public static void InsertMacroInExcel(Microsoft.Office.Interop.Excel.Application app, Microsoft.Vbe.Interop.VBComponent xlMod) {
"Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)\r\n" + " If Target.Column = 2 Then\r\n" + " fname = ThisWorkbook.Path & Application.PathSeparator\r\n" + " Link = fname & ActiveCell & \" .png\" \r\n" + " On Error GoTo NoCanDo\r\n" + " ActiveWorkbook.FollowHyperlink Address:= Link, NewWindow:= True\r\n" + " Running = False\r\n" + " End If\r\n" + " Exit Sub\r\n" + "NoCanDo:\r\n" + " MsgBox \"Cannot find or open \" & Link\r\n" + " Running = False\r\n" + "End Sub";
xlMod.CodeModule.AddFromString(macroCode);
}
[/vba]
В итоге, так и не нарыл варианты вставки в сам лист.
Отсюда вопрос - можно ли каким-то образом привязаться к Worksheet_BeforeDoubleClick из самого модуля? Либо, как все - таки вставить код в сам лист. Не могу подобрать метод. Извините, если оффтопant6729
Сообщение отредактировал ant6729 - Среда, 15.04.2020, 02:26
ant6729, насколько я понимаю, такой функции нет, поскольку сам эксель не предоставляет возможности импортировать код в модуль книги. Вижу тут только единственный вариант: в книге уже должен быть прописан вызов макроса из модуля. А модуль подгружать, вы сможете.
(updt) С другой стороны, я только что посмотрел, если попробовать выгрузить код листа, он его предлагает выгружать как cls (класс). Может быть так же возможно и загрузить код книги (главное, чтобы название совпадало с названием книги).
(updt2) Нет, такие манипуляции у меня в экселе создали модуль класса с названием книги, так что оно так не работает.
ant6729, насколько я понимаю, такой функции нет, поскольку сам эксель не предоставляет возможности импортировать код в модуль книги. Вижу тут только единственный вариант: в книге уже должен быть прописан вызов макроса из модуля. А модуль подгружать, вы сможете.
(updt) С другой стороны, я только что посмотрел, если попробовать выгрузить код листа, он его предлагает выгружать как cls (класс). Может быть так же возможно и загрузить код книги (главное, чтобы название совпадало с названием книги).
(updt2) Нет, такие манипуляции у меня в экселе создали модуль класса с названием книги, так что оно так не работает.Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Среда, 15.04.2020, 08:34