Шаг 221.
Автоматизация Microsoft Excel. Программирование свойств MS Excel.
Использование Visual Basic Editor. Пример приложения

    На этом шаге мы рассмотрим небольшой пример использования панелей, элементов управления и макросов.

    Рассмотрим пример с использованием программирования панелей, элементов управления и макросов. В этом примере мы из приложения Delphi создадим временные элементы управления и процедуру на Visual Basic, выполним ее и удалим созданные компоненты.

    Вот текст приложения.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj, CheckLst, Spin;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E: Variant;
  CM: Variant;
  CB:variant;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//Создание объекта Excel и его визуализация
begin
  E:=CreateOleObject('Excel.Application');
  E.Visible:=True;
end;

procedure TForm1.Button4Click(Sender: TObject);
//Создание рабочей книги
begin
  E.WorkBooks.Add;
end;

procedure TForm1.Button2Click(Sender: TObject);
//Создать и выполнить макрос
const
  vbext_ct_StdModule=1;
  msoBarFloating=4;
  msoControlButton=1;
var
   MSB:Variant;
   S:string;
begin
  CM:=E.VBE.VBProjects.Item(1).VBComponents.
     Add(vbext_ct_StdModule).CodeModule;
  S:='Sub Макрос1()'+Chr(10)+Chr(13)+
    'MsgBox '+Chr(34)+'Выполняется процедура нажатия кнопки'+
    Chr(34)+Chr(10)+Chr(13)+
    'set document=Application.WorkBooks.Add '+Chr(10)+Chr(13)+
    'Dim pts(1 To 7, 1 To 2) As Single '+Chr(10)+Chr(13)+
    'pts(1, 1) = 0 '+Chr(10)+Chr(13)+
    'pts(1, 2) = 0 '+Chr(10)+Chr(13)+
    'pts(2, 1) = 72 '+Chr(10)+Chr(13)+
    'pts(2, 2) = 72 '+Chr(10)+Chr(13)+
    'pts(3, 1) = 100 '+Chr(10)+Chr(13)+
    'pts(3, 2) = 40 '+Chr(10)+Chr(13)+
    'pts(4, 1) = 20 '+Chr(10)+Chr(13)+
    'pts(4, 2) = 50 '+Chr(10)+Chr(13)+
    'pts(5, 1) = 90 '+Chr(10)+Chr(13)+
    'pts(5, 2) = 120 '+Chr(10)+Chr(13)+
    'pts(6, 1) = 60 '+Chr(10)+Chr(13)+
    'pts(6, 2) = 30 '+Chr(10)+Chr(13)+
    'pts(7, 1) = 150 '+Chr(10)+Chr(13)+
    'pts(7, 2) = 90 '+Chr(10)+Chr(13)+
    'ActiveSheet.Shapes.AddPolyline (pts) '+Chr(10)+Chr(13)+
    'End Sub';
  CM.AddFromString(S);
  S:=CM.Name;
  MessageBox(handle,PChar('Макрос "Макрос1" создан в модуле "'+S+'"'),'',0);

  CB:=E.CommandBars.Add(Name:='Временная панель',
      Position:=msoBarFloating);
  CB.Enabled:=True;
  CB.Visible:=True;
  MessageBox(handle,PChar('Создана временная панель'),'',0);

  MSB:=E.CommandBars.Item['Временная панель'].
     Controls.Add(Type:=msoControlButton, ID:=1);
  MSB.Caption:='Временная кнопка';
  MSB.OnAction:=CM.Name+'.Макрос1';
  MessageBox(handle,PChar('Создана временная кнопка'),'',0);

  MSB.Execute;
  MSB.Delete;
  MessageBox(handle,PChar('Удалена временная кнопка'),'',0);
  CB.Delete;
  MessageBox(handle,PChar('Удалена временная панель'),'',0);

  E.Application.VBE.VBProjects.Item(1).
     VBComponents.Remove(CM.parent);
  MessageBox(handle,PChar('Модуль "'+S+'" и "Макрос1" удалены'),'',0);
end;


end. 
Текст этого приложения можно взять здесь (7,5 Кб).

    Основной процедурой является Button2Click(). В первом операторе этой процедуре мы создаем программный модуль и получаем доступ к нему, чтобы записать текст создаваемого макроса. Далее в строковую переменную записываем текст создаваемого макроса, учитывая стиль написания операторов Visual Basic. Оператор

  CodeModule.AddFromString(S);
где S - строка, содержащая текст макроса, записывает текст макроса в модуль. Далее создаем меню и кнопку, в свойство OnAction которой записываем строку - имя модуля и макроса, разделенные точкой. Метод Execute кнопки запускает созданный макрос на выполнение. Далее удаляем кнопку, панель и компонент, содержащий программный модуль.

    Результат выполнения этой процедуры изображен на рисунке 1.


Рис.1. Результат выполнения процедуры

    На следующем шаге мы рассмотрим коллекцию диалогов.




Предыдущий шаг Содержание Следующий шаг