Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

求一段导出到word并自动保存doc文档的代码

dhwc  发表于:2014-06-07 20:22:07  
复制

各位老师,我想从数据库中根据模板通知单.doc替换书签来自动生成以序号命名的doc文档并直接打印,该怎么做,下面的代码提示保存但实际并没有保存,到底哪儿错了呢?


Private Sub print_Click()
    On Error Resume Next    ' 将错误处理的方式改为“继续下一行”。
    Dim DocApp As Object                                '定义Doc应用程序对象变量
    Set DocApp = GetObject(, "word.Application")        '得到当前的WORD应用程序对象
    Dim strFileName As String
    strFileName = CurrentProject.Path & "\文书\" & "通知单" & Me.序号 & ".doc"

    If Err.Number <> 0 Then                             '出错说明WORD没有运行
       Err.clear                                        '清除 Err 对象的所有属性设置
       Set DocApp = CreateObject("word.Application")    '创建WORD对象
       
       If Err.Number <> 0 Then                          '未安装WORD应用程序错误
          MsgBox "请确认是否安装WORD应用程序!", vbQuestion, "系统提示:"
          Exit Sub
       End If
    End If

    DocApp.Visible = False   '隐藏WORD应用程序
    Dim DocObj As Object     '定义Word对象
    Dim DocWin As Object     '定义Word窗口对象

    Set DocObj = DocApp.Documents.Add(CurrentProject.Path & "\通知单模板.doc") '使用定义好的模板创建新文件
    Set DocWin = DocObj.ActiveWindow

    With DocObj
             .Bookmarks("序号").Range.Text = 序号
             .Bookmarks("来件时间").Range.Text = 来件时间
             .Bookmarks("交办时间").Range.Text = 交办时间
             .Bookmarks("信访人姓名").Range.Text = 信访人姓名
             .Bookmarks("TextLB").Range.Text = 类别
             .Bookmarks("来源").Range.Text = 来源
             .Bookmarks("联系电话").Range.Text = 联系电话
             .Bookmarks("联系地址").Range.Text = 联系地址
             .Bookmarks("来件网址").Range.Text = 来件网址
             .Bookmarks("来件文名").Range.Text = 来件文名
             .Bookmarks("来件文号").Range.Text = 来件文号
             .Bookmarks("诉求事项主题").Range.Text = 诉求事项主题
             .Bookmarks("办理责任单位").Range.Text = 办理责任单位
             .Bookmarks("办理责任人").Range.Text = 办理责任人
             .Bookmarks("联系人电话").Range.Text = 联系人电话
             .Bookmarks("包案领导").Range.Text = 包案领导
             .Bookmarks("包案领导电话").Range.Text = 包案领导电话
             .Bookmarks("包案领导电话").Range.Text = 包案领导电话
             .Bookmarks("办理情况").Range.Text = 办理情况

    End With

    objDoc.SaveAs strFileName
    Beep
    
    If MsgBox("导出已完成,是否打开该文件?", vbQuestion + vbYesNo, "导出完成") = vbYes Then
        objApp.Visible = True
        objDoc.Saved = True
        blnNoQuit = True
    End If

   DocObj.PrintNormal                '打印

    '释放对象占用内存
    Set DocApp = Nothing
    Set DocObj = Nothing
    Set DocWin = Nothing

End Sub


肯请指教,谢谢!

 

Top
cspa 发表于:2014-06-08 08:17:32
整个一个乱七八糟,好像你在折腾access,考验它操控word的能力,单定义word对象就有三个DocApp、DocObj、objDoc。不对最后一个还没定义,后面就用上了。别的也不说了单就这句    objDoc.SaveAs strFileName,你定义和操作的word文档是DocObj,你保存的文档是objDoc。整个一对不上。

dhwc 发表于:2014-06-08 08:33:04

唉,本来就是菜鸟,东拼西凑的代码,哪知道这么多毛病啊


楼上的大侠给个完整的代码呗?



dhwc 发表于:2014-06-08 08:42:10
Private Sub print_Click()
    On Error Resume Next    ' 将错误处理的方式改为“继续下一行”。

     Dim DocObj As Object     '定义Word对象
     Dim DocWin As Object     '定义Word窗口对象

    Set DocObj = DocApp.Documents.Add(CurrentProject.Path & "\通知单模板.doc") '使用定义好的模板创建新文件
    Set DocWin = DocObj.ActiveWindow
    
    Dim strFileName As String
    strFileName = CurrentProject.Path & "\文书\" & "通知单" & Me.序号 & ".doc"

    If Err.Number <> 0 Then                             '出错说明WORD没有运行
       Err.clear                                        '清除 Err 对象的所有属性设置
       Set DocObj = CreateObject("word.Application")    '创建WORD对象
       
       If Err.Number <> 0 Then                          '未安装WORD应用程序错误
          MsgBox "请确认是否安装WORD应用程序!", vbQuestion, "系统提示:"
          Exit Sub
       End If
    End If

    DocObj.Visible = False   '隐藏WORD应用程序
 
    With DocObj
             .Bookmarks("序号").Range.Text = 序号
             .Bookmarks("联系电话").Range.Text = 联系电话
             .Bookmarks("诉求事项主题").Range.Text = 诉求事项主题
             .Bookmarks("办理情况").Range.Text = 办理情况
    End With

    DocObj.SaveAs strFileName
    Beep
    
    If MsgBox("导出已完成,是否打开该文件?", vbQuestion + vbYesNo, "导出完成") = vbYes Then
        DocObj.Visible = True
        DocObj.Saved = True
        blnNoQuit = True

    End If


    DocObj.PrintNormal              '打印


    '释放对象占用内存
    Set DocObj = Nothing
    Set DocWin = Nothing

