Описание:
процесс создания простой надстройки MS Excel. Приводятся детальные инструкции и полный текст примера. Содержание:
ВведениеНадстройка Microsoft Excel - это книга с расширением .xla. Надстройки являются идеальным способом хранения и распространения завершенных приложений, пользовательских функций и утилит. Преимущества распространения решений в виде надстроек следующие:
Щелчок комманды Report в меню Сервис (Tools) запускает надстройку Отчет продаж продуктов, описываемую в этой статье. Следующий раздел опивывает, как добавить комманду Report в пользовательский интерфейс Excel. Добавление комманды в меню Сервис (Tools)(Примечание: этот код не будет работать, пока вы не установите надстройку, как это сделать - описано ниже)
Option Explicit Private Sub Workbook_AddinInstall() ' This procedure adds an item to the Tools ' menu on the worksheet menu bar. ' This will be set to the Tools menu. Dim objCmdBrPp As CommandBarPopup ' This will be set to the Project menu item. Dim objCmdBtn As CommandBarButton ' Create an object variable referring ' to the Tools menu. Set objCmdBrPp = Application.CommandBars _ ("Worksheet Menu Bar").Controls("Tools") ' Add a command in the fourth position ' on the Tools menu. On Error Resume Next ' This generates a run-time error if ' the menu item is absent. Set objCmdBtn = objCmdBrPp.Controls("Report") ' If a run-time error is generated, ' add the menu item. If Err.Number <> 0 Then Set objCmdBtn = objCmdBrPp.Controls.Add _ (Type:=msoControlButton, before:=4) End If ' Disables the error handler. On Error GoTo 0 ' Set properties for the new menu item. With objCmdBtn .Caption = "Report" .OnAction = "AddInCode.Master" End With End Sub Private Sub Workbook_AddinUninstall() ' This procedure deletes an item on the Tools ' menu on the worksheet menu bar. ' If the Project command exists, delete it. On Error Resume Next Application.CommandBars("Worksheet Menu Bar") _ .Controls("Tools").Controls("Report").Delete End Sub События AddinInstall и AddinUninstall возникают, когда надстройка инсталлируется и деинсталлируется и являются удобным местом для расположения инициализационного кода и кода очистки. В данном случае мы добавляем комманду Report в меню Сервис (Tools). Метод Delete в событии AddinUninstall полагается на наименование элемента, а не на его позицию, чтобы правильно определить удаляемый элемент: Application.CommandBars("Worksheet Menu Bar") _ .Controls("Tools").Controls("Report").DeleteЭто делается потому, что при перезапуске Excel позиция нашего пользовательского пункта меню может измениться со всеми вытекающими последствиями. Свойство OnAction устанавливает имя процедуры, которая запускается по щелчку комманды Report. With objCmdBtn .Caption = "Report" .OnAction = "AddInCode.Master" End With Построение Отчета продаж продуктовСледующий раздел описывает, как создать код, который строит Отчет продаж продуктов.
Option Explicit Dim objRecordset As Recordset Dim objWorkbook As Excel.Workbook Sub Master() ' Called by the AddinInstall event. ' This procedure calls other procedures and ' cleans up object variables. Call DbConnect Call GetProductData ' Close object variables. Set objRecordset = Nothing Set objWorkbook = Nothing End Sub Sub DbConnect() ' Called by Master procedure. ' This procedure opens the database and ' creates the Recordset object that ' contains data for the presentation. Dim dbsNorthwind As Database ' Edit this path to match your drive, if necessary. Set dbsNorthwind = OpenDatabase _ ("C:\Program Files\Microsoft " _ & "Office\Office\Samples\Northwind.mdb") Set objRecordset = dbsNorthwind. _ OpenRecordset("product sales for 1995", _ dbOpenSnapshot) Set dbsNorthwind = Nothing End Sub Sub GetProductData() ' Called by Master procedure. ' This procedure retrieves data ' from the product sales query. ' Open the report template. ' Store a reference to the workbook ' containing the template. Set objWorkbook = Excel.Workbooks.Add("report.xlt") ' Get data from the query. With objRecordset Do ' Call the procedure that adds this ' data to the template worksheet. Call AddToSheet _ (objRecordset.AbsolutePosition, _ objRecordset!ProductName & "", _ objRecordset!CategoryName & "", _ objRecordset!ProductSales) ' Move to the next record. .MoveNext Loop Until .EOF = True End With End Sub Sub AddToSheet(lngRowNumber As Long, _ strProdName As String, _ strCatName As String, _ lngProdSales As Long) ' Called by GetProductData procedure. ' This procedure adds data to the template. With objWorkbook.Worksheets(1) _ .Rows(lngRowNumber + 3) .Cells(, 1).Value = strProdName .Cells(, 2).Value = strCatName .Cells(, 3).Value = lngProdSales End With End Sub Данные берутся из Access-запроса и передаются в процедуру AddToSheet с помощью следующей последовательности действий из поцедуры GetProductData. Первое выражение, objRecordset.AbsolutePosition передаёт номер строки. Следующие два выражения, objRecordset!ProductName & "" и objRecordset!CategoryName & "" получают строковое значение из запроса Access и добавляют к результату строку нулевой длины. Добавление стрки нулевой длины предотвращает появление ошибки "Invalid use of Null" в случае появления нулевой величины. With objRecordset Do ' Call the procedure that adds this data ' to the template worksheet. Call AddToSheet _ (objRecordset.AbsolutePosition, _ objRecordset!ProductName & "", _ objRecordset!CategoryName & "", _ objRecordset!ProductSales) ' Move to the next record. .MoveNext Loop Until .EOF = True End WithЭти операторы в процедуре AddToSheet добавляют данные к шаблону отчета. Текущий номер записи объекта Recordset передаётся аргументом lngRowNumber и используется, чтобы установить номер строки в опрераторе With ... End With. При установленном номере строки свойство Cells работает уже лишь с аргументом столбца. With objWorkSheet.Rows(lngRowNumber + 3) .Cells(, 1).Value = strProdName .Cells(, 2).Value = strCatName .Cells(, 3).Value = lngProdSales End With Загрузка, выгрузка и запуск надстройки
© design & content by Acidigital, 2001
|
||||