От: | morok | ||
Дата: | 01.04.05 04:13 | ||
Оценка: |
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>>
E_> _bstr_t sAddr1 = r1->GetAddress(_variant_t(true), _variant_t(true),Excel::xlA1, _variant_t(true) );
E_> _bstr_t sAddr2 = r2->GetAddress(_variant_t(true), _variant_t(true),Excel::xlA1, _variant_t(true) );
E_> _bstr_t sAddr = _bstr_t("=") + sAddr1 + _bstr_t(";") + sAddr2;
E_> NamePtr name = pBook->GetNames()->Add(_variant_t("TestName"), sAddr);
E_> RangePtr foundRange = pXL->GetRange( _variant_t("TestName") );
E_>
Но вот только проблема в том, что при создании нового имени необходимо чтобы оно было таким:если устанавливать вручную имя для несвязанного диапазона, то лист повторяется для каждого диапазона, наверное, Excel'ю "так понятнее".
_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;
//-------А Вот на этом месте и вылетает,но если получить строку таким образом, то все нормально
//_bstr_t sAddr = _bstr_t("=\"") + sAddr1 + _bstr_t(";") + sAddr2 + _bstr_t("\"");
NamePtr name = pBook->GetNames()->Add(_variant_t("TestName"), sAddr);
//------------------------------------------------------------------
RangePtr foundRange = pXL->GetRange( _variant_t("TestName") );