Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用VBA仅打印Word文档的第一页?_Vba_Excel - Fatal编程技术网

如何使用VBA仅打印Word文档的第一页?

如何使用VBA仅打印Word文档的第一页?,vba,excel,Vba,Excel,我希望有人能帮我。在工作中,我们为数控机床制作程序。这些是word文档。这些文件保存在以机器命名的文件夹中。我制作了一个用户表单,您可以在其中选择机器并填写程序编号。单击“确定”后,它将打开所有需要的程序。(这是成功的) 然后我想打印所有打开程序的第一页。这就是我被卡住的地方。请参阅下面的代码 If Len(programbox.Value) = 1 Then zeros = "00000" If Len(programbox.Value) = 2 Then zeros = "0000" If

我希望有人能帮我。在工作中,我们为数控机床制作程序。这些是word文档。这些文件保存在以机器命名的文件夹中。我制作了一个用户表单,您可以在其中选择机器并填写程序编号。单击“确定”后,它将打开所有需要的程序。(这是成功的) 然后我想打印所有打开程序的第一页。这就是我被卡住的地方。请参阅下面的代码

If Len(programbox.Value) = 1 Then zeros = "00000"
If Len(programbox.Value) = 2 Then zeros = "0000"
If Len(programbox.Value) = 3 Then zeros = "000"
If Len(programbox.Value) = 4 Then zeros = "00"
If Len(programbox.Value) = 5 Then zeros = "0"
If Len(programbox.Value) = 6 Then zeros = ""

Set wordapp = CreateObject("word.application")
If machinebox.Value = "CTX510" Then letter = "C"
If machinebox.Value = "CTX510" Then machinebox.Value = "CTX510\program"
If machinebox.Value = "Lu25" Then letter = "F"
If machinebox.Value = "LB45" Then letter = "N"


set objdoc1 = wordapp.documents.Open "\\path\Machine\" & machinebox.Value & "\" & letter & "1" & zeros & programmabox.Value & ".OPT"
set objdoc2 = wordapp.documents.Open "\\path\Machine\" & machinebox.Value & "\" & letter & "2" & zeros & programmabox.Value & ".OPT"
set objdoc3 = wordapp.documents.Open "\\path\Machine\" & machinebox.Value & "\" & letter & "3" & zeros & programmabox.Value & ".OPT"

objdoc1.printout
objdoc2.printout
objdoc3.printout
这会打印出整个文件。我在internet上搜索过,但找不到如何将其更改为仅第一页。

您可以尝试对代码进行一些(未经测试的)重构:

Dim iLetter As Long
Dim letter As String
Dim objdoc As Object

Select Case machinebox.Value
    Case "CTX510"
        letter = "C"
        machinebox.Value = "CTX510\program"
    Case "Lu25"
        letter = "F"
    Case "LB45"
        letter = "N"
End Select

With CreateObject("word.application")
    For iLetter = 1 To 3
        Set objdoc = .documents.Open("\\path\Machine\" & machinebox.Value & "\" & letter & iLetter & Format(programbox.Value, "000000") & ".OPT")
        objdoc.PrintOut Pages:="1"
        objdoc.Close False
    Next iLetter
End With
其中我:

  • 使用
    Format()
    函数将
    programbox
    中的数字正确格式化为带前导零的6位数字

  • 使用了
    选择案例。。。。结束选择
    block在不同的
    machinebox.Value
    cases之间切换

  • 实例化了一个“临时”Word应用程序对象

  • 使用从1到3的循环,而不是重复同一语句三次


您需要查看msdn以获取打印输出,记录自己的宏从word打印一个宏是最简单的学习方法。另外,前几行可以用这个
zeros=string(6-Len(programbox.Value),“0”)来处理。
谢谢,我将尝试使用它this@Mick17请不要更改您的问题并使现有答案无效。改为问一个新问题。“我回滚了您的编辑。@piet.t抱歉,该站点是新的。”。我会问一个新问题。谢谢你的帮助谢谢你提供的信息。作为一名没有受过任何培训的初级程序员,经常会有人绕道而行,因为他根本不知道“正确”的方法,我已经将其集成到我的宏中。它可以工作,但仍然可以打印出整个文档。我已尝试将页面:=“1”更改为从:=“1”,更改为:=“1”。但这也没用。有什么建议吗?检查方法文档。它将
页面
参数描述为要打印的页码和页面范围,用逗号分隔。您可以尝试使用参数
范围:=wdPrintFromTo,From:=“1”,To:=“1”