Показать сообщение отдельно
Старый 14.10.2008, 14:19   #25  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Да уже всё распутано, вроде. Глаза постом выше поднимите

if (comRange.MergeCells()) перед Insert надо поставить

и не comRangeОдин, а просто comRange там - идёт преобразование comRange по ходу.

Вот ваш метод:
X++:
void copyAndInsertBlock(str _bookMark, int _workSheet = 1)
{  #define.xlShiftDown(-4121)
    COM         comRange, comRange1;
    int         rowsNumber;
    ;

    if (! m_comDocument)
        throw error(strFmt("@DIS6401", this.getApplicationName()));

    comRange = this.findRange(_bookMark, _workSheet);
    if (! comRange)
    {
        return;
    }

    if (comRange.MergeCells())
    {
        comRange = comRange.Range('A1');
        comRange = comRange.MergeArea();
    }

    rowsNumber = any2int(COM::createFromObject( comRange.Rows() ).Count());

    comRange.Insert( #xlShiftDown );  // и выше добавить: #define.xlShiftDown(-4121)
    comRange1 = comRange.Offset(-rowsNumber);
    comRange.Copy(comRange1);
}
За это сообщение автора поблагодарили: gl00mie (5).