End Sub


这样也不行?



cspa 发表于:2014-06-08 09:15:18
最好能上传实例

dhwc 发表于:2014-06-08 10:19:32

附件在这 ,恳请楼上的老师帮忙看下 任意用户名不用密码


点击下载此附件


附件已修改


谢谢!



cspa 发表于:2014-06-08 10:42:51
还需要你的word模板文件(留言答复单模板.doc),因为你用的是.Bookmarks方法,word模板设置不好也会出问题

dhwc 发表于:2014-06-08 10:56:14
附件已修改,谢谢

cspa 发表于:2014-06-08 11:28:05
由于没有模板文件,未经调试。仅供参考。点击下载附件

dhwc 发表于:2014-06-08 11:48:35
没有生成指定的doc文档啊??老师麻烦你再看下?

cspa 发表于:2014-06-08 11:59:16
因为你用的是.Bookmarks方法,所以需要你的word模板文件(留言答复单模板.doc),要先设置好,在里面把需要处的.Bookmarks设置定位好。这些都没有是不行的。别的不说了,你把你的“留言答复单模板.doc”样板(就是你要输出的文档格式)先发给我吧。

dhwc 发表于:2014-06-08 12:00:32

上面的附件里有,重新发过了


谢谢谢谢



cspa 发表于:2014-06-08 12:28:09

再试试

时间有限,我只做了个别字段,其他你自己完善



dhwc 发表于:2014-06-08 15:20:44

感谢楼上的老师!好了,加了行代码,出错的方式继续下一行


Private Sub print_Click()
    On Error Resume Next    '出错的方式继续下一行
    
    Dim DocObj As Object     '定义Word对象
    
    Set DocObj = CreateObject("word.application")
    DocObj.Application.Documents.Open Filename:=CurrentProject.Path & "\模板\留言答复单模板.doc"
    DocObj.Application.Visible = True
    With DocObj.Documents("留言答复单模板.doc")
        .Bookmarks("序号").Range.Text = Me.序号
        .Bookmarks("来件时间").Range.Text = Nz(Me.来件时间, "")           '这里改成空好看点
        .Bookmarks("来件时间").Range.Text = Nz(Me.来件时间, "")
        .Bookmarks("交办时间").Range.Text = Nz(Me.交办时间, "")
        .Bookmarks("信访人姓名").Range.Text = Nz(Me.信访人姓名, "")
        .Bookmarks("类别").Range.Text = Nz(Me.类别, "")
        .Bookmarks("来源").Range.Text = Nz(Me.来源, "")
        .Bookmarks("联系电话").Range.Text = Nz(Me.联系电话, "")
        .Bookmarks("联系地址").Range.Text = Nz(Me.联系地址, "")
        .Bookmarks("来件网址").Range.Text = Nz(Me.来件网址, "")
        .Bookmarks("来件文名").Range.Text = Nz(Me.来件文名, "")
        .Bookmarks("来件文号").Range.Text = Nz(Me.来件文号, "")
        .Bookmarks("诉求事项主题").Range.Text = Nz(Me.诉求事项主题, "")
        .Bookmarks("办理责任单位").Range.Text = Nz(Me.办理责任单位, "")
        .Bookmarks("办理责任人").Range.Text = Nz(Me.办理责任人, "")
        .Bookmarks("联系人电话").Range.Text = Nz(Me.联系人电话, "")
        .Bookmarks("包案领导").Range.Text = Nz(Me.包案领导, "")
        .Bookmarks("包案领导电话").Range.Text = Nz(Me.包案领导电话, "")
        .Bookmarks("诉求事项内容").Range.Text = Nz(Me.诉求事项内容, "")
        .Bookmarks("办理情况").Range.Text = Nz(Me.办理情况, "")
    End With

    DocObj.ActiveDocument.SaveAs Filename:=CurrentProject.Path & "\文书\" & "留言答复单" & Me.序号 & ".doc"
    DocObj.Application.PrintOut
    '释放对象占用内存
    Set DocObj = Nothing
End Sub


再次感谢!!



无锡福记 发表于:2014-06-09 07:36:34
太繁琐,这种就是两行循环代码搞定的事

总记录:14篇  页次:1/1 9 1 :