急急急,如何在office中添加菜单?(200分)

  • 主题发起人 主题发起人 oldsheep35
  • 开始时间 开始时间
O

oldsheep35

Unregistered / Unconfirmed
GUEST, unregistred user!
问题是:如果直接在现有的菜单下加菜单项是可以的。
但我现在要新建一个菜单项(在帮助后面)。例如Adobe Acrobat 就这么做的。
但是MSDN上的VB代码好像在Delphi上行不通。
所以请各位做过的高手赶紧帮忙。谢谢了!
在线等待!
 
找到一个,未测试。
---
最近在做一个项目中,需要与Office集成,具体就是需要在Word、Excel等程序中 加入几个
诸如菜单、按钮之类的东西,以实现一些例如文件转存等操作。

  对于Word,新建一个DOT文件,添加若干个宏,并通过“工具”-“自定义”加入几个工
具条按钮或者菜单,将其宏设置为自己所编写的宏。然后,将这个DOT文件放置到Office下
的Startup目录,这样,Word每次运行都会载入这个DOT文件,并添加相应的工具条和菜单。如果需要卸掉,直接把它从Startup目录下移走即可。
  对于Excel,则要复杂一些。首先,创建一个包含有所需要执行的VBA代码的XLA宏文
件,然后,创建两个XLS文件,分别命名为Install.xls和Remove.xls,用于安装和卸载
Excel集成功能。假设我们需要在Excel上加个工具条和菜单,则

Set mybar = CommandBars.Add(Name:="NewToolBar", Position:=msoBarTop)
mybar.Visible = True

Set NewMenu = CommandBars("Worksheet Menu Bar").Controls.Add(msoControlPopup)
NewMenu.Caption = "&NewMenu"

向工具条中添加一个按钮,并指定其外观和运行宏

Set myButton = mybar.Controls.Add(msoControlButton)
myButton.FaceId = 20
myButton.Caption = "运行NewFunc"
myButton.OnAction = "'" + AppPath + "/NewFunc.xla'!Run"

其中,OnAction一项组成为'Xla宏文件完整路径名'!宏子过程名

添加菜单项为

Set NewMenuItem = NewMenu.Controls.Add(msoControlButton)
NewMenuItem.OnAction = "'" + AppPath + "/NewFunc.xla'!Run"
NewMenuItem.Caption = "运行NewFunc(&R)"

此即为Install.xls中内容,而且应放在Workbook_Open事件中执行,完毕后即以Application.Quit自动退出。

 

Remove.xls中相应简单一些,查找到所添加的菜单和工具条,并删除之即可。

For Each bar In CommandBars
If bar.Name = "Worksheet Menu Bar" Then
For Each Item In bar.Controls
If Item.Caption = "&NewMenu" Then
Item.Delete
End If
Next Item
End If

If bar.Name = "NewToolBar" Then
bar.Delete
End If

Next bar

2000-11-12 9:42
 
以下程序在Word 2000的“文件”菜单前添加“Custom”菜单,
并在其下添加“Import”菜单项。请仔细研究,我已经调试通过。
Excel应该是类似的.

uses ...,ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
WordApp,
myMenuBar,
newMenu,
ctrl1:OleVariant;
begin
WordApp :=CreateOleObject('Word.application');
WordApp.visible:=true;
myMenuBar :=WordApp.CommandBars.ActiveMenuBar;
newMenu := myMenuBar.Controls.Add(10,1,1,1,true);
newMenu.Caption := 'Custom';
ctrl1 := newMenu.CommandBar.Controls.Add(1,1,0,1,false);
ctrl1.Caption := 'Import';
ctrl1.TooltipText := 'Import';
ctrl1.Style := 2;
以下程序在Word 2000的“文件”菜单前添加“Custom”菜单,
并在其下添加“Import”菜单项。请仔细研究,我已经调试通过。
Excel应该是类似的.

uses ...,ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
WordApp,
myMenuBar,
newMenu,
ctrl1:OleVariant;
begin
WordApp :=CreateOleObject('Word.application');
WordApp.visible:=true;
myMenuBar :=WordApp.CommandBars.ActiveMenuBar;
newMenu := myMenuBar.Controls.Add(10,1,1,1,true);
newMenu.Caption := 'Custom';
ctrl1 := newMenu.CommandBar.Controls.Add(1,1,0,1,false);
ctrl1.Caption := 'Import';
ctrl1.TooltipText := 'Import';
ctrl1.Style := 2;
end;
 
看吧老绵羊给急得,都咩咩叫了,嘿嘿
这些资料不晓得对你有没有用,看一下吧
请问:怎样用wordapplication增、删、改WORD菜单?需要示范代码,谢谢!
来自:menxin, 时间:2001-11-1 12:37:00, ID:700137
呵呵,真加这么多呀,好,我给你写一个吧

