资源描述
vB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变 化,就得相应修改程序,给应用软件的维护工作带来极大的不便。因此有很多程序员现在已 经充分利用EXECL的强大报表功来实现报表功能。但由于VB与EXCEL由于分别属于不 同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。一、VB 读写 EXCEL 表:能获取到表的行数的代码:xlSheet2.UsedRange.Rows.CountVB本身提自动化功能可以读写EXCEL表,其方法如下:1、在工程中引用Microsoft Excel类型库:从”工程”菜单中选择”引用”栏;选择 Microsoft Excel 9.0 Object Library(EXCEL2000), 然后选择确定”。表示在工程中要引用EXCEL类型库。2、在通用对象的声明过程中定义EXCEL对象:Dim xlApp As Excel.ApplicationDim xlBook As Excel.WorkBookDim xlSheet As Excel.Worksheet3、在程序中操作EXCEL表常用命令:Set xlApp = CreateObject(Excel.Application)创建 EXCEL 对象Set xlBook = xlApp.Workbooks.OpenC文件名)打开已经存在的EXCEL工件簿文件 xlApp.Visible = True设置EXCEL对象可见(或不可见)Set xlSheet = xlBook.Worksheets(表名”)设置活动工作表xlSheet.Cells(row, col)=值给单元格(row,co l)赋值xlSheet.PrintOut 打印工作表xlBook.Close (True)关闭工作簿 xlApp.Quit 结束 EXCEL 对象 Set xlApp = Nothing 释放 xlApp 对象 xlBook.RunAutoMacros (xlAutoOpen)运行 EXCEL 启动宏 xlBook.RunAutoMacros (xlAutoClose)运行 EXCEL 关闭宏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)来运行启动宏和关闭宏。Set xlApp = CreateObject(Excel.Application)创建 EXCEL 对象Set xlBook = xlApp.Workbooks.Open(App.Path & 文件名.xls)打开已经存在的 EXCEL 工件 簿文件 xlApp.Visible = True设置EXCEL对象可见(或不可见)Set xlSheet = xlBook.Worksheets(sheell)设置活动工作表,sheet 1表示表名,可以使用字符 型变量代替。xlSheet.Activate 激活工作表,让它处于前台活动中。xlBook.RunAutoMacros (xlAutoOpen)运行自动开启宏 Macro1(),在 EXCEL 中加入以下宏 Sub auto_open()这是VBA中的自动打开时运行的宏您要宏自动运行的程序,比如可以call其它的宏,这样VB在打开EXCEL时,使用上面的 语句就可以先运行这个宏End SubxlSheet.Cells.Item(行数,列数)=值给EXCEL对象中的表的单元格附值。 xlSheet.Rows(7:7).Select 选定 EXCEL 表的第7行 xlApp.Selection.Delete shift:=xlUp 删除选定的行xlSheet.Rows(7).Insert 在第 7行处插入一行 ActiveSheet.PageSetup.CenterHeader =页眉内容给页眉附值xlSheet.Range(f7:h7).Select选定f7:h7之间的单元格,下面的程序是把它们合并。Application.CutCopyMode = FalseWith xlApp.Selection.HorizontalAlignment = xlGeneral.VerticalAlignment = xlCenter.WrapText = False.Orientation = 0.AddIndent = False.IndentLevel = 0.ShrinkToFit = False.ReadingOrder = xlContext.MergeCells = TrueEnd With如果有自己不会的可以用录制宏的办法,用手功操作一次你要的功能,然后看录下的宏程序, VBA中的宏程序几乎所有的宏在VB中都可以直接使用,关键是对象一定要搞清楚。VB操作EXCEL的介绍全面控制Excel首先创建Excel对象,使用ComObj:Dim ExcelID as Excel.ApplicationSet ExcelID as new Excel.Application1) 显示当前窗口:ExcelID.Visible := True;2) 更改Excel标题栏:ExcelID.Caption :=应用程序调用 Microsoft Excel;3) 添加新工作簿:ExcelID.WorkBooks.Add;4) 打开已存在的工作簿:ExcelID.WorkBooks.Open( CExcelDemo.xls);5) 设置第2个工作表为活动工作表:ExcelID.WorkSheets2.Activate;或 ExcelID.WorkSheets Sheet2 .Activate;6)给单元格赋值:ExcelID.Cellsl,4.Value :=第一行第四列;7)设置指定列的宽度(单位:字符个数),以第一列为例:ExcelID.ActiveSheet.Columns1.ColumnsWidth := 5;8)设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:ExcelID.ActiveSheet.Rows2.RowHeight := 1/0.035; / 1厘米9)在第8行之前插入分页符:ExcelID.WorkSheets1.Rows8.PageBreak := 1;参考代码:ActiveSheet.HPageBreaks(1).Location = Range(A22)10)在第8列之前删除分页符:ExcelID.ActiveSheet.Columns4.PageBreak := 0;11)指定边框线宽度:ExcelID.ActiveSheet.Range B3:D4 .Borders2.Weight := 3;1-左2-右3-顶4-底5-斜()6-斜(/ )12)清除第一行第四列单元格公式:ExcelID.ActiveSheet.Cells1,4.ClearContents;13)设置第一行字体属性:ExcelID.ActiveSheet.Rows1.Font.Name :=隶书;ExcelID.ActiveSheet.Rows1.Font.Color := clBlue;ExcelID.ActiveSheet.Rows1.Font.Bold := True; ExcelID.ActiveSheet.Rows1.Font.UnderLine := True;14)进行页面设置:a. 页眉:ExcelID.ActiveSheet.PageSetup.CenterHeader :=报表演示;b. 页脚:ExcelID.ActiveSheet.PageSetup.CenterFooter :=第&P 页;c. 页眉到顶端边距2cm:ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;d. 页脚到底端边距3cm:ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;e. 顶边距2cm: ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;f. 底边距2cm:ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;g. 左边距2cm: ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;h. 右边距2cm: ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;i. 页面水平居中:ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;j. 页面垂直居中:ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;k. 打印单元格网线:ExcellD.ActiveSheet.PageSetup.PrintGridLines := True;15)拷贝操作:a. 拷贝整个工作表:ExcelID.ActiveSheet.Used.Range.Copy;b. 拷贝指定区域:ExcelID.ActiveSheet.Range A1:E2 .Copy;c. 从A1位置开始粘贴:ExcelID.ActiveSheet.Range. A1 .PasteSpecial;d. 从文件尾部开始粘贴:ExcelID.ActiveSheet.Range.PasteSpecial;16)插入一行或一列:a. ExcelID.ActiveSheet.Rows2.Insert;b. ExcelID.ActiveSheet.Columns1.Insert;17)删除一行或一列:a. ExcelID.ActiveSheet.Rows2.Delete;b. ExcelID.ActiveSheet.Columns1.Delete;18)打印预览工作表:ExcelID.ActiveSheet.PrintPreview;19)打印输出工作表:ExcelID.ActiveSheet.PrintOut;20)工作表保存:If not ExcelID.ActiveWorkBook.Saved thenExcelID.ActiveSheet.PrintPreviewEnd if21)工作表另存为:ExcelID.SaveAs( CExcelDemo1.xls);22)放弃存盘:ExcelID.ActiveWorkBook.Saved := True;23)关闭工作簿:ExcelID.WorkBooks.Close;24)退出 Excel:ExcelID.Quit;25)设置工作表密码:ExcelID.ActiveSheet.Protect 123, DrawingObjects:=True, Contents:=True, Scenarios:=True26)EXCEL的显示方式为最大化ExcelID.Application.WindowState = xlMaximized27)工作薄显示方式为最大化ExcelID.ActiveWindow.WindowState = xlMaximized28)设置打开默认工作薄数量ExcelID.SheetsInNewWorkbook = 329)关闭时是否提示保存(true保存;false不保存)ExcelID.DisplayAlerts = False30)设置拆分窗口,及固定行位置ExcelID.ActiveWindow.SplitRow = 1ExcellD.ActiveWindow.FreezePanes = True31) 设置打印时固定打印内容ExcellD.ActiveSheet.PageSetup.PrintTitleRows = $1:$132) 设置打印标题ExcelID.ActiveSheet.PageSetup.PrintTitleColumns =33) 设置显示方式(分页方式显示)ExcelID.ActiveWindow.View = xlPageBreakPreview34) 设置显示比例ExcelID.ActiveWindow.Zoom = 10035) 让Excel响应DDE请求Ex.Application.IgnoreRemoteRequests = False用VB操作EXCEL以下是代码片段:Private Sub Command3_Click()On Error GoTo err1Dim i As LongDim j As LongDim objExl As Excel.Application 声明对象变量Me.MousePointer = 11 改变鼠标样式Set objExl = New Excel.Application 初始化对象变量 objExl.SheetsInNewWorkbook = 1 将新建的工作薄数量设为1 objExl.Workbooks.Add 增加一个工作薄 objExl.Sheets(objExl.Sheets.Count).Name = bookl修改工作薄名称 objExl.Sheets.Add , objExl.Sheets(bookl) 增加第二个工作薄在第一个之后 objExl.Sheets(objExl.Sheets.Count).Name = book2objExl.Sheets.Add , objExl.Sheets(book2) 增加第三个工作薄在第二个之后 objExl.Sheets(objExl.Sheets.Count).Name = book3 objExl.Sheets(bookl).Select 选中工作薄 vbook1For i = 1 To 50 循环写入数据For j = 1 To 5If i = 1 ThenobjExl.Selection.NumberFormatLocal = 设置格式为文本 objExl.Cells(i, j) = E & i & jElseobjExl.Cells(i, j) = i & jEnd IfNextNextobjExl.Rows(l:l).Select 选中第一行 objExl.Selection.Font.Bold = True 设为粗体 objExl.Selection.Font.Size = 24 设置字体大小 objExl.Cells.EntireColumn.AutoFit 自动调整列宽objExl.ActiveWindow.SplitRow = 1 拆分第一行 objExl.ActiveWindow. SplitColumn = 0 拆分列 objExl.ActiveWindow.FreezePanes = True 固定拆分 objExl.ActiveSheet.PageSetup.PrintTitleRows = $1:$1设置打印固定行 objExl.ActiveSheet.PageSetup.PrintTitleColumns =打印标题 objExl.ActiveSheet.PageSetup.RightFooter =打印时间:& _ Format(Now, yyyy 年 mm 月 dd 日 hh:MM:ss) objExl.ActiveWindow.View = xlPageBreakPreview 设置显示方式 objExl.ActiveWindow.Zoom = 100 设置显示大小 objExl.ActiveSheet.PageSetup.Orientation = xlLandscape 设置打印方向(横向) 给工作表加密码 objExl.ActiveSheet.Protect 123, DrawingObjects:=True, _ Contents:=True, Scenarios:=True objExl.Application.IgnoreRemoteRequests = False objExl.Visible = True 使 EXCEL 可见 objExl.Application.WindowState = xlMaximized EXCEL 的显示方式为最大化 objExl.ActiveWindow.WindowState = xlMaximized 工作薄显示方式为最大化 objExl.SheetsInNewWorkbook = 3 将默认新工作薄数量改回3个 Set objExl = Nothing 清除对象 Me.MousePointer = 0 修改鼠标Exit Suberr1: objExl.SheetsInNewWorkbook = 3 objExl.DisplayAlerts = False 关闭时不提示保存 objExl.Quit 关闭 EXCEL objExl.DisplayAlerts = True 关闭时提示保存 Set objExl = Nothing Me.MousePointer = 0End Sub
展开阅读全文