庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>VB专区>基础教程>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

Excel、Access、VB的结合应用

 作者:杨伟民    日期:2005-8-4 11:14:43
字号选择〖 〗/ 双击滚屏 单击停止   
---- 微软公司的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中文版中调试通过。
上一篇:处理加了密码的MDB文件    下一篇:在VB中直接用ODBC API访问数据库  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 杨伟民
信息来源: 网络 录入时间: 2005-8-4 11:14:43
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