根据网上例子结合自己的工具环境修改后测试可以通过
我使用的工具:Microsoft Visual Studio 2010,Excel 2007
一、在D盘新建一个temp文件夹用于存放Excel启动时写入标志,关闭时删除标志,vb.net程序会去查询该标志来知道Excel是否被人为打开或关闭了。
避免和程序的控制脱节。
二、在D盘根目录创建一个Excel,按Alt+F11打开代码编辑窗口,插入一个模块,填入如下代码:
Sub auto_open() 'Excel启动时会自动运行这个宏
Open "d:\temp\excel.bz" For Output As #1 '写标志文件Close #1End SubSub auto_close() ''Excel关闭时会自动运行这个宏Kill "d:\temp\excel.bz" '删除标志文件End Sub然后另存为带宏的Excel,存在D盘根目录,命名为xiao。之后可以看到D盘有一个xiao.xlsm文件,图标上会有一个感叹号,表示是带宏的Excel。
三、打开Microsoft Visual Studio 2010,新建一个Windows窗体应用程序,工程名命名任意。在默认的From1上拖进两个Button,Text属性设置为open,close。右击工程添加引用,选择COM下的Microsoft Excel 12.0 Object Library组件,并插入如下代码:
Imports Microsoft.Office.Interop Public Class Form1 Dim xlApp As Excel.Application '定义EXCEL类 Dim xlBook As Excel.Workbook '定义工件簿类 Dim xlsheet As Excel.Worksheet '定义工作表类Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Dir("D:\temp\excel.bz") = "" Then '判断EXCEL是否打开 xlApp = CreateObject("Excel.Application") '创建EXCEL应用类 xlApp.Visible = True '设置EXCEL可见 (xlApp.Visible = False '设置EXCEL打开时不可见 ) xlBook = xlApp.Workbooks.Open("D:\xiao.xlsm") '打开EXCEL工作簿 xlsheet = xlBook.Worksheets(1) '打开EXCEL工作表 xlsheet.Activate() '激活工作表 xlsheet.Cells(1, 1) = "abc" '给单元格1行驶列赋值 xlBook.RunAutoMacros(Excel.XlRunAutoMacro.xlAutoOpen) '运行EXCEL中的启动宏 Else : MsgBox("EXCEL已打开") End If End SubPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If Dir("D:\temp\excel.bz") <> "" Then '由VB关闭EXCEL xlApp.Application.DisplayAlerts = False '关闭EXCEL的警告提示,不然用程序关闭时会有警报提示,还要手动去确定。 xlBook.RunAutoMacros(Excel.XlRunAutoMacro.xlAutoClose) '执行EXCEL关闭宏 xlBook.Close(True) '关闭EXCEL工作簿 xlApp.Quit() '关闭EXCEL End If xlApp = Nothing '释放EXCEL对象 End End SubEnd Class四、按F5执行程序,点open控件可以看到Excel被打开第一个格子里被写入abc。点击close关闭Excel。