Access交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 产品
  • 活动
  • 培训
  • 招聘
  • 论坛
  • 商城
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • 懒人有懒计——浅谈自动报表
  • 直接使用print输出字符..
  • 如何使用代码控制报表的上下..
  • ACCESS-VBA编程 ..
  • 怎样打开外部数据库中的报表
  • Access通用报表打印设..

最新文章

  • Access中窗体或者报表..
  • Access报表文本框按字..
  • Access报表打印设置
  • Access报表补空行代码
  • 懒人有懒计——浅谈自动报表
  • Access使用excel..

联系方式

Access交流网

电  话:0760-88315075
热  线:0760-88315075

邮  编:528463
咨询QQ:1918333016
营销QQ:4008553990

Email:1918333016@qq.com

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 报表打印
报表打印

access输出资料到word用于打印

两种输出方法随便选:

Function export_word_use_range()

    '请先引用 word
    Dim objWord As New Word.Application
    Dim ragRange As Range
    Dim Ils1 As InlineShape
    
    objWord.Documents.add
    objWord.WindowState = wdWindowStateMaximize
    objWord.Visible = True
    
    objWord.ActiveDocument.PageSetup.LeftMargin = 30
    objWord.ActiveDocument.PageSetup.RightMargin = 30

    Set ragRange = objWord.ActiveDocument.Paragraphs.add.Range
    ragRange.InsertBefore "标题"
    ragRange.Font.Bold = True
    ragRange.Font.Size = 22
    ragRange.ParagraphFormat.Alignment = wdAlignParagraphCenter
    
    '引用ado
    Dim Rs As New ADODB.Recordset
    Rs.Open "select * from temp order by 课程名称,类型名称,临时编号", CurrentProject.Connection, 1, 1
    
    If Rs.EOF And Rs.BOF Then
        MsgBox "没有任何记录"
        Exit Function
    End If
    Set ragRange = Nothing
    

    Dim strType As String
    Dim lngNO As Long
    Dim lngTopicNo As Long
    LoadTopicNo
    
    Do Until Rs.EOF
        If strType <> Rs("类型名称") Then
            lngTopicNo = lngTopicNo + 1
            Set ragRange = objWord.ActiveDocument.Paragraphs.add.Range

            ragRange.InsertBefore strTopicNo(lngTopicNo) & "、" & Rs("类型名称") & ":"
                        ragRange.InsertBefore vbCrLf
            ragRange.Bold = True
            ragRange.Font.Size = 15
            
            strType = Rs("类型名称")
            lngNO = 0
        End If
            lngNO = lngNO + 1
            
        Set ragRange = objWord.ActiveDocument.Paragraphs.add.Range
        ragRange.InsertBefore Str(lngNO) & ".  " & Nz(Rs("试题内容"), "")
        ragRange.Bold = False
        ragRange.Font.Size = 10

        If Len(Nz(Rs("图形"), "")) > 0 Then
            Set Ils1 = objWord.ActiveDocument.InlineShapes.AddPicture(filename:= _
                        Rs("图形"), _
                        LinkTofile:=False, SaveWithDocument:=True)
        End If
        

        Set ragRange = objWord.ActiveDocument.Paragraphs.add.Range
        ragRange.InsertBefore Chr(9) & "第 " & Str(lngNO) & ". 题答案:  " & Nz(Rs("试题答案"), "")
        ragRange.Bold = False
        ragRange.Font.Size = 10
        ragRange.Font.Color = wdColorLightBlue
      
      
        Rs.MoveNext
    Loop
    Rs.Close
    
    
    
    
    
    
    
    
    
    Set ragRange = objWord.ActiveDocument.Paragraphs.add.Range
    ragRange.InsertAfter "试卷生成日期:" & FormatDateTime(Now, vbLongDate) & " " & FormatDateTime(Now, vbLongTime)
    ragRange.Font.Bold = False
    ragRange.Font.Size = 10
    ragRange.ParagraphFormat.Alignment = wdAlignParagraphRight
    

End Function


