Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вызвать метод не из модуля, а из листа - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вызвать метод не из модуля, а из листа (Макросы/Sub)
Вызвать метод не из модуля, а из листа
ant6729 Дата: Среда, 15.04.2020, 02:25 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Всем привет, пробую в .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)
        {

            string macroCode =
                //"Sub main()\r\n" +
                //"   MsgBox \"Hello world\"\r\n" +
                //"End Sub";

                "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 - Среда, 15.04.2020, 02:26
 
Ответить
СообщениеВсем привет, пробую в .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)
        {

            string macroCode =
                //"Sub main()\r\n" +
                //"   MsgBox \"Hello world\"\r\n" +
                //"End Sub";

                "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
Дата добавления - 15.04.2020 в 02:25
Roman777 Дата: Среда, 15.04.2020, 08:25 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
ant6729, насколько я понимаю, такой функции нет, поскольку сам эксель не предоставляет возможности импортировать код в модуль книги.
Вижу тут только единственный вариант: в книге уже должен быть прописан вызов макроса из модуля. А модуль подгружать, вы сможете.

(updt) С другой стороны, я только что посмотрел, если попробовать выгрузить код листа, он его предлагает выгружать как cls (класс). Может быть так же возможно и загрузить код книги (главное, чтобы название совпадало с названием книги).

(updt2) Нет, такие манипуляции у меня в экселе создали модуль класса с названием книги, так что оно так не работает.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Среда, 15.04.2020, 08:34
 
Ответить
Сообщениеant6729, насколько я понимаю, такой функции нет, поскольку сам эксель не предоставляет возможности импортировать код в модуль книги.
Вижу тут только единственный вариант: в книге уже должен быть прописан вызов макроса из модуля. А модуль подгружать, вы сможете.

(updt) С другой стороны, я только что посмотрел, если попробовать выгрузить код листа, он его предлагает выгружать как cls (класс). Может быть так же возможно и загрузить код книги (главное, чтобы название совпадало с названием книги).

(updt2) Нет, такие манипуляции у меня в экселе создали модуль класса с названием книги, так что оно так не работает.

Автор - Roman777
Дата добавления - 15.04.2020 в 08:25
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вызвать метод не из модуля, а из листа (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!