|
|
||||
首页
文学作品 网页设计 平面设计 程序设计 考试认证 基础办公 QQ资源 服务器架设 网站运营 网页资源
|
|
|
| 汉南在线 → 程序设计 → VB程序 | |||||||||||
---- 微软公司的Office系列办公软件相信已是众所周知,其中Excel强大的统计制表功能、Access功能完备的数据处理能力深受众多用户所喜爱。Visual Bsaic更是微软公司又一有力的产品,它简单易学,在Windows编程中的应用十分广泛。本文通过介绍数据处理及复杂表格的打印,来讨论VB与Excel及Access的结合运用。 ---- 由于笔者所在的公司员工众多,在进行职工养老保险缴费的计算工作时,若使用劳动局编制的软件(用Foxbase编写),无论是在管理或维护方面均显得力不从心。于是在公司领导的强烈要求下,决定由笔者构思重新编制。基本思路是:1.将所有员工资料输入Access进行处理,以便于维护。2.在Excel中预先制成有表头的空表(Access相对欠缺处理复杂表格的能力),对需要进行金额汇总或其他运算的单元格可直接输入公式。3.在VB中编写程序代码,从Access中提取数据填入Excel对应表格相应的单元格,并输出至打印机。 ---- 部分窗体及源程序代码如下: ---- 1.程序主模块 ---- 定义Excel、Access对象变量,显示系统启动画面,进入系统主程序界面。强调一下,在编写程序之前须加入对Excel及Access库函数的引用,具体操作是:选择菜单栏注释:工程注释:\注释:引用…注释:,将注释:可使用的引用注释:列表框内注释:Microsoft Access 8.0 Object Library注释:和 注释:Microsoft Excel 8.0 Object Library注释:两项前的复选框标为选中,按"确定"返回。 mdsMain.bas 注释:定义数据库记录集及Excel对象变量 Public ex As New Excel.Application Public exwbook As Excel.Workbook Public exsheet As Excel.Worksheet Public mydatabase As Database Public myrecordset1 As Recordset [定义记录集] …… …… Public Opt As Integer 注释:报表选项 [Opt为frmSelreport.frm返回值] Public isYN As Boolean Sub Main() Load frmSplash frmSplash.Show frmSplash.Label2.Caption = " 系统正在加载Access数据库..." Set mydatabase = OpenDatabase("c:\sbda\sbda.mdb") Set myrecordset1 = mydatabase.OpenRecordset ("报表打印(一)") [此处对记录集赋值] …… …… frmSplash.Label2.Caption = " 系统正在加载Excel电子表格..." Set ex = CreateObject("excel.application") Set exwbook = ex.Workbooks.Open("c:\sbda\sbda.xls") Load FrmInput 注释:将数据输入窗体加载到内存中 Unload frmSplash Load FrmMain 注释:将主程序界面加载到内存中 End Sub ---- 2.报表打印模块 ---- 其中ExcelDoForVB1()是一子程序,由prnProess()调用,作用是从Access中提取所需数据资料,填入Excel对应工作表(Worksheet)的相应单元格(Cells)中,然后打印已填入数据的表格;prnProess()则负责实现对VB通用对话框(Commom Dialog)中打印功能的控制。 mdlPrint.bas Option Explicit 注释:定义循环计数变量 Public nRow As Integer, nCol As Integer, nBtoE As Integer 注释:定义变量接收打印对话框返回值 Public BeginPage, EndPage, NumCopies 注释:程序运行时需进行判断的各种标志 Public nflag, Flag, ifNum 注释:数据记录集中指针移动数 Public PageN As Integer, n As Integer 注释:bar1为进度条 Public bar1 As Object Sub prnProess() 注释:控制通用对话框打印功能 Set bar1 = FrmPrint.PgsBar1 注释:进度条 On Error GoTo errhandle: If Flag = 0 Then 注释:当打印对话框中选"全部"时 Select Case Opt 注释:选择需要打印的表格 Case 1 nflag = 1 myrecordset1.MoveFirst myrecordset1.MovePrevious PageN = 1 Do While nflag = 1 Call ExcelDoForVB1 注释:数据填入Excel单元格打印 PageN = PageN + 1 Loop Case 2 …… …… End Select Else If Flag = 2 Then 注释: 当打印对话框中选"页"时 If EndPage - BeginPage = 0 Then ifNum = 0 Else If EndPage - BeginPage > 0 Then ifNum = 1 Else ifNum = 2 End If End If Select Case ifNum Case 2 Exit Sub Case 0 Select Case Opt 注释: 选择需要打印的表格 Case 1 myrecordset1.MoveFirst n = (BeginPage - 1) * (49 - 4 + 1) - 1 myrecordset1.Move n PageN = BeginPage Call ExcelDoForVB1 注释:数据填入Excel单元格并打印 Case 2 …… …… End Select Case 1 Select Case Opt 注释:选择需要打印的表格 Case 1 myrecordset1.MoveFirst n = (BeginPage - 1) * (49 - 4 + 1) - 1 myrecordset1.Move n PageN = BeginPage For nBtoE = BeginPage To EndPage Call ExcelDoForVB1 注释:填入Excel单元格并打印 PageN = PageN + 1 Next nBtoE Case 2 …… …… End Select End Select End If End If FrmMain.Visible = True Exit Sub errhandle: FrmPrint.Visible = False FrmMain.Visible = True End Sub ---- 注意,下段仅通过ExcelDoForVB1()对"报表(一)"的处理,来说明数据填入Excel并打印的整个过程。 Sub ExcelDoForVB1() 注释:打印报表(一) FrmPrint.Visible = True Set exsheet = exwbook.Worksheets("sheet1") ex.Sheets("Sheet1").Select ex.Range("A4:U49").Select ex.Selection.ClearContents ex.Range("A4").Select bar1.Min = 0 bar1.Max = 45 For nRow = 4 To 49 bar1.Value = nRow - 4 注释:进度显示栏进程 myrecordset1.MoveNext If myrecordset1.EOF Then nflag = 0 Exit For End If For nCol = 1 To 21 exsheet.Cells(nRow, nCol) = myrecordset1.Fields(nCol - 1) Next nCol Next nRow exsheet.Cells(52, 21) = "第 " + CStr(PageN) + " 页" FrmPrint.Visible = False bar1.Value = 0 ActiveWindow.SelectedSheets.PrintOut Copies:=NumCopies End Sub ---- 虽然本文针对的是大多数已熟练掌握数据库技术,且精通编程之道的朋友们。但笔者认为仍有必要提一提将数据输入Access的过程,因为编出来的软件更多是面向各类普通用户,对他们来说最要紧的是好用,而其间的一系列关联并不想深究。所以设计一个好的输入界面十分有必要,在设计时可以运用VB提供的Data控件,当然若是考虑性能的话还可以用代码直接操纵数据。关于如何使用Data控件访问数据库,在Visual Basic的联机手册(Online book)中有很详细的说明,此处不再赘述。 ---- 文中的所有程序在Visual Bsaic5.0中文专业版及Office97中文版中调试通过。
| |||||||||||
| >> 相关文章 | |||||||||||
|
授权使用:汉南在线 http://www.hzwz.net/(2008-2009) Copyright (c) 2002-2007 汉南在线. All Rights Reserved . 经营许可证:陕ICP备05000109号 Powered by:汉南在线 |