+ -
当前位置:首页 → 问答吧 → 想用vba完成打印所选内容到它原来的位置,请高人指点

想用vba完成打印所选内容到它原来的位置,请高人指点

时间:2009-02-03

来源:互联网

我现在有一篇word文档,想选打其中的一部分内容。而且打印出来的内容还是在它本来的位置上,而不是打印在空白纸的起始部位。为了工作效率,我现在希望通过vba快速达到目的,但就是不知道怎么写代码,望高人指点。先谢谢了!

作者: shiedron   发布时间: 2009-02-03

建议楼主上传问题附件,并加以说明,以便大家了解和解答。

作者: LangQueS   发布时间: 2009-02-03

其实我的想法很简单,比方说,我有一篇word文档只有一段,我把它打印在了一张A4纸上。现在我写好了第二段,要把第二段打印在刚才那张A4纸上,打出来后它的位置刚好在前面一段的后面(两段的位置关系和word文档里的一样)。
 

[ 本帖最后由 shiedron 于 2009-2-4 15:51 编辑 ]

作者: shiedron   发布时间: 2009-02-04

不知楼主为何要这样做。
看看如下代码是否可行。其实际效果是打印当前页,只是先将当前页中选定区域以外的文本字体临时设置为白色再打印而已。要求当前页没有有图片等内容,当然也可设置不打印图形对象。

Sub test()
With ActiveDocument
    .Range(.Bookmarks("\page").Start, Selection.Start).Font.Color = wdColorWhite
    .Range(Selection.End, .Bookmarks("\page").End).Font.Color = wdColorWhite
    .PrintOut Range:=wdPrintCurrentPage
    .Undo 2
End With
End Sub

作者: sylun   发布时间: 2009-02-04

全选前一段,设置字体为白色。

作者: LangQueS   发布时间: 2009-02-04

多谢二位高人的相助。 昨天我运用和你们相同的原理已经将问题解决了。但是我写的代码要比你写的要繁琐许多,这里就不拿出来班门弄斧了。因为工作需要,我们每天都要用word写大量的纯文字文档(没有图像),然后把它打印出来。而且打印出来的东西还必需是连贯的。也就是说,今天打印的东西要接着昨天的,明天打印的东西要接着今天的。以前我和我的同事们都是在word里将以前写的都删掉,然后在前面插入空行再打印出来。操作起来很是烦人,所以我想通过VBA编程来提高工作效率,减轻工作负担。在此,我代表我的同事们再次谢谢了。祝万事如意百事可乐,牛年工作牛赚钱更牛!
其实,有很多人在工作中都会碰到和我差不多同样的问题,昨天我碰到的一个朋友就是这样,因为通过上面的方法可以节省很多纸张和油墨。
能否再请教一下:如果我要打的一段文字一半在第一页,另一半在第二页。或者一半在第页二页,另一半在第三页。该如何是好呢?

作者: shiedron   发布时间: 2009-02-05

试试如下代码:

Sub test2()
'如果有选定区域(可跨页)则只打印选定区域的内容,否则打印插入点至文档结尾的内容
With ActiveDocument
    .Range(0, Selection.Start).Font.Color = wdColorWhite
    If Selection.Type = wdSelectionNormal Then
        .Range(Selection.End, .Content.End).Font.Color = wdColorWhite
        .PrintOut Range:=wdPrintFromTo, From:=.Bookmarks("\page").Range.Information(wdActiveEndPageNumber), _
            To:=Selection.Information(wdActiveEndPageNumber)
        .Undo 2
    Else
        .PrintOut Range:=wdPrintFromTo, From:=.Bookmarks("\page").Range.Information(wdActiveEndPageNumber), _
            To:=.ComputeStatistics(wdStatisticPages)
        .Undo
    End If
End With
End Sub

作者: sylun   发布时间: 2009-02-05

谢谢楼上的朋友再次出手相助。我想我的问题这回应该是完全解决了。我也从中学到了很多东西,再次谢谢了!

作者: shiedron   发布时间: 2009-02-05

第二组代码test2运行时有错误提示
    运行时错误‘13’
    类型不匹配
  .PrintOut Range:=wdPrintFromTo, From:=.Bookmarks("\page").Range.Information(wdActiveEndPageNumber), _
            To:=Selection.Information(wdActiveEndPageNumber)
以上代码可能有问题。

作者: shiedron   发布时间: 2009-02-10

引用:
原帖由 shiedron 于 2009-2-10 09:04 发表
第二组代码test2运行时有错误提示
    运行时错误‘13’
    类型不匹配
  .PrintOut Range:=wdPrintFromTo, From:=.Bookmarks("\page").Range.Information(wdActiveEndPageNumber), _
            To:=Selectio ...
原来是参数的数据类型出了问题,当时没有测试过。可再试试如下代码:

Sub test2()
'如果有选定区域(可跨页)则只打印选定区域的内容,否则打印插入点至文档结尾的内容
With ActiveDocument
    .Range(0, Selection.Start).Font.Color = wdColorWhite
    If Selection.Type = wdSelectionNormal Then
        .Range(Selection.End, .Content.End).Font.Color = wdColorWhite
        .PrintOut Range:=wdPrintFromTo, From:=CStr(.Bookmarks("\page").Range.Information(wdActiveEndPageNumber)), _
            To:=CStr(Selection.Information(wdActiveEndPageNumber)), Background:=True
        .Undo 2
    Else
        .PrintOut Range:=wdPrintFromTo, From:=CStr(.Bookmarks("\page").Range.Information(wdActiveEndPageNumber)), _
            To:=CStr(.ComputeStatistics(wdStatisticPages)), Background:=True
        .Undo
    End If
End With
End Sub

作者: sylun   发布时间: 2009-02-10

sylun兄弟,您的回复真是快啊!我为我们论坛能有您这样集热心、智慧于一身的人才而感到骄傲!

作者: shiedron   发布时间: 2009-02-10

这个也许以后能用得上,谢谢10楼老师的分享!

作者: lisan   发布时间: 2011-04-17