机房管理系统——VB与Excel的链接,机房管理系统excel
今天在敲机房管理系统——学生查看上机状态的时候发现有一个“导出为excel”的按钮。我去,感情还得跟excel表链接。于是我咬碎了一地小银牙,一个下午都在查询vb与excel 的链接的问题。
我大体的思路是:
首先,在vb中引用Excel类型库。
如图:
其次,声明excel的对象。这里不单单只是声明一个excel表,还要声明工作簿和工作表
如下代码:
|
|
Dim xlApp As Excel.Application |
|
|
Dim xlBook As Excel.Workbook |
|
|
Dim xlSheet As Excel.Worksheet |
最后,就可以在vb程序对excel表进行操作。
在机房管理系统中基本的操作有:
|
|
Set xlApp = CreateObject("Excel.Application") '创建EXCEL应用类 |
|
|
xlApp.Visible = True '设置EXCEL可见 |
|
|
Set xlBook = xlApp.Workbooks.Open(App.Path & "\新建 Microsoft Excel 工作表.xls") '打开EXCEL工作簿 |
|
|
Set xlSheet = xlBook.Worksheets(1) '打开EXCEL工作表 |
|
|
xlSheet.Activate '激活工作表 |
|
|
xlSheet.Cells(1, 1) = myflexgrid.TextMatrix(0, 0)……'给单元格1行驶列赋值 |
|
|
xlBook.RunAutoMacros (xlAutoOpen) '运行EXCEL中的启动宏 |
另外,还有一些拓展的操作:
|
|
xlSheet.PrintOut '打印工作表 xlBook.Close (True) '关闭工作簿 xlApp.Quit '结束EXCEL对象 Set xlApp = Nothing '释放xlApp对象 |
问题1(excel宏的作用):
EXCEL提供一个VisualBasic编辑器,打开VisualBasic编辑器,其中有一工程属性窗口,点击右键菜单的"插入模块",则增加一个"模块1",在此模块中可以运用VisualBasic语言编写函数和过程并称之为宏。其中,EXCEL有两个自动宏:一个是启动宏(Sub Auto_Open()),另一个是关闭宏(SubAuto_Close())。它们的特性是:当用EXCEL打含有启动宏的工簿时,就会自动运行启动宏,同理,当关闭含有关闭宏的工作簿时就会自动运行关闭宏。但是通过VB的自动化功能来调用EXCEL工作表时,启动宏和关闭宏不会自动运行,而需要在VB中通过命令xlBook.RunAutoMacros(xlAutoOpen)和xlBook.RunAutoMacros (xlAutoClose)来运行启动宏和关闭宏。(我的理解就是EXCEL中的VBA就是VB在EXCEL中的应用)
问题2(下标越界):
面对着问题应该出在flexgrid控件上,你在设计界面时把初始列数9,既可以解决了。
特别说明:
在运用以上VB命令操作EXCEL表时,除非设置EXCEL对象不可见,否则VB程序可继续执行其它操作,也能够关闭EXCEL,同时也可对EXCEL进行操作。但在EXCEL操作过程中关闭EXCEL对象时,VB程序无法知道,如果此时使用EXCEL对象,则VB程序会产生自动化错误。形成VB程序无法完全控制EXCEL的状况,使得VB与EXCEL脱节。
可能是引用的版本号问题,2007的版本号和2003不同,到了2003哪里,原来那个引用会报告丢失。
先将“工程-引用”中Microsoft Excel……选中
Private Sub Command1_Click()
Dim xl As Excel.Application
Dim xlbook As Excel.Workbook
Set xl = CreateObject("excel.application")
xl.Visible = False
Dim st As Excel.Worksheet
Set xlbook = xl.Workbooks.Open(App.Path & "\date.xls")
Set st = xlbook.Worksheets(1)
Dim i As Integer
i = 1
Do While st.Cells(i, 1).Value <> ""
List1.AddItem st.Cells(i, 1).Value
i = i + 1
Loop
Set xl = Nothing
Set xlbook = Nothing
End Sub
一些说明:
'首先要将“工程-引用”中的Mic… Excel…选中
'Set xlBook = xlApp.Workbooks.Open("文件名") '打开已经存在的EXCEL工件簿文件
'xlApp.Visible = True '设置EXCEL对象可见(或不可见)
'Set xlSheet = xlBook.Worksheets("表名") '设置活动工作表
'Range("K12").Select 设置活动单元格
'xlSheet.Cells(Row, col) = 值 '给单元格(row,col)赋值
'xlSheet.PrintOut '打印工作表
'xlBook.Close (True) '关闭工作簿
'xlApp.Quit '结束EXCEL对象
'Set xlApp = Nothing '释放xlApp对象.
'xlBook.RunAutoMacros (xlAutoOpen) '运行EXCEL启动宏
'xlBook.RunAutoMacros (xlAutoClose) '运行EXCEL关闭宏
'xlBook.Worksheets.Count '工作簿标签总数