こんにちは、久々に教えて頂きたい事が出てきました。
以下のソースで動作させていますが、
BtnCellPut1Clickでセルに書き込みますと問題なく終了出来るのですが
手入力でセルに書き込みますと終了時エラーになります。
いろいろと調べましたが原因がわかりません。
ご存知の方がいらっしゃいましたら、よろしくお願いいます。
//---------------------------------------------------
【環境】
WindowsXP/Delphi5.0
//---------------------------------------------------
uses
〜略
Excel97, OleServer ,ActiveX ,comobj
〜略
;
各Excel関連変数は宣言済
//---------------------------------------------------
procedure TForm1.FormShow(Sender: TObject);
begin
CoInitialize(nil);
E_Excel := CreateOleObject('Excel.Application');
E_App := E_Excel.Application;
E_App.Visible := false;
E_App.WorkBooks.Open(FileName:='abcd.xls');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
E_App.Workbooks[1].saved := true ;
E_App.Workbooks[1].close ;
E_Excel.Quit;
E_Excel := Unassigned;
CoUninitialize ;
end;
procedure TForm1.BtnCellPut1Click(Sender: TObject);
begin
ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook as _workbook);
ExcelWorkSheet1.ConnectTo(ExcelWorkbook1.Worksheets['Sheet1'] as _worksheet);
ExcelWorksheet1.Range['a10','a10'].Value := 'xxxxxx';
end;
自己レスです。
どうも、ソースが混ざって処理されていたようで以下のように
したらOKでした。
お騒がせしました。
//---------------------------------------------------
const
lcid: DWORD =LOCALE_SYSTEM_DEFAULT;
type
TForm1 = class(TForm)
ExcelApplication1: TExcelApplication;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;
〜略
procedure TForm1.FormShow(Sender: TObject);
begin
ExcelApplication1.Workbooks.Open('abcd.xls',
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,lcid);
ExcelApplication1.Visible[lcid]:=True;
ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook as _workbook);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ExcelApplication1.Visible[lcid] then begin
ExcelWorkSheet1.Disconnect;
//ExcelWorkbook1.Close(save引数,EmptyParam,False,lcid); // save引数 true:保存 false:しない
ExcelWorkbook1.Close(true,EmptyParam,False,lcid);
Application.ProcessMessages;
ExcelWorkbook1.Disconnect;
end;
if ExcelApplication1<>nil then begin
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;
end;
end;
procedure TForm1.BtnCellPut1Click(Sender: TObject);
begin
ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook as _workbook);
ExcelWorkSheet1.ConnectTo(ExcelWorkbook1.Worksheets['Sheet1'] as _worksheet);
ExcelWorksheet1.Range['a10','a10'].Value := 'xxxxxx';
end;
チェック忘れました。
編集 削除