Excel & Ole -> программа выполнила недопустимую ..
2053
3
var
Excel:Variant;
begin
Excel:=Unassigned;
Excel:=CreateOleObject('Excel.Application');
Excel.DisplayAlerts:=false
WBook:=Excel.WorkBooks.Add
//...и.т.д.
//потом завершаем работу
Excel:=Unassigned
{вот тут на win98 вылетает стандартное виндовая ошибка "программа выполнила недопустимую операцию и будет закрыта...". Причём ругается именно на Excel, что он выполнил недопустимую операцию.}
end;
P.S. Дельфи5. Воспроизводится только на машинах с windows98 от версии MS Office не зависит.
Excel:Variant;
begin
Excel:=Unassigned;
Excel:=CreateOleObject('Excel.Application');
Excel.DisplayAlerts:=false
WBook:=Excel.WorkBooks.Add
//...и.т.д.
//потом завершаем работу
Excel:=Unassigned
{вот тут на win98 вылетает стандартное виндовая ошибка "программа выполнила недопустимую операцию и будет закрыта...". Причём ругается именно на Excel, что он выполнил недопустимую операцию.}
end;
P.S. Дельфи5. Воспроизводится только на машинах с windows98 от версии MS Office не зависит.
я по такой схеме работаю, глюков нет
uses OleServer, Excel2000, OleCtnrs, ComObj....
var
MSExcel: TExcelApplication;
ExcelWSh: ExcelWorksheet;
ExcelWB: ExcelWorkbook;
.....
begin
MSExcel:=TExcelApplication.Create(self);
MSExcel.ConnectKind:=ckNewInstance;
MSExcel.AutoQuit:=true;
MsExcel.WindowState[LOCALE_USER_DEFAULT]:=xlNormal;
MsExcel.Left[LOCALE_USER_DEFAULT]:=Form1.Left+140;
MsExcel.Top[LOCALE_USER_DEFAULT]:=Form1.Top+65;
MSExcel.Width[LOCALE_USER_DEFAULT]:=Form1.Width-410;
MSExcel.Height[LOCALE_USER_DEFAULT]:=Form1.Height-320;
MSExcel.Visible[LOCALE_USER_DEFAULT]:=true;
MSExcel.Workbooks.Open(filename,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,1);
ExcelWB:=MSExcel.Workbooks ;
ExcelWB.Activate(LOCALE_USER_DEFAULT);
......
end;
Закрываю
MSExcel.Destroy;
uses OleServer, Excel2000, OleCtnrs, ComObj....
var
MSExcel: TExcelApplication;
ExcelWSh: ExcelWorksheet;
ExcelWB: ExcelWorkbook;
.....
begin
MSExcel:=TExcelApplication.Create(self);
MSExcel.ConnectKind:=ckNewInstance;
MSExcel.AutoQuit:=true;
MsExcel.WindowState[LOCALE_USER_DEFAULT]:=xlNormal;
MsExcel.Left[LOCALE_USER_DEFAULT]:=Form1.Left+140;
MsExcel.Top[LOCALE_USER_DEFAULT]:=Form1.Top+65;
MSExcel.Width[LOCALE_USER_DEFAULT]:=Form1.Width-410;
MSExcel.Height[LOCALE_USER_DEFAULT]:=Form1.Height-320;
MSExcel.Visible[LOCALE_USER_DEFAULT]:=true;
MSExcel.Workbooks.Open(filename,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,1);
ExcelWB:=MSExcel.Workbooks ;
ExcelWB.Activate(LOCALE_USER_DEFAULT);
......
end;
Закрываю
MSExcel.Destroy;
Excel:=Unassigned;А какой смысл в этой строчке? По моему она вообще не нужна.
Нужна, проблема была в том, что я не "освобождал" переменные WBook, WSheet и.т.д.
ТОП 5
1
2
3
4