2016-11-29 9 views
1

私は誰かが私を助けることを望んでいる。職場では、CNCマシン用のプログラムを作成しています。これらはワードドキュメントです。これらは、マシンの名前を付けたフォルダに保存されます。私はマシンを選択してプログラム番号を記入できるユーザーフォームを作った。 「OK」をクリックすると、必要なすべてのプログラムが開きます。 (これはうまくいきます) 開いているすべてのプログラムの最初のページを印刷します。これはどこに詰まっています。以下のコードを参照してください。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

を繰り返す「一時的」Wordアプリケーションオブジェクトをインスタンス化//msdn.microsoft.com/en-us/library/office/ff840681.aspx、単語から1つを印刷するマクロを記録するのが最も簡単な方法です。また、最初の数行はこの 'zeros = string(6-Len(programbox.Value)、" 0 ")で処理することができます。 –

+0

ありがとう、私はこれを試してみます – Mick17

+0

@ Mick17質問を変更しないでください既存の回答を無効にします。代わりに新しい質問をしてください。私はあなたの編集をロールバックしました。 –

答えて

1

あなたのコードのこの小さな(未テスト)リファクタリング試みることができる:

  • が正常に6桁1とにprogramboxから番号をフォーマットするFormat()機能を使用:I

    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 
    

    を先行ゼロ

  • Select Case .... End Selectブロックを使用して異なるmachinebox.Valueのケースを切り替えるブロック:

  • は1から3までのループを使用する代わりに、あなたは、プリントアウトHTTPSのMSDNを見てする必要があります3回同じ文

+0

この情報をありがとうございます。訓練を受けていない初心者のプログラマーとして、大きな迂回路を持つものがたくさん発生します。なぜなら、単にそれを行う「正しい」方法がわからないからです。 – Mick17

+0

これを私のマクロに統合しました。それは動作しますが、それでも文書全体が印刷されます。私はページ:= "1"をfrom:= "1"、To:= "1"に変更しようとしました。しかし、これはどちらも役に立たなかった。助言がありますか? – Mick17

+0

check [PrintOut()](https://msdn.microsoft.com/en-us/library/office/ff840681.aspx)メソッドのドキュメント。これは 'Pages'パラメータをカンマ_で区切って印刷するページ番号とページ範囲を記述しています。 'Range:= wdPrintFromTo、From:=" 1 "、To:=" 1 "'というパラメータを使ってみることもできます – user3598756

関連する問題