Можно пример макроса?Всем привет. Есть уже написанный макрос. Хочу применить его в таблице. При этом не хочу руками открывать и жать на кнопки. Скажите пожалуйста, возможно ли через ZP запустить макрос к определенной таблице?
Я имею в виду, что у меня макрос уже написан в Excel VBA. То есть есть файл макроса, который нужно как-то активировать автоматическиМожно пример макроса?
Всем привет. Есть уже написанный макрос. Хочу применить его в таблице. При этом не хочу руками открывать и жать на кнопки. Скажите пожалуйста, возможно ли через ZP запустить макрос к определенной таблице?
Напрямую из Zenno не сделать (из методов ZP).Я имею в виду, что у меня макрос уже написан в Excel VBA. То есть есть файл макроса, который нужно как-то активировать автоматически
Interop.Excel или EPPlus. Под капотом ZP стоит урезанная (старая) версия EPPlus.Sub CheckCellValue()
If Range("A2").Value = "да" Then
Range("B2").Interior.Color = RGB(0, 255, 0)
End If
End Sub
Microsoft.Office.Interop.Excel в папку по пути:C:\Program Files\ZennoLab\RU\ZennoPoster Standard V7\!!!verZP!!!\Progs\ExternalAssembliesusing Microsoft.Office.Interop.Excel;
var excelApp = new Application();
var workbook = excelApp.Workbooks.Open(@"Путь до таблицы с макросом.xlsm");
excelApp.Run("CheckCellValue"); // запуск по имени макроса
workbook.Close(true); // true, чтобы сохранить изменения
excelApp.Quit();
Большое спасибо за такой развернутый ответ!Напрямую из Zenno не сделать (из методов ZP).
Можно только подключаяInterop.ExcelилиEPPlus. Под капотом ZP стоит урезанная (старая) версияEPPlus.
Если хотите подробнее или есть ещё вопросы по Excel, напишите в личные сообщения, попробую объяснить и приведу рабочий примеры.)
Краткий пример решения задачи:
VBA макрос с именем CheckCellValue:
Было:Макрос VBA для примера:Sub CheckCellValue() If Range("A2").Value = "да" Then Range("B2").Interior.Color = RGB(0, 255, 0) End If End Sub
Посмотреть вложение 106631
Стало:
Посмотреть вложение 106629
Чтобы все работа нужно:
1. Положить библиотечкуMicrosoft.Office.Interop.Excelв папку по пути:
C:\Program Files\ZennoLab\RU\ZennoPoster Standard V7\!!!verZP!!!\Progs\ExternalAssemblies
2. Подключить в GAC эту библиотеку
3. Прописать в Using'и:
Код решения задачи:Using:using Microsoft.Office.Interop.Excel;
Рабочий шаблон, таблицу с макросом, библиотеку приложил ↓Запуск макроса в таблице:var excelApp = new Application(); var workbook = excelApp.Workbooks.Open(@"Путь до таблицы с макросом.xlsm"); excelApp.Run("CheckCellValue"); // запуск по имени макроса workbook.Close(true); // true, чтобы сохранить изменения excelApp.Quit();
Получается, в вашем примере запускается макрос, который привязан к книге конкретной таблицы Excel. Подскажите пожалуйста, можно ли как-то активировать макрос, который не привязан к книге Excel? Этот макрос лежит в общей скрытой книге PERSONAL.XLSB и доступен всем таблицамНапрямую из Zenno не сделать (из методов ZP).
Можно только подключаяInterop.ExcelилиEPPlus. Под капотом ZP стоит урезанная (старая) версияEPPlus.
Если хотите подробнее или есть ещё вопросы по Excel, напишите в личные сообщения, попробую объяснить и приведу рабочий примеры.)
Краткий пример решения задачи:
VBA макрос с именем CheckCellValue:
Было:Макрос VBA для примера:Sub CheckCellValue() If Range("A2").Value = "да" Then Range("B2").Interior.Color = RGB(0, 255, 0) End If End Sub
Посмотреть вложение 106631
Стало:
Посмотреть вложение 106629
Чтобы все работа нужно:
1. Положить библиотечкуMicrosoft.Office.Interop.Excelв папку по пути:
C:\Program Files\ZennoLab\RU\ZennoPoster Standard V7\!!!verZP!!!\Progs\ExternalAssemblies
2. Подключить в GAC эту библиотеку
3. Прописать в Using'и:
Код решения задачи:Using:using Microsoft.Office.Interop.Excel;
Рабочий шаблон, таблицу с макросом, библиотеку приложил ↓Запуск макроса в таблице:var excelApp = new Application(); var workbook = excelApp.Workbooks.Open(@"Путь до таблицы с макросом.xlsm"); excelApp.Run("CheckCellValue"); // запуск по имени макроса workbook.Close(true); // true, чтобы сохранить изменения excelApp.Quit();
Рад, что мой вариант полезен.)Большое спасибо за такой развернутый ответ!
Привет. Да, можно и из общей книги.Получается, в вашем примере запускается макрос, который привязан к книге конкретной таблицы Excel. Подскажите пожалуйста, можно ли как-то активировать макрос, который не привязан к книге Excel? Этот макрос лежит в общей скрытой книге PERSONAL.XLSB и доступен всем таблицам
PERSONAL.XLSB, то все просто виснет и все.%AppData%\Microsoft\Excel\XLSTART\PERSONAL.XLSBC:\ и сослался на ней..xlsb. Главное, чтобы поддерживала макросы.var excelApp = new Application();
var personalWorkbook = excelApp.Workbooks.Open(@"C:\personal.xlsb"); // открыть общую таблицу с макросами
var workbook = excelApp.Workbooks.Open(@"Путь до таблицы.xlsm");
// Запуск макроса по имени из общей таблицы
excelApp.Run("personal.XLSB!CheckCellValue"); // "personal.XLSB!CheckCellValue" имя таблицы с расширением — разделитель ('!') — имя макроса
// Закрытие книги и Excel приложения
workbook.Close(true);
personalWorkbook.Close(false); // без сохранения
excelApp.Quit();
al.XLS
Благодарю за оказанную помощь. Все работает идеально!Рад, что мой вариант полезен.)
Привет. Да, можно и из общей книги.
Пока тестировал, столкнулся с проблемой возможно в моей системе.
Из таблицы макрос запускался удачно, а если с помощью кода, то книга просто не закрывалась, но ошибки об этом нет.
Если пытаться запустить вручнуюPERSONAL.XLSB, то все просто виснет и все.
Обычно общая папка для пользователя находится тут по такой ссылке:%AppData%\Microsoft\Excel\XLSTART\PERSONAL.XLSB
Поэтому я создал ещё одну таблицу в корне дискаC:\и сослался на ней.
В итоге результат положительный.
Основная концепция:
1. Запустить обе таблицы, желательно с макросами раньше, чем целевую.
2. Выполнить макрос сославшись на таблицу с нужным нам макросом.
Это не обязательно должна быть таблица с расширением.xlsb. Главное, чтобы поддерживала макросы.
3. Закрыть таблицы. С макросами сохранять не нужно, а целевую сохранить.
4. Результат тот же, что и выше. Макрос вызывал тот же.
Код:
Приложил шаблон ↓C#:var excelApp = new Application(); var personalWorkbook = excelApp.Workbooks.Open(@"C:\personal.xlsb"); // открыть общую таблицу с макросами var workbook = excelApp.Workbooks.Open(@"Путь до таблицы.xlsm"); // Запуск макроса по имени из общей таблицы excelApp.Run("personal.XLSB!CheckCellValue"); // "personal.XLSB!CheckCellValue" имя таблицы с расширением — разделитель ('!') — имя макроса // Закрытие книги и Excel приложения workbook.Close(true); personalWorkbook.Close(false); // без сохранения excelApp.Quit();


