Как задать имя области ячеек?
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