首页 > 开发 > 综合 > 正文

在Excel中建立自定义菜单项

2024-07-21 02:24:02
字体:
来源:转载
供稿:网友
演练:在excel中建立自定义菜单项



brian a. randell

mcw technologies, llc

september 2003

applies to:

microsoft® visual studio® tools for the microsoft office system

microsoft office excel 2003

microsoft visual studio .net 2003

概述:office commandbar对象提供了增加菜单项和工具条按钮代码的途径。在这篇演练中,你将建立自定义菜单项目下的菜单条,并且增加代码来响应office菜单。

内容:

介绍

建立菜单和工具条项目是微软office的一个核心特点,虽然这次试验是示范在微软office excel 2003中使用这些项目,但是这些操作在office word中是类似的。(不同之处在于在word中菜单名是menu bar,而在excel中叫worksheet menu bar。)你将在excel主菜单中建立菜单项。然后,你增加此菜单项。最后,你增加click事件代码来执行自定义代码。

提示:office菜单和工具条的对象模块定义在office.dll中,当你给微软office system项目建立了一个新的visual studio tools时,微软visual studio® .net自动包含到此模块的引用。

先决条件

要完成此演练,下列软件和组件必须安装:

• microsoft visual studio .net 2003 or microsoft visual basic® .net standard 2003

• microsoft visual studio tools for the microsoft office system

• microsoft office professional edition 2003

提示:假如你是visual basic .net编程者,你需要设置option strict为on(或者你在每一个模块中增加option strict声明)。虽然这不是必须的,但是这可以保证你不会执行不安全的类型转换。在以后的时间里,利用此选项的好处将远远大于增加代码的困难。

开始

你将通过建立一个新的visual studio .net的excel项目来开始。

建立项目

使用微软office system的visual studio tool建立一个新的excel工作簿项目(在visual basic .net或是c#中)。

建立一个excel工作簿项目

1. 开始visual studio .net,在文件菜单上,指向新建,点击项目。

2. 在项目类型面板上,扩展微软office system项目,接着选择visual basic 项目或visual c#项目。

3. 在模板面板中选择excel工作簿。

4. 起名为excelcommandbars,接着存储在当地硬盘。

5. 在微软office项目向导中接受缺省值,点击完成。

visual studio .net为你在代码编辑器中打开thisworkbook.vb或是thisworkboo.cs文件。

建立菜单栏项目

在excel主菜单条上建立一个菜单栏项目需要你使用add方法增加一个commandbarcontrol。

在excel中建立菜单栏项目

1. 在已存变量thisapplication和thisworkbook下面增加下列变量:

' visual basic

private mainmenubar as office.commandbar

private menubaritem as office.commandbarcontrol

private withevents menuitem as office.commandbarbutton // c#

private office.commandbar mainmenubar = null;

private office.commandbarcontrol menubaritem = null; private office.commandbarbutton menuitem = null;

2. 在officecodebehing类中增加下列程序(通过项目模板建立),这段程序初始化了先前声明的mainmenubar和menuitembar对象。

' visual basic private

sub initmenubaritems(byval caption as string)

try mainmenubar = thisapplication.commandbars( _ "worksheet menu bar")

menubaritem = mainmenubar.controls.add( _ office.msocontroltype.msocontrolpopup, temporary:=true) menubaritem.caption = caption catch ex as exception messagebox.show(ex.message, _

ex.source, messageboxbuttons.ok, messageboxicon.error)

end try

end sub

// c#

private void initmenubaritems(string caption)

{ try { mainmenubar = thisapplication.commandbars["worksheet menu bar"]; menubaritem = mainmenubar.controls.add( office.msocontroltype.msocontrolpopup, type.missing, type.missing, type.missing, true); menubaritem.caption = caption; }

catch (exception ex) { messagebox.show(ex.message, ex.source, messageboxbuttons.ok, messageboxicon.error); } }

3. 增加下列代码到已存在的thisworkbook_open程序,这段代码调用你刚才建立的initmenubaritems程序。

' visual basic

initmenubaritems("&custom code")

// c#

initmenubaritems("&custom code");

4. 选择文件菜单上的保存所有文件来保存整个方案。

5. 按f5运行项目,装入excel和你的工作簿。

6. 在excel中,查看菜单栏项目标签写着custom code的菜单显示在帮助菜单右边。如图一所示:


图一:有着自定义菜单栏项目的excel

建立菜单项目

有了合适的自定义菜单栏,你就可以加入新的菜单中了。菜单项目表示为commandbarcontrol对象,你将使用先前建立的菜单栏项目controls集合的add方法来建立一个新的commandbarcontrol实例。

建立菜单项目

1. 增加下列程序到officecodebehind类中,这段程序建立了commandbarcontrol并且设置其标题:

' visual basic

private function createbutton( _

byval parent as office.commandbarpopup, _

byval caption as string) as office.commandbarbutton

try

dim cbc as office.commandbarcontrol

cbc = parent.controls.add( _ office.msocontroltype.msocontrolbutton, temporary:=true)

cbc.caption = caption

cbc.visible = true

return directcast(cbc, office.commandbarbutton)

catch ex as exception

messagebox.show(ex.message, _

ex.source, messageboxbuttons.ok, messageboxicon.error) end try

end function

// c#

private office.commandbarbutton createbutton( office.commandbarpopup parent, string caption)

{ office.commandbarcontrol cbc = null;

try { cbc = parent.controls.add( office.msocontroltype.msocontrolbutton, type.missing, type.missing, type.missing, true); cbc.caption = caption; cbc.visible = true; }

catch (exception ex)

{ messagebox.show(ex.message, ex.source, messageboxbuttons.ok, messageboxicon.error); }

return (office.commandbarbutton) cbc; }

2. 增加下列代码到thisworkbook_open程序中,下列代码调用了initmenubaritems程序:

' visual basic

menuitem = createbutton( _

directcast(menubaritem, office.commandbarpopup), _ "run demo code")

// c#

menuitem = createbutton( (office.commandbarpopup)menubaritem, "run demo code");

3. 选择文件菜单上的保存所有文件来保存整个方案。

4. 按f5运行此项目,装入excel和你的工作簿。

5. 在excel中点击自定义的顶级菜单,查看run demo code菜单项。如下图二所示:


图二:增加了一个菜单项之后



拦截菜单项的点击事件

为了完成本次演练,你需要增加一个事件来处理自定义菜单项被点击之后的响应。

(只用在visual basic)

拦截菜单项点击事件

在visual basic .net中完成下列步骤增加菜单项被点击的事件处理程序。

为自定义菜单项增加事件处理(visual basic)

1. 在代码编辑器的左上角的class name下拉列表中选择menuitem。

2. 在代码编辑器的右上角的method name下拉列表中选择click。

3. 修改menuitem_click程序,增加下列代码:

' visual basic

messagebox.show(string.format( _

"you just clicked the button labeled '{0}'.{1}" & _

"the name of your workbook is '{2}'.", _

ctrl.caption, environment.newline, thisworkbook.name), _ "menuitem_click", messageboxbuttons.ok, _ messageboxicon.information)

4. 选择文件菜单中的保存所有文件来保存整个解决方案。

5. 按f5运行这个项目,装入excel和你的工作簿。

6. 在excel中,点击custom code菜单,接着选择run demo code。

一个警告框出现,显示当前工作簿。

(c#)拦截点击菜单项目事件

在visual c#中完成下列步骤来增加点击自定义菜单栏项目的事件处理。

为自定义菜单项目增加事件处理(c#)

1. 增加下列程序到officecodebehind类中:

// c# private

void menuitem_click( office.commandbarbutton ctrl, ref boolean canceldefault) { messagebox.show(string.format( "you just clicked the button labeled '{0}'./n" + "the name of your workbook is '{1}'.", ctrl.caption, thisworkbook.name), "menuitem_click", messageboxbuttons.ok, messageboxicon.information); }

2. 修改thisworkbook_open程序,增加下列代码:

// c#

menuitem.click += new microsoft.office.core. _

commandbarbuttonevents_clickeventhandler(menuitem_click);

提示:如果你输入完代码的第一行(直到+=),visual studio .net将提示你按tab键。代码编辑器将为你插入此行的剩余代码。这个自动完成的新特点使你更容易的完成事件处理程序。

测试本应用

现在你可以测试自己建立的自定义菜单项了。

测试本应用

1. 选择文件菜单的保存所有文件来保存整个项目。

2. 按f5运行这个项目,装入excel和你的工作簿。

3. 在警告框中出现对你当前工作簿的描述。

结论

微软office应用的一个核心特点是建立菜单和工具栏的能力。office commandbar对象提供了一种方法来自定义菜单和工具栏。虽然本次演练示范了你怎样增加代码来响应excel菜单的点击,你将会发现在word中的行为与此类似。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表