2016-11-29 469 views
1

我希望有人能帮助我。在工作中,我们制作CNC机器的程序。这些是文档文档。这些保存在以机器命名的文件夹中。我已经制作了一个用户表单,您可以在其中选择机器并填写程序编号。点击“确定”后,它将打开所有需要的程序。 (这工作成功) 然后我想打印所有打开的程序的第一页。这是卡住的地方。见下面的代码。如何仅使用VBA打印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 

这打印出整个文档。我在互联网上搜索,但无法找到我可以改变这只有第一页。

+0

你需要看看MSDN上打印出来的https: //msdn.microsoft.com/en-us/library/office/ff840681.aspx,记录你自己的宏从单词打印一个是最简单的学习方法。此外,前几行可以用这个'zeros = string(6-Len(programbox.Value),“0”)' –

+0

来处理谢谢,我将尝试使用这个 – Mick17

+0

@ Mick17请不要改变你的问题并使现有答案无效。改为提出一个新问题。我回滚了你的编辑。 –

回答

1

你可以尝试你的代码的这个小(未经测试)重构:

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位的一个与前导零

  • 使用了一个Select Case .... End Select块来切换不同machinebox.Value个案

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

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

+0

感谢您提供此信息。作为一个没有任何培训的初学程序员,它会发生很多事情,因为人们只是不知道“正确”的方式去做 – Mick17

+0

我已经将它集成到了我的宏中。它工作,但它仍然打印出整个文件。我试图将Pages:=“1”更改为:=“1”,至:=“1”。但是这也没有帮助。有什么建议么? – Mick17

+0

检查[PrintOut()](https://msdn.microsoft.com/en-us/library/office/ff840681.aspx)方法文档。它将'Pages'参数描述为_要打印的页码和页面范围,用逗号分隔。你可以尝试使用参数'Range:= wdPrintFromTo,From:=“1”,To:=“1” – user3598756