Excel宏需要运行完毕后清除Excel的Undo信息??? ( 积分: 300 )

  • 主题发起人 主题发起人 bcb
  • 开始时间 开始时间
B

bcb

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好, 我现在遇到个问题,编写的Excel宏需要运行完毕后清除Excel的Undo信息,避免用户Undo,请问如何实现,调用什么对象的什么方法。 谢谢!
 
大家好, 我现在遇到个问题,编写的Excel宏需要运行完毕后清除Excel的Undo信息,避免用户Undo,请问如何实现,调用什么对象的什么方法。 谢谢!
 
宏和VB脚本差不多啊,delphi调用么?
 
没有写过
 
Undo 是 Application 对象的方法,因此需要向它下手。我这有 3 个方案,哪个合适你自己选吧:
1、把调用宏的代码写在程序里,而不是写在 Excel 的 VBA 里,这样 Excel 不会记录 Undo 信息:
Application.Run('宏名');

Application.Run('宏名', 参数1, 参数2...);
缺点是宏的调用时机由你的程序控制,如果宏的运行是交互式的,就不方便了。
2、重新定位 Undo 方法,当 Undo 发生时,自动定位到指定的宏:
Application.OnUndo('禁止撤销', 'Kill_Undo_Sub');
在你的程序或者 VBA 中,调用宏之后写上面这句,一旦用户进行撤销就会调用 Kill_Undo_Sub 这个宏,撤销时想干什么都写到 Kill_Undo_Sub 里好了(如果 Kill_Undo_Sub 中什么都不写,可以使 Undo 完全失效)。
这个方法的好处是保证实时交互性,可以写到程序里,也可以写到 VBA 里(这时跟 Delphi 没什么关系了)。
3、禁止“撤销”按钮,禁止某个按钮的代码到处都是,再罗嗦一遍吧:
VBA —> Application.CommandBars("Standard").Controls(13).Enabled = False
Delphi —> Application.CommandBars['Standard'].Controls[13].Enabled := False;
这个方法简单粗暴,但是用 Ctrl + Z 就没辙了。
 
谢谢vvyang。
各位,还没有更好的方法,同时清除Undo 与 Redo信息???
 
三个都不合适啊?觉得给你的方法已经挺简洁了。~~__~~
另外这个跟 Redo 压根没关系,Undo 都清除了还 Redo 什么啊?所以 Application 对象只提供了 Undo 方法。
 
vvyang大侠是这方面的专家,去看看他的大作!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部