好久没有问过问题啦, Excel 里面有没有 当单元格的值改变了,触发一个事件。(300分)

  • 主题发起人 主题发起人 xuxiaohan
  • 开始时间 开始时间
X

xuxiaohan

Unregistered / Unconfirmed
GUEST, unregistred user!
这个事件用delphi 怎样控制, 或者 VBA 怎样控制?
 
只知道单元格可以写公式,其他单元格有数值,就可以直接计算出来,就象delphi的change
不知道能不能触发事件,没有用delphi控制过excel
 
学习一下
 
office的帮助中有的
worksheet的change事件
具体使用请参看office的帮助
 
xulxqqqq,
在delhi中怎样使用 activateCell 的 change事件?
 
procedure TForm1.ExcelWorksheet1Change(ASender: TObject;
const Target: ExcelRange);
begin

end;
 
//uses Excel2000
TExcelExpand = class(TAutoObject, _IDTExtensibility2)
private
FExcelApp : TExcelApplication;
FExcelSheet : TExcelWorksheet;
procedure OnWorkbookActivate(ASender: TObject; const Wb: ExcelWorkbook);
procedure OnChange(ASender: TObject; const Target: ExcelRange);
protected
procedure OnAddInsUpdate(var custom: PSafeArray); safecall;
procedure OnBeginShutdown(var custom: PSafeArray); safecall;
procedure OnConnection(const Application: IDispatch;
ConnectMode: ext_ConnectMode; const AddInInst: IDispatch;
var custom: PSafeArray); safecall;
procedure OnDisconnection(RemoveMode: ext_DisconnectMode;
var custom: PSafeArray); safecall;
procedure OnStartupComplete(var custom: PSafeArray); safecall;
public
destructor Destroy; override;
end;


procedure TExcelExpand.OnConnection(const Application: IDispatch;
ConnectMode: ext_ConnectMode; const AddInInst: IDispatch;
var custom: PSafeArray);
begin
if not Assigned(FExcelApp) then
FExcelApp := TExcelApplication.Create(nil);
FExcelApp.ConnectTo(FApp);
FExcelApp.OnSheetActivate := OnSheetActive;
end;

procedure TExcelExpand.OnWorkbookActivate(ASender: TObject;
const Wb: ExcelWorkbook);
begin
if not Assigned(FExcelSheet) then
FExcelSheet := TExcelWorkSheet.Create(nil);
FExcelSheet.ConnectTo(FExcelApp.ActiveSheet as _WorkSheet);
FExcelSheet.OnChange := OnChange;//}
end;

procedure TExcelExpand.OnChange(ASender: TObject;
const Target: ExcelRange);
var
s : string;
begin
s := Target.Cells.Item[1,1];
messagebox(0, PChar(s), '', 0);
end;

这是用Office Addin技术实现的,注册这个Addin后,打开Excel,切换一下Sheet(新建的workbook不会触发OnWorkbookActivate),然后修改单元格内容,就会得到通知了
 
yuzk2005, 答案醉简洁,
轻舞肥羊,的代码让我看到底层的东西。
 
后退
顶部