VB操作EXCEL表的常⽤⽅法
VB是常⽤的应⽤软件开发⼯具之⼀,由于VB的报表功能有限,⽽且⼀但报表格式发⽣变化,就得相应修改程序,给应⽤软件的维护⼯作带来极⼤的不便。因此有很多程序员现在已经充分利⽤EXECL的强⼤报表功来实现报表功能。但由于VB与EXCEL由于分别属于不同的应⽤系统,如何把它们有机地结合在⼀起,是⼀个值得我们研究的课题。
⼀、 VB读写EXCEL表:
VB本⾝提⾃动化功能可以读写EXCEL表,其⽅法如下:
1、在⼯程中引⽤Microsoft Excel类型库:
从"⼯程"菜单中选择"引⽤"栏;选择Microsoft Excel 9.0 Object Library(EXCEL2000),然后选择"确定"。表⽰在⼯程中要引⽤EXCEL类型库。
2、在通⽤对象的声明过程中定义EXCEL对象:
Dim xlApp As Excel.Application
Dim xlBook As Excel.WorkBook
Dim xlSheet As Excel.Worksheet
3、在程序中操作EXCEL表常⽤命令:
Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象
Set xlBook = xlApp.Workbooks.Open("⽂件名") '打开已经存在的EXCEL⼯件簿⽂件
xlApp.Visible = True '设置EXCEL对象可见(或不可见)
Set xlSheet = xlBook.Worksheets("表名") '设置活动⼯作表
xlApp.Cells(row, col) =值 '给单元格(row,col)赋值
XLApp.Cells(i, 1).Interior.ColorIndex = i'设计单元格颜⾊i=1--56
xlSheet.PrintOut '打印⼯作表
xlBook.Close (True) '关闭⼯作簿
xlApp.Quit '结束EXCEL对象
Set xlApp = Nothing '释放xlApp对象
xlBook.RunAutoMacros (xlAutoOpen) '运⾏EXCEL启动宏
xlBook.RunAutoMacros (xlAutoClose) '运⾏EXCEL关闭宏
⾃⼰⽤代码就可以获取颜⾊列表了
Sub yansecode()
For i = 1 To 56
XlApp.Cells(i, 1) = i
xlapp.Cells(i, 1).Interior.ColorIndex = i
Next
End Sub
4、在运⽤以上VB命令操作EXCEL表时,除⾮设置EXCEL对象不可见,否则VB程序可继续执⾏其它
操作,也能够关闭EXCEL,同时也可对EXCEL进⾏操作。但在EXCEL操作过程中关闭EXCEL对象时,VB程序⽆法知道,如果此时使⽤EXCEL对象,则VB程序会产⽣⾃动化错误。形成VB程序⽆法完全控制EXCEL的状况,使得VB与EXCEL脱节。
⼆、 EXCEL的宏功能:
EXCEL提供⼀个Visual Basic编辑器,打开Visual Basic编辑器,其中有⼀⼯程属性窗⼝,点击右键菜单的"插⼊模块",则增加⼀个"模块1",在此模块中可以运⽤Visual Basic语⾔编写函数和过程并称之为宏。其中,EXCEL有两个⾃动宏:⼀个是启动宏(Sub
Auto_Open()),另⼀个是关闭宏(Sub Auto_Close())。它们的特性是:当⽤EXCEL打含有启动宏的⼯簿时,就会⾃动运⾏启动宏,同理,当关闭含有关闭宏的⼯作簿时就会⾃动运⾏关闭宏。但是通过VB的⾃动化功能来调⽤EXCEL⼯作表时,启动宏和关闭宏不会⾃动运⾏,⽽需要在VB中通过命令xlBook.RunAutoMacros (xlAutoOpen)和xlBook.RunAutoMacros (xlAutoClose) 来运⾏启动宏和关闭宏。
三、 VB与EXCEL的相互勾通:
充分利⽤EXCEL的启动宏和关闭宏,可以实现VB与EXCEL的相互勾通,其⽅法如下:
在EXCEL的启动宏中加⼊⼀段程序,其功能是在磁盘中写⼊⼀个标志⽂件,同时在关闭宏中加⼊⼀段删除此标志⽂件的程序。VB程序在执⾏时通过判断此标志⽂件存在与否来判断EXCEL是否打开,如果此标志⽂件存在,表明EXCEL对象正在运⾏,应该禁⽌其它程序的运⾏。如果此标志⽂件不存在,表明EXCEL对象已被⽤户关闭,此时如果要使⽤EXCEL对象运⾏,必须重新创建EXCEL对象。
四、举例:
1、在VB中,建⽴⼀个FORM,在其上放置两个命令按钮,将Command1的Caption属性改为EXCEL,Command2的Caption属性改为End。然后在其中输⼊如下程序:
Dim xlApp As Excel.Application '定义EXCEL类
Dim xlBook As Excel.Workbook '定义⼯件簿类
Private Sub Command1_Click() '打开EXCEL过程
If Dir("D:\temp\excel.bz") = "" Then '判断EXCEL是否打开
Set xlApp = CreateObject("Excel.Application") '创建EXCEL应⽤类
xlApp.Visible = True '设置EXCEL可见
Set xlBook = xlApp.Workbooks.Open("D:\temp\bb.xls") '打开EXCEL⼯作簿
Set xlsheet = xlBook.Worksheets(1) '打开EXCEL⼯作表
xlApp .Activate '激活⼯作表
xlApp .Cells(1, 1) = "abc" '给单元格1⾏驶列赋值
xlBook.RunAutoMacros (xlAutoOpen) '运⾏EXCEL中的启动宏
Else
MsgBox ("EXCEL已打开")
End If
End Sub
Private Sub Command2_Click()
If Dir("D:\temp\excel.bz") <> "" Then '由VB关闭EXCEL
xlBook.RunAutoMacros (xlAutoClose) '执⾏EXCEL关闭宏
xlBook.Close (True) '关闭EXCEL⼯作簿
xlApp.Quit '关闭EXCEL
End If
Set xlApp = Nothing '释放EXCEL对象
End
End Sub
2、在D盘根⽬录上建⽴⼀个名为Temp的⼦⽬录,在Temp⽬录下建⽴⼀个名为"bb.xls"的EXCEL⽂件。
3、在"bb.xls"中打开Visual Basic编辑器,在⼯程窗⼝中点⿏标键选择插⼊模块,在模块中输⼊⼊下程序存盘:
Sub auto_open()
Open "d:\temp\excel.bz" For Output As #1 '写标志⽂件
Close #1
End Sub
Sub auto_close()
Kill "d:\temp\excel.bz" '删除标志⽂件
End Sub
4、运⾏VB程序,点击EXCEL按钮可以打开EXCEL系统,打开EXCEL系统后,VB程序和EXCEL分别属两个不同的应⽤系统,均可同时进⾏操作,由于系统加了判断,因此在VB程序中重复点击EXCEL按钮时会提⽰EXCEL已打开。如果在EXCEL中关闭EXCEL后再点EXCEL 按钮,则会重新打开EXCEL。⽽⽆论EXCEL打开与否,通过VB程序均可关闭EXCEL。这样就实现了VB与EXCEL的⽆缝连接。
范例⼀
Option Explicit
Private Sub Command1_Click()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlChar As New Excel.Chart
Dim xlSheet As New Excel.Worksheet
'建⽴需要的对象
Set xlApp = New Excel.Application
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("F:\BOOK1.xls")
Set xlSheet = xlBook.Worksheets(1)
'建⽴Chart 对象
Set xlChar = xlApp.Charts.Add()
xlChar.ChartType = xlLineMarkers
Call xlChar.SetSourceData(xlSheet.Range("A1:E7"), xlColumns) '原数据
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
isnull的用法'选中建⽴的ChartObjects对象
ActiveSheet.ChartObjects("图表 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.Legend.Select
'删除 退出(&X) 菜单
Dim i As Integer
For i = 1 To xlApp.CommandBars("File").Controls.Count
Debug.Print xlApp.CommandBars("File").Controls(i).Caption
If Left$(xlApp.CommandBars("File").Controls(i).Caption, 2) = "关闭" Then
xlApp.CommandBars("File").Controls(i).Visible = False 'Delete
Exit For
End If
Next
'显⽰EXCEL
xlApp.Visible = True
End Sub
范例⼆
RichTextBox1
Dim xlApp As Excel.Application
Set xlApp = New Excel.Application
---- 然后,可以⽤这些变量来访问在EXCEL应⽤程序中的从属对象、以及这些对象的属性和⽅法。例如:Set xlApp = CreateObject("Excel.Application")
‘激活EXCEL应⽤程序
xlApp.Visible = False ‘隐藏EXCEL应⽤程序窗⼝
Set xlBook = xlApp.Workbooks.Open(strDestination)
‘打开⼯作簿,strDestination为⼀个EXCEL报表⽂件
Set xlSheet = xlBook.Worksheets(1)
‘设定⼯作表
VB借助EXCEL实现表格设计
1、定义EXCEL对象变量
dim x as excel.application
2、VB中,启动EXCEL
set x=createobject("excel.application")
3、新建⼀个EXCEL⼯作簿
x.workbooks.add
4、选定⼯作表1
set xsheet=xbook.worksheets(1)
5、指定单元格,并赋值
6、指定EXCEL列宽
7、RANGE()函数,选定单元格区域
range(cells(1,1),cells(10,20))
8、设置EXCEL字体
xsheet.range(cells(1,1),cells(10,20)).font.name="⿊体"
9、设置EXCEL为粗体
xsheet.range(cells(1,1),cells(10,20)).fontbold=true
10、设置EXCEL表格边框
xsheet.range(cells(1,1),cells(10,20)).borders.linestyle=xlcontinuous
11、运⾏时,显⽰EXCEL或隐藏EXCEL
x.visible=true
12、保存⼯作簿
xbook save
13、退出EXCEL
14、交还控制权给EXCEL
set x=nothing
15、打印EXCEL表
x.active.window.selectedsheets.printout copies=numcopies
16、退出EXCEL时,不出现保存提⽰。
x.displayalerts=false
17、怎样运⽤EXCEL公式?
x.range("A3").formula= "=max(A1,A2)"
18、EXCEL代码获取技巧
打开EXCEL中的⼯具----宏----录制新宏,然后进⾏⼿⼯操作,结束后把所录的宏代码贴进你的VB程序就⾏。
19、合并单元格代码
x.range("A2:A5").inergecells=true
20、⾃动调整列宽代码
21、⽂本⾃动换⾏代码
22、设置字体颜⾊
23、打印预览代码
x.worksheets.printpreview
24、打开EXCEL⽂件
x.workbooks.open filename:="c:\my documents\my vb \lgx \dy.xls"
========================================================================================如何⽤VB控制EXCEL⽣成报表
做为⼀种简捷、系统的 Windows应⽤程序开发⼯具,Visual Basic 6 具有强⼤的数据处理功能,提供了多种数据访问⽅法,可以⽅便地存取Microsoft SQL Server、Oracle、XBase等多种数据库,被⼴泛应⽤于建⽴各种信息管理系统。但是,VB缺乏⾜够的、符合中⽂习惯的数据表格输出功能,虽然使⽤Crystal Report控件及 Crystal Reports程序可以输出报表,但操作起来很⿇烦,中⽂处理能⼒也不理想。Excel作为Micorsoft公司的表格处理软件在表格⽅⾯有着强⼤的功能,我们可⽤VB5编写直接控制Excel操作的程序,⽅法是⽤VB的OLE⾃动化技术获取Excel 2000 的控制句柄,从⽽直接控制Excel 2000的⼀系列操作。
下⾯给出⼀个实例:
⾸先建⽴⼀个窗体(FORM1)在窗体中加⼊⼀个DATA控件和⼀按钮,引⽤Microsoft Excel类型库:
从"⼯程"菜单中选择"引⽤"栏;选择Microsoft Excel 9.0 Object Library;选择"确定"。
然后在FORM的LOAD事件中加⼊:
Private Sub Form_Load()'数据库及表可以另选,本⽂以Nwind.mdb为例
Data1.DatabaseName = "C:\Program Files\Microsoft Visual Studio\VB98\Nwind.mdb"
Data1.RecordSource = "Customers"
Data1.Refresh
End Sub
在按钮的CLICK事件中加⼊
Private Sub Command1_Click()
Dim Irow, Icol As Integer
Dim Irowcount, Icolcount As Integer
Dim Fieldlen() '存字段长度值
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
With Data1.Recordset
.MoveLast
If .RecordCount < 1 Then
MsgBox ("Error 没有记录!")
Exit Sub
Irowcount = .RecordCount '记录总数
Icolcount = .Fields.Count '字段总数
ReDim Fieldlen(Icolcount)
.MoveFirst
For Irow = 1 To Irowcount + 1
For Icol = 1 To Icolcount
Select Case Irow
Case 1 '在Excel中的第⼀⾏加标题
xlSheet.Cells(Irow, Icol).Value = .Fields(Icol - 1).Name
Case 2 '将数组FIELDLEN()存为第⼀条记录的字段长
If IsNull(.Fields(Icol - 1)) = True Then
Fieldlen(Icol) = LenB(.Fields(Icol - 1).Name)
'如果字段值为NULL,则将数组Filelen(Icol)的值设为标题名的宽度
Else
Fieldlen(Icol) = LenB(.Fields(Icol - 1))
End If
xlSheet.Columns(Icol).ColumnWidth = Fieldlen(Icol)
'Excel列宽等于字段长
xlSheet.Cells(Irow, Icol).Value = .Fields(Icol - 1)
'向Excel的CellS中写⼊字段值
Case Else
Fieldlen1 = LenB(.Fields(Icol - 1))
If Fieldlen(Icol) < Fieldlen1 Then
xlSheet.Columns(Icol).ColumnWidth = Fieldlen1
'表格列宽等于较长字段长
Fieldlen(Icol) = Fieldlen1
'数组Fieldlen(Icol)中存放最⼤字段长度值
Else
xlSheet.Columns(Icol).ColumnWidth = Fieldlen(Icol)
End If
xlSheet.Cells(Irow, Icol).Value = .Fields(Icol - 1)
End Select
Next
If Irow <> 1 Then
If Not .EOF Then .MoveNext
End If
Next
With xlSheet
.Range(.Cells(1, 1), .Cells(1, Icol - 1)).Font.Name = "⿊体"
'设标题为⿊体字
.Range(.Cells(1, 1), .Cells(1, Icol - 1)).Font.Bold = True
'标题字体加粗
.
Range(.Cells(1, 1), .Cells(Irow, Icol - 1)).Borders.LineStyle = xlContinuous '设表格边框样式
End With
xlApp.Visible = True '显⽰表格
xlBook.Save '保存
Set xlApp = Nothing '交还控制给Excel
End With
End Sub
本程序在中⽂Windows98、中⽂VB6下通过。
=================================================== VB5.0调⽤Office97技巧
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论