寻找 Excel Application 中在 Workbook 关闭后发生的事件 (没办法,暂时用定时器更新,散分了,没分的来)(300分)

  • 主题发起人 主题发起人 轻舞肥羊
  • 开始时间 开始时间

轻舞肥羊

Unregistered / Unconfirmed
GUEST, unregistred user!
Excel 中的 WorkbookBeforeClose 事件是在 WorkBook 关闭前发生,
我需要寻找 WorkBook 关闭后发生的那个事件,
相当于 Word 中的 Application.DocumentChange 事件,
请问哪位高手知道?
 
轻舞大侠:
不过你可以从里面看到源代码。
看源程序,你改成EXCELAPPLICATION就可以了,都能改的。。
procedure TOpExcel.DoBeforeWorkbookClose(const Wb: Workbook; var Cancel: WordBool);
var
i: Integer;
Book: Workbook;
FreeList: TList;
begin
if assigned(FBeforeWorkbookClose) then FBeforeWorkbookClose(self,Wb,Cancel);
if not(Cancel) then
begin
FreeList := TList.Create;
try
Book := Wb;
if Workbooks.FindItem(Book,DeleteWorkbook,FreeList) then
begin
for i := 0 to FreeList.Count - 1 do
begin
TOpNestedCollectionItem(FreeList).Free;
end;
UpdateDesigner;
end;
finally
FreeList.Free;
end;
end;
end;
procedure TForm1.Excel2000SheetChange(Sender: TObject; var Sh,
Target: OleVariant);
begin

end;
你要关闭后的啊,我查查资料了。。
 
蓝叶菱大虾厉害呀。如果真的在西北拿1.5K。那么赶快来深圳[:D]
 
我看看了一下呢的事件OFFICE参考没有,不过。
我试了一下,这个属性和excelapp.onwindowsactive差不多。
这是我测试的代码,你改改,就应该是了。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Excel2000, OleServer, Buttons, Word2000;

type
TForm1 = class(TForm)
Excel2000: TExcelApplication;
Button1: TButton;
OD: TOpenDialog;
Memo1: TMemo;
ExcelWorkbook1: TExcelWorkbook;
BitBtn1: TBitBtn;
WordApp: TWordApplication;
WordDocument1: TWordDocument;
procedure Button1Click(Sender: TObject);
procedure Excel2000SheetChange(Sender: TObject; var Sh,
Target: OleVariant);
procedure Excel2000WorkbookOpen(Sender: TObject; var Wb: OleVariant);
procedure Excel2000WorkbookBeforeClose(Sender: TObject; var Wb,
Cancel: OleVariant);
procedure BitBtn1Click(Sender: TObject);
procedure WordAppDocumentChange(Sender: TObject);
procedure WordAppDocumentBeforeClose(Sender: TObject; var Doc,
Cancel: OleVariant);
procedure Excel2000WorkbookActivate(Sender: TObject;
var Wb: OleVariant);
procedure Excel2000WorkbookDeactivate(Sender: TObject;
var Wb: OleVariant);
private
{ Private declarations }
FCurWook:_Workbook;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Intf:_Workbook;
begin
if OD.Execute then
begin
Excel2000.Disconnect;
Excel2000.Connect;
Intf:=Excel2000.Workbooks.Open(OD.FileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)
as _WorkBook;

ExcelWorkbook1.ConnectTo(Intf);
if FCurWook<>Intf then
begin
Memo1.Lines.Add('Workbook changeed');
FCurWook:=Intf;
end;
Excel2000.Visible[0]:=True;
end;
end;

procedure TForm1.Excel2000SheetChange(Sender: TObject; var Sh,
Target: OleVariant);
begin
Memo1.Lines.Add('Sheet change');
end;

procedure TForm1.Excel2000WorkbookOpen(Sender: TObject;
var Wb: OleVariant);
begin
Memo1.Lines.Add('WorkBook Open');
end;

procedure TForm1.Excel2000WorkbookBeforeClose(Sender: TObject; var Wb,
Cancel: OleVariant);
begin
Memo1.Lines.Add('Workbook Close Before');
//ShowMessage('ok');
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
FFileName:OleVariant;
begin
IF OD.Execute THEN
BEGIN
WordApp.Disconnect;
WordApp.Connect;
FFileName:=OD.FileName;
WordApp.Documents.OpenOld(FFileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WordApp.Visible:=True;
WordApp.ShowMe;
END;
end;

procedure TForm1.WordAppDocumentChange(Sender: TObject);
begin
Memo1.Lines.Add('word change ');
end;

procedure TForm1.WordAppDocumentBeforeClose(Sender: TObject; var Doc,
Cancel: OleVariant);
begin
Memo1.Lines.Add('word before');
end;

procedure TForm1.Excel2000WorkbookActivate(Sender: TObject;
var Wb: OleVariant);
var
intf:_Workbook;
begin
Memo1.Lines.Add('WorkBook changed....');
if intf<>FCurWook then
begin
FCurWook:=intf;
Memo1.Lines.Add('WorkBook changed');
end;
end;

procedure TForm1.Excel2000WorkbookDeactivate(Sender: TObject;
var Wb: OleVariant);
var
intf:_Workbook;
begin

if intf<>FCurWook then
begin
FCurWook:=intf;
Memo1.Lines.Add('WorkBook changed');
end;
end;

end.
不过有一个地方,就是记录当前的EXCEL,感觉使用指针好呢,要不这个_workbook怎么比较呢 ,比较文档还是标题?
 
蓝叶菱大虾厉害呀。如果真的在西北拿1.5K。那么赶快来深圳这个不需要骗你,但是我准备走了,可是我不知道自己在西北能够拿多少。有没有人要。。。?
 
与题意不符,谢谢
 
没有这个消息和事件,定时器可以。
有一个Notify的设计手法也许可以让你做出这个事件来。。。。
我只是讨论。。。。突然有个想法了。。。你看看可以不。
 
Word与Excel最大的区别在于: Word 有个默认的Normal模板,而Excel没有.
 
不会吧,蓝大侠真的才拿1.5k
 
多人接受答案了。
 
后退
顶部