使用VSTO移植VBA答案参考.docx
- 文档编号:647703
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:11
- 大小:331.71KB
使用VSTO移植VBA答案参考.docx
《使用VSTO移植VBA答案参考.docx》由会员分享,可在线阅读,更多相关《使用VSTO移植VBA答案参考.docx(11页珍藏版)》请在冰豆网上搜索。
使用VSTO移植VBA答案参考
使用VSTO移植VBA
VSTO实际上是一系列的VisualStudio.NET工程模板,通过它来引导我们开发创建基于Office的解决方案。
这里的项目测试针仅对文档级项目。
VSTO解决方案的优点很多,如实现代码与数据文件分离、有利于保护代码和方便功能更新、安全方面的增强……
第一次接触VSTO,是这个VS2010版本。
经过几天的学习、摸索,发现移植VBA已经变得非常简单。
VSTO的书籍很少,而且有点过时。
买了一本基于VB2005的《VSTO开发指南》,收获不大,还不如看MSDN。
但是MSDN上的示例代码,对于习惯VBA的非程序员用户来讲,对象引用、属性和方法的使用等,还是有些陌生。
因此,进行了一些尝试,力争象使用VBA一样的方式,来移植我的VBA。
这个项目测试包括以下两个方面:
一、用VS2010定制功能区示例。
二、移植VBA代码到VSTO示例。
运行环境:
一、运行下面的附件示例文件,需要以下3个系统必备组件,请大家自行下载安装。
见4楼地址。
1、
xtbb01.png(1.63KB,下载次数:
18)
下载附件保存到相册
2010-12-2110:
47上传
2、
xtbb02.png(2.17KB,下载次数:
21)
下载附件保存到相册
2010-12-2110:
47上传
3、
xtbb03.png(1.3KB,下载次数:
21)
下载附件保存到相册
2010-12-2110:
47上传
二、Office版本:
2007或2010
自定义功能区步骤:
1、文件菜单-新建项目,在窗口中选择“EXCEL2010工作簿”。
VSTO02.png(46.69KB,下载次数:
16)
下载附件保存到相册
2010-12-2110:
59上传
2、项目命名,选择文件格式。
VSTO03.png(27.54KB,下载次数:
10)
下载附件保存到相册
2010-12-2110:
59上传
3、生成新建项目界面,修改工作表名称。
VSTO10.png(120.87KB,下载次数:
11)
下载附件保存到相册
2010-12-2110:
59上传
4、项目菜单-添加新项,在窗口选择“功能区(可视化设计器)”。
VSTO05.png(30.79KB,下载次数:
8)
下载附件保存到相册
2010-12-2110:
59上传
5、打开“工具箱”,拖放“Tab”到设计功能区的顶部,创建新Tab。
并在右下的属性窗口中修改相应的属性,如Lable属性值改为“VSTO操作工作表”。
VstoTab.png(13.99KB,下载次数:
7)
下载附件保存到相册
2010-12-2110:
59上传
6、拖放“Group”到新建的Tab区域,在右下的属性窗口中修改相应的属性,如Lable属性值改为“工作表操作”。
VSTO07.png(64.84KB,下载次数:
10)
下载附件保存到相册
2010-12-2110:
59上传
7、拖放“Butten”到新建的Tab区域,在右下的属性窗口中修改相应的属性,如Lable属性值改为“遍历工作表”,添加图标、更改ControlSize属性为“RibbonControlSizeLarge”。
VSTO09.png(47.75KB,下载次数:
9)
下载附件保存到相册
2010-12-2110:
59上传
8、双击任意“Butten”,便可输入代码。
已成功定制你的“自定义功能区”,开始体验代码吧。
1楼附件里的移植VBA完整代码,不包括VSTO模板代码。
ImportsMicrosoft.Office.Tools.Ribbon
ImportsExcel=Microsoft.Office.Interop.Excel
PublicClassRibbon1
PublicProtectOffOn&
PrivateSubRibbon1_Load(ByValsenderAsSystem.Object,ByValeAsRibbonUIEventArgs)HandlesMyBase.Load
EndSub
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsMicrosoft.Office.Tools.Ribbon.RibbonControlEventArgs)HandlesButton1.Click
CallListSheets()
EndSub
Sub单元格写入值()
Dimi&
WithGlobals.ThisWorkbook.Worksheets("工作表一")
.select()
.RANGE("A1:
B1")={"名称","数量"}
Fori=2To10
.range("A"&i).VALUE2="数据-"&i
.range("B"&i).VALUE2=i*(100-i*10)
Nexti
EndWith
EndSub
SubListSheets()'遍历工作表并生成目录
Dimi&,j&,k&
MsgBox("请确认工作表未保护!
"&Chr(10)&"这是一个综合示例,包括:
"&Chr(10)&"1、遍历工作表;"&Chr(10)&"2、获取特定名称工作表的位置:
"&Chr(10)&"3、使用数组;"&Chr(10)&"4、把数组中的值写入工作表;"&Chr(10)&"5、选择工作表。
")
WithGlobals.ThisWorkbook
.Worksheets("工作表目录").select()
j=.Worksheets("汇总表").index'确定开始提取工作表名称的位置,还是确定数组大小的参数
k=.Worksheets.Count-j'确定单元格区域大小
DimRngAsExcel.Range=.Worksheets("工作表目录").Range("B3").Resize(k,1)
DimArr(0Tok-1,0To0)AsString'数组从0开始
Fori=j+1To.Worksheets.Count
Arr(i-j-1,0)=.Worksheets(i).Name
Nexti
Rng.Value2=Arr
EndWith
EndSub
SubButton2_Click(ByValsenderAsSystem.Object,ByValeAsMicrosoft.Office.Tools.Ribbon.RibbonControlEventArgs)HandlesButton2.Click
WithGlobals.ThisWorkbook
.Worksheets("工作表目录").select()
IfProtectOffOn=0Then
.Worksheets("工作表目录").protect(password:
="123456")
ProtectOffOn=1
MsgBox("工作表已保护!
再次点击此按钮会解除保护。
")
ElseIfProtectOffOn=1Then
.Worksheets("工作表目录").unprotect(password:
="123456")
ProtectOffOn=0
MsgBox("已撤消工作表保护!
再次点击此按钮会重新保护。
")
EndIf
EndWith
EndSub
PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsMicrosoft.Office.Tools.Ribbon.RibbonControlEventArgs)HandlesButton4.Click
MsgBox("此示例更改最后一个工作表的名称为《更名工作表》。
")
WithGlobals.ThisWorkbook
.Worksheets(.Worksheets.Count).name="更名工作表"
EndWith
EndSub
PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsMicrosoft.Office.Tools.Ribbon.RibbonControlEventArgs)HandlesButton3.Click
MsgBox("此示例删除最后一个工作表。
")
WithGlobals.ThisWorkbook
.Worksheets(.Worksheets.Count).delete()
EndWith
EndSub
PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsMicrosoft.Office.Tools.Ribbon.RibbonControlEventArgs)HandlesButton5.Click
MsgBox("此示例在最后增加一个工作表。
")
WithGlobals.ThisWorkbook
.Worksheets.Add(After:
=.Worksheets(.Worksheets.Count))
EndWith
EndSub
PrivateSubButton6_Click(ByValsenderAsSystem.Object,ByValeAsMicrosoft.Office.Tools.Ribbon.RibbonControlEventArgs)HandlesButton6.Click
Call单元格写入值()
EndSub
PrivateSubButton7_Click(ByValsenderAsSystem.Object,ByValeAsMicrosoft.Office.Tools.Ribbon.RibbonControlEventArgs)HandlesButton7.Click
Call单元格写入值()
MsgBox("下面开始排序。
")
WithGlobals.ThisWorkbook.Worksheets("工作表一")
.range("A:
B").sort(key1:
=.range("B1"),Header:
=Excel.XlYesNoGuess.xlYes)
EndWith
EndSub
PrivateSubButton8_Click(ByValsenderAsSystem.Object,ByValeAsMicrosoft.Office.Tools.Ribbon.RibbonControlEventArgs)HandlesButton8.Click
Dimi&
Call单元格写入值()
MsgBox("下面设置边框")
WithGlobals.ThisWorkbook.Worksheets("工作表一")
i=.range("a"&.Rows.count).end(3).row
.range(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 VSTO 移植 VBA 答案 参考