Вот пример кода, аналогичного тому, что я использую:
Код:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComObj, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
XLApp, XLWB, Sheet, Colum, shRange: OLEvariant;
end;
var
Form2: TForm2;
const
xlCenter: integer= -4108;
xlTop: integer= -4160;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
XLApp:=CreateOleObject('Excel.Application');
XLApp.Visible:=True;
XLWB:=XLApp.Workbooks.Add;
XLWB.WorkSheets[1].Name:='Отчет';
Colum:=XLWB.WorkSheets['Отчет'].Columns;
Colum.Columns[1].ColumnWidth:=40;
Colum.Columns[2].ColumnWidth:=20;
Colum.Columns[3].ColumnWidth:=10;
Colum.Columns[4].ColumnWidth:=20;
Colum:=XLWB.WorkSheets['Отчет'].Rows;
Colum.Rows[1].RowHeight:=80;
Sheet:=XLWB.WorkSheets['Отчет'];
Sheet.Cells[1,1]:='ОТЧЕТ';
Sheet.Cells[1,1].Font.Size:=20;
Sheet.Cells[1,1].Font.Bold:=True;
Sheet.Cells[1,1].HorizontalAlignment:=xlCenter;
Sheet.Cells[1,1].VerticalAlignment:=xlTop;
shRange:=Sheet.Range['A1:D1'];
shRange.select;
shRange.MergeCells := True;
//Включаем режим Print Prevew
Sheet.PrintPreview;
//Отцепляем переменные
XLWB:=UnAssigned;
XLApp:=UnAssigned;
end;
end.
Кнопка на форме. По кнопке вызывается Excel, в который транслируются команды ~VBA для формирования отчета.
Все отрабатывает нормально. Лист формируется.
При попытке закрыть Excel БЕЗ предварительного закрытия вызвавшей программы выдается ошибка, описанная мною выше, а потом еще выскакивает message с ещё более "странным" сообщением (см. приложенный jpg).
Что тут может происходить?