Настройка ленты vba excel
Если возможно процедурой VBA убирать (прятать) ленту Word-а, то с помощью какого оператора (инструкции)?
2 Ответ от Boris_R 17.07.2013 17:46:15
Поиском в справке VBA по слову ribbon (лента) можно найти:
Word Developer Reference
Window.ToggleRibbon Method
Shows or hides the ribbon.
Syntax
expression An expression that returns a Window object.
If the ribbon is visible, the TobbleRibbon method hides it; if the ribbon is hidden, the ToggleRibbon method shows it.
Если лента видна, то метод TobbleRibbon скрывает ее; если лента скрыта, то TobbleRibbon показывает ее
3 Ответ от Вождь 18.07.2013 12:06:52
4 Ответ от Martin 18.07.2013 15:32:56
Спасибо, господа, уже проверил - работает!)) Вы мне существенно облегчили работу!
Было б совсем здорово, если и "линейку" можно было б скрыть (программно), и строку меню, и строку заголовка. Т.е., вообще, если б можно было бы развернуть документ (рабочую область) НА ВЕСЬ ЭКРАН.
5 Ответ от Вождь 21.05.2014 15:46:51
Кому интересно для Excel, вот пару вариантов:
Похожие темы
Управление лентой с помощью процедур VBA
Люди, работающие с текстами в Ворде, делятся на две категории: те, кто просто использует приложение, как придаток к клавиатуре, и те, кто желает заставить программу работать на пределе своих возможностей. На портале о Microsoft Office Word вы узнаете про: word заглавные в прописные команда. Первым достаточно знать несколько кнопок: открыть, закрыть, сохранить, печать и основные способы оформления текста, иногда такие функции, как вырезать и копировать. Наш сайт о Microsoft Office Word даст ответ про: маркер конца таблицы. Больше они от программы ничего не требуют и даже не подозревают, насколько можно ускорить и упростить свою работу. Наш сайт о Microsoft Office Word даст ответ про: как убрать страницы в worde 2007.
Зато вторая категория пользователей стремится разобраться со всеми функциями и возможностями, настроив их максимально эффективно. Наш сайт о Microsoft Office Word даст ответ про: как убрать пробелы между словами в ворде 2010. В этом очень помогает специальная литература и опыт других людей. И одно, и второе можно найти на форуме сайта Ворд Эксперт. На портале о Microsoft Office Word вы узнаете про: про копирование из word в word закрывается щаашсу.
На форуме обсуждаются способы настроек Ворда, рационального выполнения различных операций, много тем посвящено написанию различных макросов и созданию шаблонов. Наш сайт о Microsoft Office Word даст ответ про: открыть оффис 2003. Есть возможность научиться мини-программированию с нуля или взять на вооружение чье-то готовое решение. На портале о Microsoft Office Word вы узнаете про: проблема с word. Также форум предлагает при необходимости оставить заявку с описанием своей проблемы или задачи.
На Ворд Эксперт вы найдете все: от нескольких способов избавиться от лишних пробелов, до тонкой настройки новейшей версии программы. Наш сайт о Microsoft Office Word даст ответ про: почему документы office не отображаются иконки.
Я ищу способ добавить настраиваемую вкладку на ленту Excel, на которой было бы несколько кнопок. Я случайно наткнулся на некоторые ресурсы, посвященные этой проблеме через Google, но все они выглядят хитроумно и невероятно сложно.
Как это сделать быстро и просто? Я бы хотел, чтобы новая вкладка загружалась, когда мой VBA загружается в Excel ..
ОБНОВЛЕНИЕ : Я пробовал этот пример отсюда, но получил ошибку «требуется объект» в последней инструкции:
Пожалуйста, подтвердите, какую версию Excel вы используете?AFAIK вы не можете использовать VBA Excel для создания настраиваемой вкладки на ленте Excel. Однако вы можете скрыть / сделать видимым компонент ленты с помощью VBA. Кроме того, ссылка, которую вы упомянули выше, предназначена для MS Project, а не для MS Excel.
Я создаю вкладки для своих приложений / надстроек Excel с помощью этой бесплатной утилиты под названием Custom UI Editor .
Изменить: для размещения нового запроса OP
Вот краткое руководство, как и было обещано:
После того, как вы установили Custom UI Editor (CUIE), откройте его и нажмите File | Откройте и выберите соответствующий файл Excel. Убедитесь, что файл Excel закрыт, прежде чем открывать его через CUIE. В качестве примера я использую новый рабочий лист.
Щелкните правой кнопкой мыши, как показано на изображении ниже, и выберите «Пользовательский интерфейс Office 2007». Он вставит "customUI.xml"
Далее Щелкните меню Вставить | Образец XML | Пользовательская вкладка. Вы заметите, что основной код создается автоматически. Теперь вы готовы отредактировать его в соответствии с вашими требованиями.
Давайте проверим код
label="Custom Tab" : Замените «Custom Tab» на имя, которое вы хотите дать своей вкладке. А пока назовем его «Джером».
В приведенной ниже части добавлена пользовательская кнопка.
imageMso : Это изображение, которое будет отображаться на кнопке. «HappyFace» - это то, что вы увидите сейчас. Вы можете скачать больше идентификаторов изображений здесь .
onAction="Callback" : «Обратный вызов» - это имя процедуры, которая запускается при нажатии на кнопку.
Теперь давайте создадим 2 кнопки и назовем их «Кнопка JG 1» и «Кнопка JG 2». Сохраним счастливое лицо как изображение первого, а «Солнце» оставим на втором. Измененный код теперь выглядит так:
Удалите весь код, созданный в CUIE, а затем вставьте вместо него приведенный выше код. Сохраните и закройте CUIE. Теперь, когда вы откроете файл Excel, он будет выглядеть так:
Теперь кодовая часть. Откройте редактор VBA, вставьте модуль и вставьте этот код:
Надеюсь это поможет!
Вы хотите создать новую вкладку? Если да, то предоставьте более подробную информацию, и я дам вам XML-код :) @SiddharthRout +1 - Я обнаружил, что мне не нужны никакие книги по Excel, просто следите за вашими постами, чтобы узнать, что мне нужно выучить за дневную работу (а сегодня вечером это XML-лента!) :) Я бы порекомендовал создать новый quesiton с базовым xml-кодом и кодом VBA, а затем мы можем взять его там? @YasserKhalilМне удалось добиться этого с помощью VBA в Excel 2013. Никаких специальных редакторов не требуется. Все, что вам нужно, это редактор кода Visual Basic, доступ к которому можно получить на вкладке Разработчик. Вкладка «Разработчик» по умолчанию не отображается, поэтому ее необходимо включить в меню «Файл»> «Параметры»> «Настроить ленту». На вкладке Разработчик нажмите кнопку Visual Basic. Редактор кода запустится. Щелкните правой кнопкой мыши на панели Project Explorer слева. Щелкните меню вставки и выберите модуль. Добавьте оба подпрограммы ниже в новый модуль.
Вызов подпрограммы LoadCustRibbon в Wookbook open even и вызов подпрограммы ClearCustRibbon в событии Before_Close файла кода ThisWorkbook.
Это сработало для меня, но только с парой мелких проблем, с которыми я столкнулся. 1) Если я оставил событие Before_Close, новая лента не загрузилась. 2) Когда мне удалось заставить ленту работать, удалив событие Before_Close, мне пришлось повторно загрузить Excel, прежде чем оно появилось. Если бы вы могли посоветовать, почему это происходит, было бы здорово! Код точно такой же? Вы можете опубликовать это? Идея состоит в том, что Excel должен изменить стандартный файл ленты перед загрузкой ленты и сбросить его перед закрытием книги. Необходимо сбросить настройки ленты, чтобы она не отображалась в других книгах. Этот код перезаписывает все текущие настройки ленты, которые пользователь, возможно, уже сделал. @WizzleWuzzle Это не обязательно. Ленту можно импортировать и преобразовать в объект, по которому можно перемещаться. Затем к объекту могут быть добавлены новые элементы. Результат можно сохранить в файл. Вопрос был в том, как создать собственную ленту; не как изменить существующий. @ Roi-Kyi-Bryant Вопрос состоял в том, чтобы добавить настраиваемый элемент ленты, а не перезаписывать всю текущую настраиваемую ленту. Этот код перезаписывает текущую ленту.Я боролся как сумасшедший, но на самом деле это правильный ответ. Как бы то ни было, я пропустил следующее:
- Как говорят другие, нельзя создать ленту CustomUI с помощью VBA, однако нет необходимости!
- Идея состоит в том, что вы создаете код ленты xml с помощью меню Excel File> Options> Customize Ribbon, а затем экспортируете ленту в файл .customUI (это просто файл txt с xml в нем).
- А теперь уловка : вы можете включить код .customUI в свой файл .xlsm, используя инструмент MS, на который они здесь ссылаются, скопировав код из файла .customUI.
- После включения в файл .xlsm каждый раз, когда вы его открываете, добавляется определенная вами лента. к ленте пользователя, но используйте <tape startFromScratch = "false">, иначе вы потеряете остальную часть ленты. При выходе из книги лента удаляется.
- С этого момента все просто: создайте свою ленту, скопируйте XML-код, относящийся к вашей ленте, из файла .customUI и поместите его в оболочку, как показано выше (. <tabs> ваш xml </ tabs .. .)
Ответы здесь относятся к использованию настраиваемого редактора пользовательского интерфейса. Я потратил некоторое время на создание интерфейса без этой замечательной программы, поэтому я документирую решение здесь, чтобы помочь всем остальным решить, нужен ли им этот пользовательский редактор пользовательского интерфейса или нет.
Чтобы кнопки работали с вашими настраиваемыми макросами, настройте макрос в подпрограммах .xlam, который будет вызываться, как описано в этом ответе SO - Вызов макроса Excel с ленты . По сути, вам нужно добавить этот параметр «control As IRibbonControl» к любому модулю, указанному на вашей ленте xml. Кроме того, ваш XML-файл ленты должен иметь синтаксис onAction = "myaddin! Mymodule.mysub" для правильного вызова любых модулей, загруженных добавлением.
Используя эти инструкции, я смог создать надстройку Excel (файл .xlam), в которой загружается настраиваемая вкладка, когда мой VBA загружается в Excel вместе с надстройкой. Кнопки выполняют код из надстройки, а настраиваемая вкладка удаляется, когда Убираю надстройку.
Набор средств Visual Studio для Office (cреда выполнения)Предоставляет объектную модель со строгой типизацией, которую можно использовать для получения и задания свойств элементов управления ленты во время выполнения. Например, можно динамически заполнять элементы управления меню или отображать или скрывать элементы управления в зависимости от контекста. на ленту можно также добавить вкладки, группы и элементы управления, но только перед загрузкой ленты приложением Office. Дополнительные сведения см. в разделе Задание свойств, которые становятся доступны только для чтения.
Применимо к: Сведения в этом разделе относятся к - проектам уровня документа и к добавлению VSTO - в проекты для следующих приложений: Excel; InfoPath 2013 и InfoPath 2010; Невозможно Приложения Проектом Исправления Словам. Дополнительные сведения см. в разделе доступность функций по типам приложений Office и проектов.
Эта объектная модель ленты состоит главным образом от класса ленты, событий лентыи классов элементов управления ленты.
Класс ленты
при добавлении нового элемента лента (визуальный конструктор) в проект Visual Studio добавляет в проект класс ribbon . Класс Ribbon наследует от RibbonBase класса.
Этот класс отображается как разделяемый класс, который разбивается между файлом кода ленты и файлом кода конструктора ленты.
События ленты
Класс Ribbon содержит следующие три события:
Событие | Описание |
---|---|
Load | возникает, когда приложение Office загружает настройку ленты. LoadОбработчик событий автоматически добавляется в файл кода ленты. Этот обработчик событий используется для запуска пользовательского кода при загрузке ленты. |
LoadImage | Позволяет кэшировать изображения в настройке ленты при загрузке ленты. При написании кода для кэширования образов ленты в этом обработчике событий можно получить небольшое увеличение производительности. Дополнительные сведения см. в разделе LoadImage. |
Close | Возникает при закрытии экземпляра ленты. |
Элементы управления ленты
Microsoft.Office.Tools.Ribbonпространство имен содержит тип для каждого элемента управления, отображаемого в группе Office ленты элементы управления панели элементов.
В следующей таблице показаны типы для каждого Ribbon элемента управления. Описание каждого элемента управления см. в разделе Общие сведения о ленте.
Имя элемента управления | Имя класса |
---|---|
Box | RibbonBox |
Кнопка | RibbonButton |
ButtonGroup | RibbonButtonGroup |
CheckBox | RibbonCheckBox |
ComboBox | RibbonComboBox |
Крывающихся | RibbonDropDown |
Поле | RibbonEditBox |
Коллекции | RibbonGallery |
Группа | RibbonGroup |
Label | RibbonLabel |
Меню | RibbonMenu |
Двоеточи | RibbonSeparator |
SplitButton | RibbonSplitButton |
TAB | RibbonTab |
ToggleButton | RibbonToggleButton |
Microsoft.Office.Tools.RibbonПространство имен использует префикс "Ribbon" для этих типов, чтобы избежать конфликта имен с именами классов элементов управления в System.Windows.Forms пространстве имен.
При добавлении элемента управления в конструктор ленты конструктор ленты объявляет класс для этого элемента управления как поле в файле кода конструктора ленты.
Общие задачи с использованием свойств элементов управления ленты
Каждый Ribbon элемент управления содержит свойства, которые можно использовать для выполнения различных задач, таких как назначение метки элементу управления или скрытие и отображение элементов управления.
В некоторых случаях свойства становятся доступны только для чтения после загрузки ленты или после добавления элемента управления в динамическое меню. Дополнительные сведения см. в разделе Задание свойств, которые становятся доступны только для чтения.
В следующей таблице описаны некоторые задачи, которые можно выполнить с помощью Ribbon свойств элемента управления.
Задание свойств, которые становятся доступны только для чтения
Некоторые свойства можно задать только до загрузки ленты. Задать эти свойства можно тремя способами:
в окне свойства Visual Studio.
В конструкторе класса Ribbon .
В CreateRibbonExtensibilityObject методе ThisAddin ThisWorkbook класса, или ThisDocument проекта.
Динамические меню предоставляют некоторые исключения. Можно создавать новые элементы управления, задавать их свойства, а затем добавлять их в динамическое меню во время выполнения даже после загрузки ленты, содержащей меню.
Свойства элементов управления, добавляемых в динамическое меню, можно задать в любое время.
Задание свойств в конструкторе ленты
Свойства Ribbon элемента управления можно задать в конструкторе класса Ribbon . Этот код должен появиться после вызова InitializeComponent метода. В следующем примере в группу добавляется новая кнопка, если текущее время составляет 17:00 по тихоокеанскому времени (UTC-8) или более поздней версии.
Добавьте следующий код.
Задание свойств в методе Креатериббонекстенсибилитйобжект
Свойства Ribbon элемента управления можно задать при переопределении CreateRibbonExtensibilityObject метода в ThisAddin ThisWorkbook классе, или ThisDocument проекта. Дополнительные сведения о CreateRibbonExtensibilityObject методе см. в разделе Лента Overview.
в следующем примере задаются свойства ленты в CreateRibbonExtensibilityObject методе ThisWorkbook класса Excel проекта книги.
Добавьте следующий код.
Свойства, которые становятся доступны только для чтения
В следующей таблице показаны свойства, которые можно задать только до загрузки ленты.
Свойства элементов управления в динамических меню можно задать в любое время. Эта таблица не применяется в этом случае.
Как я могу скрыть и показать все стандартные вкладки ленты Excel с помощью VBA (не XML). Я не хочу скрывать всю ленту (как здесь спрашивается:VBA свернуть ленту В Excel) просто вкладки. Я знаю, как использовать startFromScratch с помощью XML, поэтому, пожалуйста, не предлагайте это или другие решения XML.
до сих пор я сделал обширный поиск Google и посмотрел at:
Я говорю, что я уже сделал обширный поиск и пробовал много вещей, не получая результата.
как я могу скрыть и показать все стандартные вкладки ленты Excel с помощью VBA (не XML)
ответ "ВЫ НЕ МОЖЕТЕ".
AFAIK, вы не можете сделать это с помощью VBA. К сожалению, VBA не предоставляет вкладки. Единственные параметры, которые у вас есть, как показано на рисунке ниже
таким образом, вы можете работать с commandbar, commandbarButton, commandbarComboBox и т. д.
вы можете сказать, что Set cbar = Application.CommandBars("Ribbon") но после этого проблема, с которой вы столкнетесь, заключается в том, как получить дескриптор для вкладок.
что вы можете сделать с лентой, используя VBA:
- определить, является ли конкретный элемент управления включен,/видимый/нажата(Toggleboxes/флажки)
- получить метку элемента управления, подсказку экрана или подсказку отображения изображения, связанного с управление.
- выполнить определенный контроль.
что вы не можете сделать с лента с использованием VBA:
- определите, какая вкладка выбрана в данный момент.
- активировать определенную вкладку.
- скрыть определенную вкладку
- добавить новую вкладку.
- добавить новую группу в разделе.
- Добавить новый элемент управления.
- удалить/отключить/скрыть элемент управления.
однако вы можете использовать XML для достижения желаемого. Например
но я думаю, вы не хотите идти через XML-маршрут.
вы действительно можете Скрыть/показать ленты с помощью VBA. Вот пример:
настройка скрипта VBA. Sub GetVisible(control As IRibbonControl, ByRef MakeVisible) Select Case control.ID Case "TabDeveloper": MakeVisible = True Case "TabHome": MakeVisible = True Case "TabInsert": MakeVisible = True Case "TabPageLayoutExcel": MakeVisible = True Case "TabFormulas": MakeVisible = True Case "TabData": MakeVisible = True Case "TabReview": MakeVisible = True Case "TabView": MakeVisible = True Case "TabAddIns": MakeVisible = True Case "TabBackgroundRemoval": MakeVisible = True End Sub
Совет: перед редактированием файла XML-ленты закройте книгу Excel, содержащую редактируемую ленту. Я обнаружил, что иногда он стирает мой код VBA (я не знаю, почему, он просто делает).
для активации определенной вкладки
в Microsoft Office 2010 можно активировать пользовательскую вкладку с помощью Метод ActivateTab объекта IRibbonUI
вы используете ActivateTabMso способ встроенных вкладок и ActivateTabQ для вкладок, совместно используемых несколько надстроек.
ActivateTabQ также требует дополнительного Параметр строкового типа, указывающий пространство имен надстройки
Сначала откройте лист Excel, на котором вы хотите скрыть вкладку ленты, затем нажмите Alt + F11 . Вставьте новый модуль кода и добавьте следующий код:
Те, кто программирует на VBA для Excel, в определенный момент задумываются над распространением своих приложений в качестве независимых файлов. Лучшая возможность для организации распространяемых файлов – это создание специальных дополнений или надстроек Excel. За время развития программы появилось несколько типов надстроек. Мы попытались собрать и систематизировать информацию для разработчиков обо всех видах, назначениях, достоинствах и недостатках надстроек Excel.
Персональная книга макросов
Описание: | хранение общих функций и процедур для персонального использования |
Требования: | нет |
Достоинства: | возможность хранения пользовательских функций для работы с данными (UDF) |
Недостатки: | сложности с тиражированием |
Для общих программ и макросов можно использовать, так называемую, личную книгу макросов – по умолчанию это файл PERSONAL.XLS (в Excel 2007-2010 PERSONAL.XLSB). Файл с данным именем создается с при записи макроса средствами Excel. Этот файл будет автоматически загружаться каждый раз при запуске Excel. Местонахождение данного файла в каталоге Windows: ПОЛЬЗОВАТЕЛЬ\Application Data\Microsoft\Excel\XLSTART. На самом деле Excel будет запускать автоматически все файлы из данного каталога, независимо от имен файлов.
В принципе, личные книги макросов можно считать надстройками Excel. В файле PERSONAL.XLS (или любом другом из стартового каталога) можно хранить общие функции и макросы, автоматизирующие часто повторяемые операции. Для выполнения каких-либо операций при старте Excel можно использовать событие Worbook_Open этого файла, либо процедуру Auto_Open в модуле кода.
XLA/XLAM
Описание: | стандартная надстройка |
Требования: | нет |
Достоинства: | возможность создания тиражируемых продуктов |
Недостатки: | слабая защита исходного кода программ. |
Надстройки с расширением xla (в версии 2007-2010 xlam) представляют собой стандартный xls-файл, который может быть открыт как невидимая в списке открытых файлов рабочая книга.
Файл надстройки обычно содержит программный код, который управляет какими-либо оперциями активной рабочей книги Excel. Теоретически, кроме модулей кода, в состав xla-файла могут быть таблицы и даже листы диаграмм, но надо понимать, что особого смысла в этих данных нет, так как нет возможности отобразить эти данные на экране стандартными средствами. На рабочих листах надстройки можно хранить, например, константы для работы кода, если по каким-либо соображениям не хочется использовать константы VBA. Данные в ячейках файла надстройки можно даже изменять во время работы, но сохранять открытый и исполняемый в данный момент файл xla в общем случае недопустимо.
Для доступа к данным рабочей книги надстройки используется объект ThisWorkbook, а для работы с активной рабочей книгой – объект ActiveWorkbook.
В надстройках имеется возможность хранить пользовательские функции для работы с данными рабочих листов (user defined function - UDF). Только надо учитывать, что в этом случае рабочий файл сохраняет ссылку (связь) на файл надстройки по абсолютному пути. Эта особенность может затруднить распространение программных продуктов.
Отладку надстроек лучше производить через xls-файл (не забывая различия между ThisWorkbook и ActiveWorkbook), а впоследствии сохранять этот файл как xla. Нектороые сложности могут в этом случае возникнуть при использовании событий Workbook_AddinInstall и Workbook_AddinUninstall, так как их невозможно эмулировать в простом файле рабочей книги. К счастью, эти события требуются крайне редко; честно говоря, мы не знаем ни одного примера их полезного использования на практике.
Подключать готовую XLA-надстройку можно через соответствующий диалог (Excel 2000-2003 Сервис \ Надстройки, Excel 2007 Кнопка Office \ Параметры Excel\ Надстройки \ Перейти).
Подключаемые надстройки прописываются в реестре Windows по адресу HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ НОМЕР_ВЕРСИИ.0 \ Excel \ Options в строковых параметрах с префиксом OPEN и порядковым номером надстройки (причем первая по порядку надстройка номера не имеет). Управляя этим ключом реестра, можно подключить / отключить надстройку через инсталляционные программы. Это, кстати, еще одна причина никогда не использовать событие Workbook_AddinInstall – очевидно, что оно не будет вызвано при изменении ключей реестра внешними программами.
Имя и описание надстройки можно задать в свойствах файла перед его сохранением в форматие xla/xlam (Excel 2000-2003 Файл \ Свойства, Excel 2007 Кнопка Office \ Подготовить \ Свойства).
Важным преимуществом надстройки XLA/XLAM вместо использования кода внутри рабочих файлов является возможность повторного использования кода VBA. Кроме того, установленные надстройки не спрашивают о наличии макросов при запуске Excel на любом уровне безопасности.
Интересная, но скорее всего бесполезная в работе информация. Надстройки XLA в Excel версии 5.0-8.0 (95-97) хранятся в скомпилированном виде. В связи с этим, там просто нет исходного текста программ в открытом или зашифрованном виде. Эта особенность приводит к невозможности декомпиляции или вскрытию кода специальными средствами. К сожалению, в последующих версиях Excel надстройки хранятся в нескомпилированном виде и легко преобразуются в доступный для изменения файл, даже будучи защищенными паролями. Microsoft рекомендует использовать для разработчиков возможности COM-DLL и средства VSTO (см. далее).
В качестве примера XLA-надстройки, можно ознакомиться с исходным кодом надстройки ExcelFin в разделе Программы.
XLS/XLA как ссылка
Описание: | библиотека кода VBA |
Требования: | нет |
Достоинства: | не требует компиляции во внешних программных продуктах |
Недостатки: | сложность распространения из-за абсолютных ссылок на файлы |
Если вы создали набор общеупотребительных функций, но не имеете возможность скомпилировать библиотеку в виде XLL или DLL-файла (см.ниже), то можно подключить любой VBA-код XLS-файла в качестве ссылки в проекте. Делается это в окне редактора кода через меню Tools \ References.
В этом случае вы также можете избавиться от повторного использования кода, но такой вариант вызывает дополнительные сложности при распространении рабочего файла, так как в проекте сохраняются абсолютные пути к ссылкам.
При использовании общего кода XLA-надстроек и ссылок к XLS-файлам важную роль играет определение методов и свойств класса Friend. Эти методы и свойства видны внутри проекта, но не во внешнем файле, использующем ссылку. Внутри одного файла определение Friend соответствует Public.
Описание: | библиотека функций рабочего листа |
Требования: | компилятор C/C++ и API-библиотека |
Достоинства: | создание наиболее производительных функций с полным встраиванием в интерфейс Excel |
Недостатки: | нет |
Наиболее производительные пользовательские функций для работы с таблицами реализуются при помощи XLL-надстроек.
XLL-надстройка представляет собой скомпилированный на C/C++ файл динамической библиотеки Windows, специально предназначенной для использования в Excel. Разработчикам предоставляется специальная библиотека C API (Excel XLL SDK). Использование языка C с возможностью управления памятью позволяют разработать самые мощные и производительные функции для работы с данными Excel. Сравните производительность встроенных функций и UDF, разработанных на VBA.
Мы не имеем практического опыта разработки XLL-надстроек, поэтому желающих разрабатывать библиотеки такого типа отсылаем к MSDN.
Имеется не очень стандартный способ регистрации UDF-функций для вывода пользовательской функции на VBA в интерфейсе Excel через Application.ExecuteExcel4Macro(“REGISTER(…)”) . Метод проверен и работает. Но не дает никаких преимуществ в производительности функций, поэтому в практической работе его ценность сомнительна. Подробнее читайте:
COM DLL (Office Developer Tools – ODT)
Описание: | полнофункциональная надстройка Excel |
Требования: | ODE 97 или ODT XP |
Достоинства: | возможность создания интерфейса любой сложности; полностью закрытый исходный код. |
Недостатки: | невозможно создание пользовательских функций для работы с данными (UDF) |
Главной особенность Excel ODT является наличие возможности создания проекта VBA независимого от xls-файла, с возможностью последующей компиляции данного проекта в файл формата DLL (ActiveX DLL).
Исходный VBA-проект содержит специальный дизайнер с методами обработки событий Excel. В проекте, кроме этого, доступны для создания обычные модули кода, классы и формы. Причем формы могут быть открыты немодально. Надстройки данного типа могут быть подключены к различным версиям Excel одновременно. Файл DLL, скомпилированный с помощью ODE/ODT не требует никаких дополнительных исполняемых модулей для своей работы, кроме, собственно говоря, Excel.
Здесь важное замечание, что, даже если вас заинтересовали возможности ODE/ODT, вам вряд ли удастся приобрести лицензионные версии этих продуктов – Microsoft с 2003го года прекратил их распространение. Вообще же вероятно, что в России, официальным способом было приобретено совсем небольшое количество копий пакетов для разработчиков, поэтому искать пиратскую версию этих продуктов тоже особого смысла не имеет.
Настройка ленты Office 2007:
В отличие от панелей инструментов, новый пользовательский интерфейс Excel 2007 в виде ленты (ribbons) не имеет встроенных механизмов настройки напрямую через VBA.
Имеется довольно странный механизм настройки ленты через редактирование xml-файла. Формат xlsx представляет из себя zip-архив нескольких файлов и папок, в одном из которых доступна настройка на ленте пользовательских функций. Странно, но разработчики Excel почему-то не предоставили интерфейс для настройки ленты иным способом. Подробнее см. MSDN:
Вызов процедур COM-DLL из VBA
В тех случаях, когда основной алгоритм закрыт в COM-надстройке, вызов функций и процедур (например, из обработчиков пунктов меню) осуществляется через механизм позднего связывания (Late-bound). Для получения доступа к объекту надстройки используется функция COMAddIns объекта Application с указанием имени COM-надстройки. Например:
COM DLL (Visual Studio Tools for Office – VSTO)
Комментарии
. Workbook_AddinInstall и Workbook_AddinUninstall, так как их невозможно эмулировать в простом файле рабочей книги. К счастью, эти события требуются крайне редко; честно говоря, мы не знаем ни одного примера их полезного использования на практике.
Хорошее замечание.Действительно, хранить udf в xla можно. Только в этом случае формула использует xla как ссылку на файл (можно посмотреть в меню 2000-2003 Правка\Связи или 2007 Подготовить\Использовать ссылки на файлы).
В обычной работе это скорее всего никак не сказывается, но проблемы могут возникнуть при распространении надстройки из-за абсолютных путей в ссылках.
Исправил текст статьи. Спасибо.
. В надстройках нет возможности хранить пользовательские функции для работы с данными рабочих листов (user defined function - UDF).
Как это нет. я храню и использую пользовательские функции которые хранятся в .xla файле, и никаких проблем.
Читайте также: