Re[7]: Уж извините за назойливость
От: morok Россия  
Дата: 01.04.05 04:13
Оценка:
Здравствуйте, Elena_, Вы писали:

E_>Здравствуйте, 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>>


E_>Можно, наверное, и так, но я бы сделала типа

E_>
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_>


E_>потому что если устанавливать вручную имя для несвязанного диапазона, то лист повторяется для каждого диапазона, наверное, Excel'ю "так понятнее". Точка с запятой в Russian locale, в English — запятая, это можно через Internatonal узнавать в произвольном случае


Все хорошо. Это идея хорошая

если устанавливать вручную имя для несвязанного диапазона, то лист повторяется для каждого диапазона, наверное, Excel'ю "так понятнее".

Но вот только проблема в том, что при создании нового имени необходимо чтобы оно было таким:
"="[Книга1]Лист1!$A$1:$B$1""
Причем наличие кавычек похоже является критическим. Я только что проверил. Приведенная вами конструкция не хочет работать.

_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") );
Лень — это не врожденное чувство советского человека, а средство борьбы с неуемной, но бестолковой энергией начальника...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.