Показать сообщение отдельно
Старый 09.07.2010, 16:43   #1  
Toto is offline
Toto
Участник
 
2 / 10 (1) +
Регистрация: 09.07.2010
Ошибка времени выполнения в ComExcelDocument_RU.findRange()
DAX 2009 и Excel 2007.

При вызове метода insertRows класса ComExcelDocument_RU, по непонятным мне причинам, на одних и тех же данных время от времени вываливается ошибка времени выполнения "неправильные типы аргументов в операции присвоения значения переменной" на 18 строке метода findRange
X++:
comApplication = m_comDocument.application();
. Если пошагово под отладчиком пройти данные методы, то ошибки не возникает, но стоит запустить на выполнение в нормальном режиме - может возникнуть ошибка.

метод insertRows
X++:
void insertRows(int _fromRow,
                int _toRow,
                int _fromWorkSheet = 1,
                int _offset        = 1,
                int _numOfCopies   = 1,
                // CIT_MSOfficeReport, kirp -->
                /*
                int _toWorkSheet   = 1)
                */
                int                 _toWorkSheet        = 1,
                MSOfficeBookMark_RU _copyFromBookmark   = "")
                // CIT_MSOfficeReport, kirp <--
{
    COM         comRows,
                comWorkSheet,
                comRow, comRowTarget, selection;
    COMVariant  comRowVariant, selVariant;
    ;

    if (_numOfCopies <= 0)
        return;

    if (! m_comDocument)
        throw error(strfmt("@GEE6401", this.getApplicationName()));

    // CIT_MSOfficeReport, kirp -->
    if (_copyFromBookmark)
    {
        comRow = this.findRange(_copyFromBookmark, _fromWorkSheet);
        comRow.copy();
    }
    else
    {
    // CIT_MSOfficeReport, kirp <--

        comRow = this.findRange(strFmt("%1:%2", _fromRow, _toRow), _fromWorkSheet);
        comRow.copy();
    // CIT_MSOfficeReport, kirp -->
    }
    // CIT_MSOfficeReport, kirp <--

    comRowTarget = this.findRange(strFmt("%1:%2", _fromRow + _offset, _fromRow + _offset + (_toRow - _fromRow + 1) * _numOfCopies - 1), _toWorkSheet);
    comRowTarget.select();
    comRowTarget.insert();

    comWorkSheet  = this.getWorkSheet(_toWorkSheet);
    comRows = comWorkSheet.cells();
    comRows = COM::createFromVariant(comRows.item(1));
    comRows.select();
    m_comApplication.cutCopyMode(false);
}
метод findRange
X++:
// Creates object range type named the same way as Excel bookmark
// bookMark -> Excel bookmark name
// CIT_MSOfficeReport, ilso -->
/*
protected COM findRange(MSOfficeBookMark_RU bookMark, int _workSheet = 1)
*/
public COM findRange(MSOfficeBookMark_RU bookMark, int _workSheet = 1)
// CIT_MSOfficeReport, ilso <--
{
    COM comRange,
        comWorkSheet;
    COM comApplication;
    ;

    if (m_comDocument)
    {
        comWorkSheet   = this.getWorkSheet(_workSheet);
        comApplication = m_comDocument.application();
        comWorkSheet.activate();

        if (comWorkSheet && comApplication)
        {
            comRange = comApplication.range(bookMark);
        }
    }
    return comRange;
}
insertRows вызывается с первыми 5 параметрами.
Подскажите, пожалуйста, в чем может быть дело.

PS. В поиске ничего не нашел.