BCB中多个listview分SHEET导出到一个EXCEL中报错,该如何处理

BCB中多个listview分SHEET导出到一个EXCEL中报错
报错为这里sysvari.h文件中的这个函数
  Variant Variant::OlePropertyGet(const String& name, P1 p1)
  {
    TAutoArgs<1> args;
    args[1] = p1;
    return OlePropertyGet(name, static_cast<TAutoArgsBase*>(&args));//这里报错  
   }

报的错是“raised exception class EOleSysError with message'发生意外。',Process stopped,Use Step or Run to continue."

我的listview导出到EXCEL的函数内容如下
    i_cols1 = lv1->Columns->Count;
    i_rows1 = lv1->Items->Count;
    i_cols2 = lv2->Columns->Count;
    i_rows2 = lv2->Items->Count;
    i_cols3 = lv3->Columns->Count;
    i_rows3 = lv3->Items->Count;
    i_cols4 = lv4->Columns->Count;
    i_rows4 = lv4->Items->Count;

    //路径
    TSaveDialog* sd = new TSaveDialog(NULL);
    sd->DefaultExt = "xls";
    sd->Filter = "*.xls";
    __try
    {
        if(s_path_to_save.Trim().Length())
            sd->FileName = s_path_to_save;
        if(sd->Execute())
        {
            s_path_to_save = sd->FileName;
            //验证文件是否已存在
            if(FileExists(s_path_to_save) && MessageBox(NULL, "文件已存在,覆盖原文件吗?", "提示", MB_ICONQUESTION|MB_YESNO)!=ID_YES)
                return;
        }
        else
            return;
    }
    __finally
    {
        delete sd;
    }

    //扫描文档的列和行
    Variant Ex, wb, st1, st2, st3, st4, range;
    try
    {
        Ex = Variant::CreateObject("Excel.Application");
    }
    catch(...)
    {
        return;
    }
    Ex.OlePropertySet("Visible",true);
    Ex.OlePropertySet("DisplayAlerts", false);

    Ex.OlePropertyGet("Workbooks").OleFunction("Add"); // 工作表

    //选择工作表1
    Ex.OlePropertyGet("ActiveWorkbook").OlePropertyGet("Sheets", 1).OleProcedure("Select");
    wb = Ex.OlePropertyGet("ActiveWorkBook");
    st1 = wb.OlePropertyGet("ActiveSheet");
    st1.OlePropertySet("Name","A");