uses Office2000;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
WordApplication1.Connect;
WordApplication1.Visible:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:Integer;
begin
if WordApplication1.CommandBars.ActiveMenuBar.Enabled then begin
with WordApplication1.CommandBars.ActiveMenuBar do begin
{ ListBox1.Clear;
for i:=1 to Controls.Count do
ListBox1.Items.Add(Controls.Caption);}//你可以把现有的菜单信息放在这个LISTBOX里看一下
Controls[5].Set_Visible(false)
//删除菜单,实际是隐藏
Controls[Controls.Count].Set_Caption('我的帮助')
//改菜单项
with Controls.Add(msoControlpopup,EmptyParam,EmptyParam,EmptyParam,true) do begin //增加菜单
Set_Caption('新菜单项');
end;
end;
end;
end;

给分吧![:D]
来自:tzahz, 时间:2001-11-1 15:08:00, ID:700421
兄弟:
谢谢,你已经得到了一百分,如果你告诉我如何在‘新菜单项下面’加上子菜单,60分
将事件处理与新的子菜单项联系起来,100分。
我实在找不到这方面的帮助,有的也是十分简单,许多用法都没有,如果你告诉我如何去取得
OFFICE开发的DELPHI的帮助,100~300送上。我还有700分。
谢谢!!!

来自:yexiaofeng, 时间:2001-11-1 23:32:00, ID:701479
我告訴你delphi中的server控件頁上的幫助哪裡找的到。
server頁上的控件實際上是office提供的ocx控件,delphi隻是把它們封裝(抱歉,不知道該不
該叫封裝)後放入server控件頁中。
所以,它們的完整幫助隻有microsoft有,在msdn中可以找的到,vb的幫助也有。隻許做很少
的改動就可以把MS的代碼直接拿來使用

来自:menxin, 时间:2001-11-2 2:42:00, ID:701577
加事件什么的得改成这样,因为要用到一些接口。
procedure TForm1.Button2Click(Sender: TObject);
var i:Integer;
b:CommandBarPopup;
c:CommandBarButton;
begin
if WordApplication1.CommandBars.ActiveMenuBar.Enabled then begin
with WordApplication1.CommandBars.ActiveMenuBar do begin
ListBox1.Clear;
for i:=1 to Controls.Count do
ListBox1.Items.Add(Controls.Caption);
Controls[5].Set_Visible(false);
Controls[Controls.Count].Set_Caption('我的帮助');
b:=Controls.Add(msoControlpopup,EmptyParam,EmptyParam,EmptyParam,true) as commandbarpopup
//创建menuitem
with b do begin
Set_Caption('a项');
c:=Controls.Add(msoControlButton,EmptyParam,EmptyParam,EmptyParam,true) as CommandBarButton;
c.Set_Caption('我的第一个菜单项');
c.Set_OnAction('MBClick2')
//将一个宏赋值给这个ITEM
end;
end;
end;
end;
来自:menxin, 时间:2001-11-3 23:06:00, ID:704988
下面给出加入宏的代码:
var
vc:_VBComponents;
begin
vc:=WordApplication1.VBE.ActiveVBProject.VBComponents;
with vc.Item(2).CodeModule do begin
InsertLines(1,'Sub MyMacro');
InsertLines(2,'msgbox "this is a test"');
InsertLines(3,'End Sub ');
end;
end;

权限问题就得你自己考虑了,我想宏和其他的代码应该有同样的权限吧
为编这些宏,你得用些VB了,嘿嘿,我是不会了,只能给个MSGBOX了。哈哈~~~
我又想了一下,由于WORD提示是宏没找到,我想应该是一定要用宏的。
过程的方法可以继续试一下。
 
那如何关联Action??
好像Action写成String
这怎么作?

欢迎回答!
 
这宏怎么作?
我可是用Delphi做。好像不行。怎么办????
急呀!!!◎
 
再自己顶!
期待高手帮帮忙!
 
参考这个
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2447301
 
就是那个宏怎么做不会呀!!!
 
作者: Marcel Ohlmeier. 演示如何生成Office 97的菜单
http://www.csdn.net/dev/delphi/Samples/menuex97.zip
一个COM AddIn的例子
http://www.wisdomcube.com/stuff/Diary.rar
这些都是关于WORD的例程,我试了一下,没有调试成功,所以也不晓得是不是合你用的,你自己看看吧
 
谢谢各位了。
我继续测试看看吧
先结贴吧!
 
还是老绵羊好,谢谢了 :)
 
后退
顶部