Function export_word_use_selection()

    '请先引用 word
    Dim objWord As New Word.Application
    Dim Slt1 As Selection
    Dim Ils1 As InlineShape
    
    objWord.Documents.add
    objWord.WindowState = wdWindowStateMaximize
    objWord.Visible = True
    
    objWord.ActiveDocument.PageSetup.LeftMargin = 30
    objWord.ActiveDocument.PageSetup.RightMargin = 30


    Set Slt1 = objWord.ActiveWindow.Selection
    Slt1.Font.Size = 22
    Slt1.Font.Bold = True
    Slt1.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Slt1.InsertBefore "标题" & vbCrLf
    Slt1.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdMove
 

    
    '引用ado
    Dim Rs As New ADODB.Recordset
    Rs.Open "select * from temp order by 课程名称,类型名称,临时编号", CurrentProject.Connection, 1, 1
    
    If Rs.EOF And Rs.BOF Then
        MsgBox "没有任何记录"
        Exit Function
    End If
    
    

    Dim strType As String
    Dim lngNO As Long
    Dim lngTopicNo As Long
    LoadTopicNo
    
    Do Until Rs.EOF
        If strType <> Rs("类型名称") Then
            lngTopicNo = lngTopicNo + 1
            Slt1.Font.Bold = True
            Slt1.Font.Size = 15
            Slt1.ParagraphFormat.Alignment = wdAlignParagraphThaiJustify
            Slt1.InsertBefore strTopicNo(lngTopicNo) & "、" & Rs("类型名称") & ":" & vbCrLf
            Slt1.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdMove
            strType = Rs("类型名称")
            lngNO = 0
        End If
        
        lngNO = lngNO + 1
        Slt1.Font.Bold = False
        Slt1.Font.Size = 10
        Slt1.InsertBefore Chr(9) & Str(lngNO) & ".  " & Nz(Rs("试题内容"), "") & vbCrLf
        Slt1.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdMove
     
     
        If Len(Nz(Rs("图形"), "")) > 0 Then
            Slt1.InlineShapes.AddPicture filename:=Rs("图形"), LinkTofile:=False, SaveWithDocument:=True
            Slt1.InsertBefore vbCrLf
            Slt1.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdMove
        End If
        
     
        Slt1.Font.Bold = False
        Slt1.Font.Size = 10
        Slt1.Font.Color = wdColorLightBlue
        Slt1.InsertBefore Chr(9) & Chr(9) & "第 " & Str(lngNO) & ". 题答案:  " & Nz(Rs("试题答案"), "") & vbCrLf
        Slt1.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdMove
        Slt1.Font.Color = wdColorAutomatic
        Rs.MoveNext
    Loop
    Rs.Close
    
    Slt1.InsertBefore vbCrLf
    Slt1.InsertBefore vbCrLf
    
    
    Slt1.InsertAfter "试卷生成日期:" & FormatDateTime(Now, vbLongDate) & " " & FormatDateTime(Now, vbLongTime)
    Slt1.Font.Bold = False
    Slt1.Font.Size = 10
    Slt1.ParagraphFormat.Alignment = wdAlignParagraphRight
    
    

End Function


转自Aaccess911


还有一个例子,比较详细:


在Access中应用ADO将数据输出到Word
1. 系统配置 
系统软件:Microsoft Windows 9x/NT/2000;Microsoft Access 2000;Microsoft Word 2000。 
样例数据库:“C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb”,Office 2000中包含的例子。可将其中的“产品”表复制到一个新的数据库中,如“D:\db1.mdb”。 
窗 体:在数据库“D:\db1.mdb”中新建窗体“窗体1”,其中只包含1个命令按钮“命令0”。 
引用ADO:按Alt+F11进入Visual Basic编辑器,执行“工具”->“引用”命令,在弹出的引用窗体中选择“Microsoft ActiveX Data Objects 2.1”或更高版本。 
引用Word:再次执行命令“工具”->“引用”,在弹出的引用窗体中选择“Microsoft Word 9.0 Object Library”。 
2. 代码详解 
在“窗体1”的设计模式下右键单击“命令0”按钮,选择“事件生成器”,进入Visual Basic编辑器,创建过程“Private Sub 命令0_Click()”,其代码如下: 

Sub 命令0_Click() 
'输入表格标题 
Title = InputBox(vbCrLf & vbCrLf & "请输入表格标题:", "表格标题", "XX公司产品报价单") 
If Title = "" Then Title = "XX公司产品报价单" 
 
'步骤1:建立数据连接cnn 
'由于数据库已经打开,所以直接应用CurrentProject.Connection就可以建立连接 
Set cnn = New ADODB.Connection 
Set cnn = CurrentProject.Connection 
 
'步骤2:用SQL语句创建记录集rs 
Set rs = New ADODB.Recordset 
'设定游标类型与锁定类型 
rs.CursorType = adOpenKeyset 
rs.LockType = adLockOptimistic 
'制定特定的查询条件,可以是任何有效的SQL查询,甚至包括多表、多条件等复杂的查询,查询条件也常常从窗体取得 
SQL = "select 产品名称,单位数量,单价,库存量 from 产品 where 单价>10.00" 
'创建记录集rs 
rs.Open SQL, cnn 
'统计字段数及记录数 
total_fields = rs.Fields.Count 
total_records = rs.RecordCount 
 
'步骤3:建立Word文档对象 
Set mywdapp = CreateObject("word.application") 
'调整Word窗口大小 
mywdapp.WindowState = wdWindowStateNormal 
'生成新的Word文档实例 
mywdapp.Documents.Add 
'设置视图为页面视图 
mywdapp.ActiveWindow.View.Type = wdPrintView 
'转到Word视图,显示文档生成过程 
mywdapp.Visible = True 
mywdapp.Activate 
'设置文档(表格)字体 
mywdapp.ActiveDocument.Range.Font.Size = "9" 
 
'步骤4:将记录集rs中的字段名称和字段内容输出到Word,各字段之间用制表符分隔 
'输出字段名称 
For I = 0 To total_fields - 2 
mywdapp.Selection.TypeText Text:=rs.Fields(I).Name & vbTab 
Next I 
'最后一个字段名称后加回车符 
mywdapp.Selection.TypeText Text:=rs.Fields(total_fields - 1).Name & vbCrLf 
'逐条输出字段内容 
Do While Not rs.EOF 
For I = 0 To total_fields - 2 
tmpstr = rs.Fields(I).value 
If rs.Fields(I).Name = "单价" Then 
tmpstr = Format(tmpstr, "####.00") 
End If 
mywdapp.Selection.TypeText Text:=tmpstr & vbTab 
Next I 
'一条记录的最后一个字段后加回车符 
mywdapp.Selection.TypeText Text:=rs.Fields(total_fields - 1).value & vbCrLf 
rs.MoveNext 
Loop 
 
'步骤5:关闭记录集 
rs.Close 
Set rs = Nothing 
 
'步骤6:对Word中的数据进行格式化处理 
'选定文本,将其转换为表格 
'设置视图为普通视图 
mywdapp.ActiveWindow.View.Type = wdNormalView 
'将光标移动到文档末尾 
mywdapp.Selection.EndKey Unit:=wdStory 
'删除文档末尾多余的回车符 
mywdapp.Selection.Delete Unit:=wdCharacter, Count:=1 
'选中全部内容 
mywdapp.Selection.WholeStory 
'将所选内容转换为表格 
mywdapp.Selection.ConvertToTable Separator:=wdSeparateByTabs, DefaultTableBehavior:=wdWord8TableBehavior 
'将光标移动到文档开头 
mywdapp.Selection.HomeKey Unit:=wdStory 
'选定表格对象 
Set Temp_Table = mywdapp.ActiveDocument.Tables(1) 
'根据需要对表格进行处理,这是制作表格格式的关键,可反复调试 
'本例只简单地设置了表格居中、自动调整表格列宽、表头居中、标题行重复、设置表格边框线、设置表格纵向居中 
Temp_Table.Rows.Alignment = wdAlignRowCenter 
Temp_Table.AutoFitBehavior wdAutoFitContent 
Temp_Table.Rows(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter 
Temp_Table.Rows(1).Range.Rows.HeadingFormat = wdToggle 
Temp_Table.Borders(wdBorderLeft).LineWidth = wdLineWidth150pt 
Temp_Table.Borders(wdBorderRight).LineWidth = wdLineWidth150pt 
Temp_Table.Borders(wdBorderTop).LineWidth = wdLineWidth150pt 
Temp_Table.Borders(wdBorderBottom).LineWidth = wdLineWidth150pt 
Temp_Table.Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter 
'将光标移动到文档开头 
mywdapp.Selection.HomeKey Unit:=wdStory 
'拆分表格 
mywdapp.Selection.SplitTable 
mywdapp.Selection.Font.Name = "黑体" 
'插入标题 
mywdapp.Selection.TypeText Text:=Title & vbCrLf 
mywdapp.Application.ScreenRefresh '刷屏 
'转到Acdess视图,显示结束对话框 
mywdapp.Visible = False 
Msg = "数据提取完毕。" & vbCrLf & vbCrLf 
Msg = Msg & "总记录数=" & total_records & " 条" 
MsgBox Msg, vbOKOnly, "数据提取完毕" 
'转到Word视图,显示文档 
mywdapp.Visible = True 
mywdapp.Activate 
End Sub 

 
三、在Word中应用ADO直接提取Access数据库中的数据 
1. 系统配置 
系统软件: Microsoft Windows 9x/NT/2000;Microsoft Word 2000。 
样例数据库:“C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb”,Office 2000中包含的例子。 
引用ADO:按Alt+F11进入Visual Basic编辑器,执行命令“工具”->“引用”,在弹出的引用窗体中选择“Microsoft ActiveX Data Objects 2.1”或更高版本。 
2. 代码详解 
进入Visual Basic编辑器,创建过程“Sub Word_ADO()”,其代码如下: 
 
Sub Word_ADO() 
'输入表格标题 
Title = InputBox(vbCrLf & vbCrLf & "请输入表格标题:", "表格标题", "XX公司产品报价单") 
If Title = "" Then Title = "XX公司产品报价单" 
 
'步骤1:建立数据连接cnn 
'打开连接,示例数据库:C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb 
Set cnn = New ADODB.Connection 
cnn.Provider = "Microsoft.jet.oledb.4.0" 
cnn.Open "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb" 
 
'步骤2:用SQL语句创建记录集rs 
Set rs = New ADODB.Recordset 
rs.CursorType = adOpenKeyset 
rs.LockType = adLockOptimistic 
SQL = "select 产品名称,单位数量,单价,库存量 from 产品 where 单价>10.00" 
rs.Open SQL, cnn 
total_fields = rs.Fields.Count 
total_records = rs.RecordCount 
ActiveDocument.Range.Font.Size = "9" 
 
'步骤3:将记录集rs中的字段名称和字段内容输出到Word文档,各字段之间用制表符分隔 
For I = 0 To total_fields - 2 
Selection.TypeText Text:=rs.Fields(I).Name & vbTab 
Next I 
Selection.TypeText Text:=rs.Fields(total_fields - 1).Name & vbCrLf 
Do While Not rs.EOF 
For I = 0 To total_fields - 2 
tmpstr = rs.Fields(I).value 
If rs.Fields(I).Name = "单价" Then 
tmpstr = Format(tmpstr, "####.00") 
End If 
Selection.TypeText Text:=tmpstr & vbTab 
Next I 
Selection.TypeText Text:=rs.Fields(total_fields - 1).value & vbCrLf 
rs.MoveNext 
Loop 
 
'步骤4:关闭记录集和连接 
rs.Close 
cnn.Close 
Set rs = Nothing 
Set cnn = Nothing 
 
'步骤5:对Word中的数据进行格式化处理 
ActiveWindow.View.Type = wdNormalView 
Selection.EndKey Unit:=wdStory 
Selection.Delete Unit:=wdCharacter, Count:=1 
Selection.WholeStory 
Selection.ConvertToTable Separator:=wdSeparateByTabs, DefaultTableBehavior:=wdWord8TableBehavior 
Selection.HomeKey Unit:=wdStory 
Set Temp_Table = ActiveDocument.Tables(1) 
Temp_Table.Rows.Alignment = wdAlignRowCenter 
Temp_Table.AutoFitBehavior wdAutoFitContent 
Temp_Table.Rows(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter 
Temp_Table.Rows(1).Range.Rows.HeadingFormat = wdToggle 
Temp_Table.Borders(wdBorderLeft).LineWidth = wdLineWidth150pt 
Temp_Table.Borders(wdBorderRight).LineWidth = wdLineWidth150pt 
Temp_Table.Borders(wdBorderTop).LineWidth = wdLineWidth150pt 
Temp_Table.Borders(wdBorderBottom).LineWidth = wdLineWidth150pt 
Temp_Table.Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter 
Selection.HomeKey Unit:=wdStory 
Selection.SplitTable 
Selection.Font.Name = "黑体" 
Selection.TypeText Text:=Title & vbCrLf 
Application.ScreenRefresh 
Msg = "数据提取完毕。" & vbCrLf & vbCrLf 
Msg = Msg & "总记录数=" & total_records & " 条" 
MsgBox Msg, vbOKOnly, "数据提取完毕" 
End Sub 

 
四、两种方法的比较 
1. 适用性 
上述两种方法都可以满足我们制作特殊报表的要求,但笔者认为Access+ADO+Word更适合于进行多表的复杂查询,编制的东西也更有“程序味”,若既要求录入数据又要求输出特殊报表,可采用该方法;而Word+ADO非常适合于处理表格形式固定的报表,不负责数据录入,只要求输出报表的情况。 
2. 复杂性 
在程序的编写上,这两种方法也有一些小的差别:前者比后者略微复杂些,在对一些特殊命令的处理上两者也有一些不同。 
3. 对报表格式的控制 
由于Word本身就是个字处理软件,所以它对文档的控制也就比Access对文档的控制更容易、更灵活,若对表格要求很高,采用后者会更加有效。 
4. 处理速度 
两者的处理速度基本相当。上述两段程序采用的都是先输出数据,再将其转换为表格的方法,这样处理主要是基于速度上的考虑,特别是对于几百条乃至上千条的记录,其处理速度是比较快的。另外,也可以直接向文档中输出表格,再逐行增加表格或逐单元格地填写数据,但对于大的报表来讲,其速度将大打折扣。影响处理速度的因素是多方面的,主要瓶颈是在Word中,如表格的复杂程度、页面视图、对象的使用,等等。 

 

发布人:网络文章  
分享到:
点击次数:  更新时间:2009-05-04 09:06:18  【打印此页】  【关闭】
上一条:ADO打开带密码的ACCESS数据库  下一条:分享:3小时学会树控件



相关文章

  • • Access中窗体或者报表页眉和页面页眉的区别,窗体页脚和页面页脚的区别
  • • Access报表文本框按字数同步缩放
  • • Access报表打印设置
  • • Access报表补空行代码
  • • 懒人有懒计——浅谈自动报表
  • • Access使用excel输出复杂报表
  • • 报表每页打印到一定行数自动分页
  • • 解决Access在页面设置中设置边距无法保存的问题

热门文章

  • [2017-07-22] Access报表文本框按字数同步缩放access数据库
  • [2005-02-04] Windows 脚本组件 与 ACCESSaccess数据库
  • [2017-06-15] Access报表打印设置access数据库
  • [2008-11-28] 自由设置页码打印报表access数据库
  • [2005-03-17] Access轻松实现多数据批量打印access数据库
  • [2009-02-27] ACCESS-VBA编程 第八章 报表access数据库

热门产品

  1. 电子厂管理软件系统

    电子厂管理软件系统

  2. 短信专家接口(可用于企业及个人多种短信用途)

    短信专家接口(可用于企业及个人多种短信用途)

  3. 通用票据打印软件

    通用票据打印软件

公司动态|在线留言|在线反馈|联系我们|友情链接|会员中心|站内搜索|网站地图

中山市天鸣科技发展有限公司 版权所有 1999-2018 粤ICP备10043721号

广东省中山市西苑广场富贵阁20楼A座

电话:0760-88315075 手机:13928102596 QQ:1918333016

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2021  www.metinfo.cn