|
Добавление имени в рабочую книгу
Используя раннее связывание
var
IName: Excel8_TLB.Name;
...
IName := IWorkbook.Names.Add('AddedName', '=Лист1!$A$1:$D$3', EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam);
Первый параметр - новое имя, второй - область, на которую ссылается имя. Если
третий параметр - False, имя будет скрытым, и не будет появляться в
диалогах "Определить имя" или "Перейти к"
Используя позднее связывание
var
Name: OLEVariant;
...
Name := Workbook.Names.Add('AddedName', '=Лист1!$A$1:$D$3')
Примечание:
Обратите внимание на использование
абсолютной адресации в параметре RefersTo (знак $).
Добавление макроса в рабочую книгу
Вы можете изменять код Excel VBA во время выполнения, записывая напрямую в модуль кода
редактора Excel VBA, добавляя или удаляя строки и события. Важным объектом здесь является
CodeModule (хитро упрятанный глубоко в недра справки по VBA). Его объявление можно найти в
файле VBIDE97.pas. Пример, как его можно использовать:
uses VBIDE8_TLB;
...
var
LineNo: integer;
ICodeModule: VBIDE8_TLB.CodeModule;
...
ICodeModule := IWorkbook.VBProject.VBComponents.Item('ЭтаКнига').CodeModule;
LineNo := ICodeModule.CreateEventProc('Activate', 'Workbook');
CodeModule.InsertLines(LineNo + 1, ' Range("A1").Value = "Книга открыта!"');
А вот так можно добавить новый модуль:
var
IModule: VBIDE8_TLB.VBComponent;
...
IModule := IWorkbook.VBProject.VBComponents.Add( TOLEEnum(VBIDE8_TLB.vbext_ct_StdModule) );
IModule.Name :='MyModule1';
,поместить в него новую процедуру VBA:
IModule.CodeModule.AddFromString('PUBLIC SUB MySub1()'#13'Msgbox "Hello, World!"'#13'End sub'#13);
и запустить эту процедуру
OLEVariant(Excel).Run('MyModule1.MySub1');
|