Здравствуйте, morok, Вы писали:
M>Дело вот в чем. При вожу код на VBA
M>M>'Create two ranges and then union them
M>Set r1 = range("a1", "a2")
M>Set r2 = range("a1", "b2")
M>Set ur = Union(r1, r2)
M>'Create new Name object and bind it with the range union
M>Set newName = Application.Names.Add("TestName", ur.Address(True, True, xlA1, True))
M>'Get name object from the application
M>Set foundName = Application.Names.Item("TestName")
M>str = Replace(foundName.RefersTo, Chr(34), "")
M>'Get range from name
M>Set r = Application.range(str)
M>r.Interior.ColorIndex = 5
M>
Можно, наверное, и так, но я бы сделала типа
_bstr_t sAddr1 = r1->GetAddress(_variant_t(true), _variant_t(true),Excel::xlA1, _variant_t(true) );
_bstr_t sAddr2 = r2->GetAddress(_variant_t(true), _variant_t(true),Excel::xlA1, _variant_t(true) );
_bstr_t sAddr = _bstr_t("=") + sAddr1 + _bstr_t(";") + sAddr2;
NamePtr name = pBook->GetNames()->Add(_variant_t("TestName"), sAddr);
RangePtr foundRange = pXL->GetRange( _variant_t("TestName") );
потому что если устанавливать вручную имя для несвязанного диапазона, то лист повторяется для каждого диапазона, наверное, Excel'ю "так понятнее". Точка с запятой в Russian locale, в English — запятая, это можно через Internatonal узнавать в произвольном случае