Использование Visual Basic Editor. Свойства и методы объекта CodeModule

   
На этом шаге мы рассмотрим использование некоторых свойств и методов объекта CodeModule.

   
В примере предыдущего шага мы рассмотрели и использовали только одно свойство
элемента коллекции VBComponents - объект CodeModule. Сам объект CodeModule содержит
тексты макросов и набор методов и свойств, позволяющих манипулировать ими (таблица 1).

Таблица 1. Некоторые свойства и методы объекта CodeModule

Свойство или методТипНазначение
AddFromFileМетодЗагрузка текста из файла
AddFromStringМетодЗагрузка текста из строки
CountOfLinesIntegerКоличество строк текста в программном модуле
CountOfDeclarationLinesIntegerКоличество строк текста в разделе описании
InsertLinesМетодВставка текста из строки
DeleteLinesМетодУдаление текста из модуля
LinesМетодВозвращение текста модуля
ProcBodyLineIntegerНомер первой строки процедуры
ProcCountLinesIntegerКоличество строк в процедуре
ProcOfLineStringИмя процедуры, содержащей строку с заданным номером
ProcStartLineIntegerНомер строки, с которой начинается заданная процедура

   
Используя свойство Lines, получим текст модуля проекта на языке Visual Basic. Для этого
воспользуемся следующей процедурой.

procedure TForm1.Button7Click(Sender: TObject);
//Получение текста модуля
var
  S:string;
  Y:Integer;
begin
  //Количество элементов коллекции
  Y:=E.VBE.VBProjects.Item(1).VBComponents.Count;
  //Получить ссылку на последний элемент коллекции
  CM:=E.VBE.VBProjects.Item(1).VBComponents.
       Item(Y).CodeModule;
  S:=CM.Lines[1,CM.CountOfLines];
  MessageBox(handle,PChar(S),'',0);
end;

   
Перед тем как воспользоваться представленной процедурой, необходимо открыть рабочую книгу, которая
должна содержать макросы, или создать макрос самостоятельно. При этом результат выполнения процедуры будет
выглядеть так, как показано на рисунке 1.


Рис.1. Отображаем содержимое программного модуля

   
Приведем полный текст приложения.

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;
    Button3: TButton;
    Button4: TButton;
    OpenDialog1: TOpenDialog;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E: Variant;
  CM: 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);
//Получение номера версии VBE
var
  Version: String;
begin
  Version:=E.VBE.Version;
  MessageBox(handle,PChar(Version),'Номер версии Visual Basic',0);
end;

procedure TForm1.Button3Click(Sender: TObject);
//Создание формы Microsoft
const
  vbext_ct_MSForm=3;
begin
  E.VBE.VBProjects.Item(1).VBComponents.Add(vbext_ct_MSForm);
end;


procedure TForm1.Button5Click(Sender: TObject);
//Загрузка текста модуля из текстового файла
begin
  if OpenDialog1.Execute then
     E.VBE.VBProjects.Item(1).VBComponents.Import(OpenDialog1.FileName);
end;

procedure TForm1.Button6Click(Sender: TObject);
//Загрузка текста макроса из строки
const
  vbext_ct_StdModule=1;
var
  S:String;
begin
  CM:=E.VBE.VBProjects.Item(1).VBComponents.
     Add(vbext_ct_StdModule).CodeModule;
  S:='Sub Новый_макрос()'+Chr(10)+Chr(13)+
  'MsgBox "Новый макрос"'+Chr(10)+Chr(13)+'End Sub  ';
  CM.AddFromString(S);
  E.Run ('Новый_макрос()');
end;

procedure TForm1.Button7Click(Sender: TObject);
//Получение текста модуля
var
  S:string;
  Y:Integer;
begin
  //Количество элементов коллекции
  Y:=E.VBE.VBProjects.Item(1).VBComponents.Count;
  //Получить ссылку на последний элемент коллекции
  CM:=E.VBE.VBProjects.Item(1).VBComponents.
       Item(Y).CodeModule;
  S:=CM.Lines[1,CM.CountOfLines];
  MessageBox(handle,PChar(S),'',0);
end;

end.

Текст этого приложения вместе с файлом macro.txt можно взять здесь (7,7 Кб).

   
На следующем шаге мы рассмотрим пример небольшого приложения.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий