Office中国论坛/Access中国论坛

标题: [求助]请问如何才能让子窗体数据输出WORD? [打印本页]

作者: xulanghui    时间: 2004-6-6 18:10
标题: [求助]请问如何才能让子窗体数据输出WORD?
[attach]4724[/attach]

请问如何才能让子窗体的数据也写入WORD文件(红色部份),并在结尾写入“以下空白”。

如果能超过15行能自动分页自动写入就最好了。

还有子窗体的序号能让它自动产生吗?

高手们,麻烦你们了。
作者: tmtony    时间: 2004-6-6 18:13
子窗体的序号可以子窗体beforeinsert事件中使用Dmax或Dlast取得子窗体数据表(符合条件)的最大序号加1赋给当前序事情如果要以Word更多的控制,可以创建Word.Application对象,然后对这个对象来控件格式,也可使用DDE
作者: xulanghui    时间: 2004-6-6 18:21
站长:你说的好像很复杂哎。可我不会编程,你说的“ 如果要以Word更多的控制,可以创建Word.Application对象,然后对这个对象来控件格式,也可使用DDE”好没有什么书籍可参照啊!能介绍这方面的书吗?[em06]
作者: tmtony    时间: 2004-6-6 18:33
看看Warmheart网友的一贴,看看能否有帮助,附带有程序。http://www.office-cn.net/forum.php?mod=viewthread&tid=14098
作者: xulanghui    时间: 2004-6-6 19:00
站长,我看过了,跟输出至WORD或EXCEL无关啊,都没有输出。
作者: 佳佳    时间: 2004-7-28 22:33
子窗体数据输出WORD??有人帮忙解决吗
作者: 佳佳    时间: 2004-7-30 07:18
顶一下,有人解决吗
作者: wu8313    时间: 2004-8-2 17:42
把如下代码 写在按钮"生成word"的click事件中:

  DoCmd.SelectObject acForm, "你的子窗体名称", True

    DoCmd.RunCommand acCmdOutputToRTF

站长的方法很好,好像可以预先设置word中格式,然后按照事先预定的文本格式导出,可是我不会做。我的方法只是实现了简单的office链接,导出后的文件自动保存在“我的文档”

抄段帮助给你:

Microsoft Access 支持动态数据交换 (DDE) 作为一个目标(客户)应用程序或源(服务器)应用程序。例如,一个作为客户的应用程序,如 Microsoft Word,可以通过 DDE,从一个作为服务器的 Microsoft Access 数据库来请求数据。

以下示例将演示,如何将 Microsoft Access 用作为一个 DDE 服务器,以使用 Visual Basic 来创建 Microsoft Word 过程。(必须正在运行 Microsoft Access ,才能使该示例工作。)
  1. Sub AccessDDE()

  2.     Dim intChan1 As Integer, intChan2 As Integer

  3.     Dim strQueryData As String



  4.     ' 使用“系统”主题,打开“罗斯文”示例数据库。

  5.     ' 必须在使用其他 DDE 主题之前已打开数据库。

  6.     intChan1 = DDEInitiate("MSAccess", "System")

  7.     ' 可能需要将此路径更改为“罗斯文”

  8.     ' 示例数据库的路径。

  9.     DDEExecute intChan1, "[OpenDatabase C:\Access\Samples\Northwind.mdb]"



  10.     ' 从“十种最贵的产品”查询中获得所有数据。

  11.     intChan2 = DDEInitiate("MSAccess", "Northwind.mdb;" _

  12.         & "QUERY Ten Most Expensive Products")

  13.     strQueryData = DDERequest(intChan2, "All")

  14.     DDETerminate intChan2



  15.     ' 关闭数据库。

  16.     DDEExecute intChan1, "[CloseDatabase]"

  17.     DDETerminate intChan1



  18.     ' 将检索的数据印打印到“调试”窗口。

  19.     Debug.Print strQueryData

  20. End Sub
复制代码





[此贴子已经被作者于2004-8-2 9:51:18编辑过]


作者: xulanghui    时间: 2004-8-3 00:37
8楼的,谢谢你。

你说的方法只能让子窗体生成WORD文件,如果能让输出的WORD只有当前子窗体显示的内容的话,好也好过我每次输出EXCEL再复制到WORD。

另还有个问题,在复制EXCEL单元格至WORD时,第一次粘贴右键上只有“粘贴”一项,先粘贴再撤消后再次看右键就多了“粘贴单元格及粘贴为嵌套表格”,可我要用的就是“粘贴单元格”,请问要怎样就能一次过找到“粘贴单元格”呢?

[此贴子已经被作者于2004-8-2 16:38:13编辑过]


作者: wu8313    时间: 2004-8-3 01:57
使用同样的方法,你也可以导出数据到excel中。用不着复制和粘贴。

DoCmd.SelectObject acForm, "你的子窗体名称", True  

DoCmd.RunCommand acCmdOutputToExcel

可是这仅仅只是实现和word和excel的链接和简单的发布,并不能按照事先预定的文格式导出。我觉得应该把word中的编程代码也写进来,比如设置页边距等等。请大家顶一顶。可惜我不会,有了结果就通知大家。使用这种方法生成报表,也是一种方法。再说报表的设计有些烦人,当然并不能取代报表。

当然,也可以导出为html格式。



[此贴子已经被作者于2004-8-2 17:59:20编辑过]


作者: xulanghui    时间: 2004-8-3 02:16
多谢10楼的,你说的编程我也不会[em06] ,有没办法只导出当前有当前子窗体显示的内容呢?
作者: wu8313    时间: 2004-8-5 23:23
<DIV class=quote>以下是引用xulanghui在2004-6-6 10:10:05的发言:



[attach]5905[/attach]


作者: wu8313    时间: 2004-8-5 23:27
以下是引用xulanghui在2004-6-6 10:10:05的发言:



[attach]4724[/attach]

请问如何才能让子窗体的数据也写入WORD文件(红色部份),并在结尾写入“以下空白”。

如果能超过15行能自动分页自动写入就最好了。

还有子窗体的序号能让它自动产生吗?

高手们,麻烦你们了。




作者: xulanghui    时间: 2004-8-6 00:01
桂思强老师及笛子老师的方法都只能用在单窗体,不能用在主子窗体,总之我没有实现过。[em03]而微软的例子生成RTF文件很多格式都变了,至于邮件合并又只能打印,不能单独成WORD文件,也不行。我现在只能希望能让当前的主子窗体数据输出EXCEL或WORD就好了,方便复制粘贴。[em07]
作者: wu8313    时间: 2004-8-6 17:57
不知道如何做?可我老是在想,子窗体的纪录数不确定,word的文字型域你打算如何确定它的个数。实在不行,就用报表
作者: xulanghui    时间: 2004-8-6 18:47
这个问题提了很久了,可能只用ACCESS不太好做到。至于子窗体记录确实没法固定,这是事实。用报表当然最好呢,可人家建设单位非要WORD版的,所以我现在的做法是让能用word的文字型域做的就用,不能用的我用复制粘贴的方法。[em03]
作者: 佳佳    时间: 2004-8-15 08:41
那就辛苦您了
作者: AlexLiu    时间: 2004-8-17 01:46
[attach]6116[/attach]



本来还有一篇说明,我发在我的专栏里了。正在审核ing……
作者: hi-wzj    时间: 2004-8-17 02:03
刘斑竹,您的专栏,指的是哪的?office中国里的?没有啊,希望能拜读到您的精华内容。
作者: xulanghui    时间: 2004-8-17 05:50
hi-wzj 版主说的是,看不出新见到的AlexLiu还是个高高手呢,我也希望能拜读到您的精华内容。


作者: 没牙兔兔    时间: 2004-9-3 04:11
呵呵,各位老大的方法都不错,俺也是参照这种来的还有一种思路,是利用range.find 和 replace的方法比如文本中用年份查找替换文本中“YYYY”的方法,谁测试看看另外可使用如下语句消除域的黑底框 vsWordDoc.FormFields.Shaded = False



'输出行政介绍信

Sub WordXZX(Xno As String)            

            

            Dim vsWordApp As Word.Application

             On Error Resume Next

              Err.Clear

            

              Set vsWordApp = GetObject(, "Word.Application")

              If Err.Number Then

                Set vsWordApp = CreateObject("Word.Application")

                Err.Clear

              End If

            

              'If vsWordApp.Visible Then vsWordApp.Visible = False

              On Error GoTo Err_cmd报表2_Click:

            'vsWordApp.Visible = False

              Dim WordTem As String, WordOut As String

              WordTem = IIf(Len(Application.CurrentProject.Path) = 3, Left(Application.CurrentProject.Path, 2), Application.CurrentProject.Path) & "\rpt\行政介绍信.doc"

              

              

              Dim vsWordDoc As Word.Document

              vsWordApp.Documents.Add Template:=WordTem

              Set vsWordDoc = vsWordApp.ActiveDocument

        

            

            '取得需填入的相关变量值

            

            Dim Num As String '文件编号

            Dim Blsj As String '审批时间

            Dim BZ As String '备注

            Dim XM() As String '姓名

            Dim XB() As String '性别

            Dim RW() As String '入伍时间

            Dim JX() As String '警衔

            Dim DC() As String '调出单位

            Dim Dr() As String '调入单位

            Dim DC2() As String '调出单位明细

            Dim Dr2() As String '调入单位明细

                    

            Dim Conn As ADODB.Connection

            Dim Rs As ADODB.Recordset

            Dim Strsql As String

            Dim i As Integer, j As Integer

            Set Conn = CurrentProject.Connection

            Set Rs = New ADODB.Recordset

            

            Strsql = "select * from qry兵_调 where 选择=true and 文件编号='" & Xno & "'"

            Rs.Open Strsql, Conn, adOpenKeyset

            If Not Rs.EOF Then

            

            

                  Num = IIf(IsNull(Rs!文件编号), "", Rs!文件编号)

                  Blsj = IIf(IsNull(Rs!审批时间), Date, Rs!审批时间)

                  BZ = IIf(IsNull(Rs!备注), "", Rs!备注)

                  

                  Num = "[" & Year(Blsj) & "]" & "第" & Xno

                  WordOut = IIf(Len(Application.CurrentProject.Path) = 3, Left(Application.CurrentProject.Path, 2), Application.CurrentProject.Path) & "\temp\行政介绍信_" & Num & ".doc"

         

                  Dim Xdd As String '函发单位

                  Xdd = IIf(IsNull(Rs!调入单位), "", Rs!调入单位)

            

                Dim XRscount As Integer '定义士兵宗数

                XRscount = Rs.RecordCount

               

                ReDim XM(XRscount) As String '姓名

                Dim Xmall As String

                ReDim XB(XRscount) As String '性别

                ReDim RW(XRscount) As String '入伍时间

                ReDim JX(XRscount) As String '警衔

                ReDim DC(XRscount) As String '调出单位

                ReDim Dr(XRscount) As String '调入单位

                ReDim DC2(XRscount) As String '调出单位

                ReDim Dr2(XRscount) As String '调入单位

               

                For i = 1 To XRscount

                        Xmall = Xmall & " " & IIf(IsNull(Rs!姓名), "", Rs!姓名)

                        XM(i) = IIf(IsNull(Rs!姓名), "", Rs!姓名)

                        XB(i) = IIf(IsNull(Rs!性别), "", Rs!性别)

                        RW(i) = IIf(IsNull(Rs!入伍时间), "", Rs!入伍时间)

                        JX(i) = IIf(IsNull(Rs!警衔), "", Rs!警衔)

                        DC(i) = IIf(IsNull(Rs!调出单位), "", Rs!调出单位)

                        Dr(i) = IIf(IsNull(Rs!调入单位), "", Rs!调入单位)

            
作者: xulanghui    时间: 2004-9-3 06:09
没牙兔兔 大侠,把你的示例传上来嘛,我想看看呢。[em03]
作者: 佳佳    时间: 2004-10-2 03:20
以下是引用xulanghui在2004-9-2 22:09:24的发言:

没牙兔兔 大侠,把你的示例传上来嘛,我想看看呢。[em03]




作者: JsdkRepent    时间: 2005-11-8 03:26
看看那个包先...
作者: nplgacce    时间: 2005-11-8 08:29
[em05]
作者: chengyi    时间: 2008-1-16 17:03
顶一下哦!顶一下哦!
作者: 021230ww    时间: 2009-2-2 16:45
非常关注
作者: ty_1029    时间: 2009-2-2 17:55
关注一下,顺便学习学习
我现在想的办法和楼主相反,我要把用OLE插入的WORD或EXCEL显示在窗体中去~~




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3