いつも参考にさせていただいております、momoと申します。
何分初心者なので、怪しい記述があると思われますが、
よろしくお願いします。
今回、下記のソースを実行したときにEAccessViolationエラーが出てる
のですが、フォーム上でExcelApplicationオブジェクトを配置していたとき
には起きなかったエラーだったので、フォームの無いunitファイル化した
ソースでオブジェクトの宣言ができていないのかなと漠然と思っております。
アドバイスを頂けたらと思います。
以下ソースを。
--------------------------------------------------------------------
unit untInputData;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Registry, Excel97, OleServer, Db, DBTables;
type
TInputData = class(TObject)
{エクセルのオブジェクトを宣言}
ExcelApplication1: TExcelApplication;
ExcelWorksheet1 : TExcelWorksheet;
ExcelWorkbook1 : TExcelWorkbook;
private
{ Private 宣言 }
public
{ Public 宣言 }
//データの取り込み
function InputData (ORDER_ID: String; PORT_NO: String) : boolean;
end;
var
InputData : TInputData;
implementation
uses ComObj,untDaM;
//取り込み(CSV)
function TInputData.InputData (ORDER_ID: String; PORT_NO: String) : boolean;
var
・
・
・
begin
//ExcelApplication1 := TExcelApplication.Create(self);
ExcelApplication1:= TExcelApplication.Create(nil);
with ExcelApplication1 do begin ←---------- ここです (^^;)
Connect;
Visible[0] := False; //エクセルの可視/不可視
//ファイルオープン
Workbooks.Open('\\Yoshida\Project1\センコー\2 ソース\FrmInput\SampleData.xls',
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
ExcelWorkbook1.ConnectTo(ActiveWorkbook as _workbook);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.activesheet as _worksheet);
ExcelSheet := ExcelWorkbook1.activeSheet;
こちらでは問題なく動いているようです。
確認ですが、TInputData のオブジェクトは作成していますよね?
遅くなりました、momoです。
>type
> TInputData = class(TObject)
この辺で実現させてたつもりだったのですが。。
的外れでしょうか。。
typeにかかれているのはあくまでも「定義」です。
ちゃんと、
InputData := TInputData.Create;
としないと、InputDataの実体はありません。
InputDataがなければ、ExcelApplication1の部分も実体がないため、TExcelApplication.Create(nil)の入れ物がない状態です。
すいません、遅くなりました。
その通りでした。
宣言だけしてモノがないということでした。
初心者ならではのミスでした。。。
ありがとうございました。
ツイート | ![]() |