Есть класс 
class TMyThread : public TThread
{
private:
TDataSet *DataS;
Variant Aplik;
Variant Shet;
protected:
    void __fastcall Execute();
public:
    __fastcall TMyThread(   bool CreateSuspended,
                            TDataSet * Nabor
                             );
     void __fastcall ThreadFunc();
     void __fastcall ExcelInitOpen(String File);
     __fastcall ~TMyThread(void);
};
Реализация
__fastcall TMyThread::TMyThread(bool CreateSuspended,
                                TDataSet * Nabor)
    : TThread(CreateSuspended)
{
DataS=Nabor;
}
__fastcall TMyThread::~TMyThread(void)
{
Aplik.Clear();
Shet.Clear();
CoUninitialize ();
}
void __fastcall TMyThread::Execute()
{
    FreeOnTerminate = true;
    while(!Terminated){
        Synchronize(ThreadFunc);
        }
}
void __fastcall TMyThread::ThreadFunc()
{
   if(DataS->RecordCount!=0){
     ExcelInitOpen("");
    for (int i=0;i<DataS->RecordCount;i++){
        DataS->Next();
    }
  }
if(!Aplik.IsEmpty())Aplik.OlePropertySet("Visible",true);
Application->ProcessMessages();
Terminate();
}
void __fastcall TMyThread::ExcelInitOpen(String File)
{
CoInitialize(NULL);
try{
   Aplik=Variant::GetActiveObject("Excel.Application");
   }
catch (...){
           try {
               Aplik=CreateOleObject("Excel.Application");
               }
           catch (EOleSysError &eException) {
           Form1->Edit2->Text=eException.ErrorCode;
                 Application->MessageBox("Невозможно открыть Microsoft Excel!"
                 "Возможно Excel не установлен на компьютере.","Ошибка",MB_OK+MB_ICONERROR);
            }
     }
try {
    if(File!=""){
      Aplik.OlePropertyGet("WorkBooks").OleProcedure("Open",File);
     }
    else{
      Aplik.OlePropertyGet("WorkBooks").OleProcedure("add");
      Shet=Aplik.OlePropertyGet("WorkSheets",1);
     }
   }
catch(...){
     Application->MessageBox("Ошибка открытия файла книги","Ошибка",MB_OK+MB_ICONERROR);
     }
}
Падает на коде
  try {
               Aplik=CreateOleObject("Excel.Application");
               }
           catch (EOleSysError &eException) {
           Form1->Edit2->Text=eException.ErrorCode;
                 Application->MessageBox("Невозможно открыть Microsoft Excel!"
                 "Возможно Excel не установлен на компьютере.","Ошибка",MB_OK+MB_ICONERROR);
            }вызов из формы
Thr = new TMyThread(true,CRC->DataSet);
Thr->Resume();
С ошибкой eException.ErrorCode=-2147417843 тобиш 
-2147417843   0x8001010D    An outgoing call cannot be made since the application is dispatching an input-synchronous call.
CoInitializeEx(NULL,COINIT_MULTITHREADED);
Возврашает -2147417850  Cannot change thread mode after it is set.
За ранее благодарен