Excel ЧаВо


Как задать имя области ячеек?


Delphi:

// создадим функцию для проверки наличия именованной области ячеек на листе

function RangeNameExists(ASheet: ExcelWorksheet; const ARangeName: String): Boolean; var

i: Integer; S: ExcelWorksheet; WB: ExcelWorkbook;

begin

Result := False; if not Assigned(ASheet) then Exit; WB := ASheet.Parent as ExcelWorkbook; for i := 1 to WB.Names.Count do begin

if AnsiSameText(WB.Names.Item(i, EmptyParam, EmptyParam).Name_, ARangeName) then begin

// имя нашли, а на нашем ли листе?

S := WB.Names.Item(i, EmptyParam, EmptyParam).RefersToRange.Worksheet as ExcelWorksheet; Result := AnsiSameText(S.Name, ASheet.Name); if Result then Break; end; end;

end;

// присвоим имя "MyNamedRange" области "B2:D7"

(ASheet.Parent as ExcelWorkbook).Names.Add( 'MyNamedRange', // Name,

ASheet.Range['B2:D7', EmptyParam], // RefersTo: OleVariant; стиль адресации A1



True, // Visible: OleVariant;

EmptyParam, // MacroType: OleVariant;

EmptyParam, // ShortcutKey: OleVariant;

EmptyParam, // Category: OleVariant;

EmptyParam, // NameLocal: OleVariant;

EmptyParam, // RefersToLocal: OleVariant;

EmptyParam, // CategoryLocal: OleVariant;

EmptyParam, // RefersToR1C1: OleVariant; // адрес в стиле R1C1

EmptyParam // RefersToR1C1Local: OleVariant

); // : Name;

// теперь попробуем определить наличие именованной области и, если есть такая,

// обведем область рамкой

if RangeNameExists(ASheet, 'MyNamedRange') then ASheet.Range['MyNamedRange', EmptyParam].BorderAround( xlContinuous, xlThick, xlColorIndexAutomatic, EmptyParam );

Если вы зададите области имя, уже существующее в листе, то старое имя будет утеряно, т.е. получится перезапись имени. Присваивать имена области ячеек можно и неактивному листу. Задавать адрес ячейки можно и как текст (не обязательно ссылку на объект Range), а также можно в стиле R1C1, указав адрес области ячеек в параметре RefersToR1C1.

Names Collection Object

Add Method

How to: Create New Named Ranges in Worksheets



Содержание раздела