• 締切済み

VBAで印刷ページの指定をする場合について

VBA初心者です。よろしくお願いいたします。 次のVBAをエクセルで作成し、D:testというフォルダーにあるtest1.docxのB4判からA4判への縮小印刷と最初の1ページ目の印刷を試みています。結果として 縮小印刷にはなるのですが、1ページ目のみの印刷ではなくtest1.docxの全てのページが印刷されてしまいます。「PrintZoomPaperHeight:=16838」の記述に続けて「 , Pages:="1"」としてtest1.docxの最初の1ページだけ印刷する記述をしたのですが、どのような記述にすればよいのかご教示頂ければ幸いです。 Sub 印刷() Dim wdApp As Object, document As Object Const DIR_PATH As String = "D:test" Set wdApp = CreateObject("Word.Application") wdApp.Visible = True Set document = wdApp.Documents.Open(DIR_PATH & "\" & "test1.docx") document.PrintOut PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=11906, PrintZoomPaperHeight:=16838 , Pages:="1" document.Close wdApp.Quit End Sub

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

この質問に上げているVBAコードはどこからコピーしたのか(学んだのか)判らないが、複雑化しているように思う。 ーー だから単純に 「Word VBA ページ指定 印刷」でGoogleなどで照会し下記のような記事が出てくる。 それを実行したら、それらしく印刷できたが。 第2ページのみの例 (2-3ページなら解説の通りのページ番号を2つ指定し、真中にーを入れる書き方。 (すべて半角文字数字)) Sub ページを指定して印刷する() ActiveDocument.PrintOut _ Range:=wdPrintRangeOfPages, _ Pages:="2" End Sub 実際の例文をワードの文書に、コピペしてやってみると、うまく行く(限定的にページ単位で、指定ページ部分を印刷する)ようだが。ただしテキストだけの文書でしかテストしてない。 文書に図表などあると、むつかしい場面に出くわすかも。 == ページというオブジェクトはParagraphなどと違い、微妙な位置づけのようだ。ユーザーが直接決める ものではない場合が多い。 フォントサイズを1文字いじくるだけで、所属ページ数がかわる不安定なものだ。 日本人は文書に対し、まずページでイメージしているのかもしれないが、ワード設計者は、そこを第1重視の仕組ではないようだ。だからWindow関連を探したり、大変。 質問の標題には「WordVBAの質問」を明記せよ。エクセルVBAと違い、ここで回答をあきらめる。 WordVBAは解説本が少なく、WEB記事などを頼らざるを得ないが、仕組み(Objectsなど)の複雑さで 習得は難しい。よほど業界関連でもない限り、本腰を入れて時間を覚悟できないなら、避けてとおるべきだ。(印刷、文章家、特許、法曹関連、官庁届け出文書の多い人などがVBAに関心を示しているよう?) 講習も東京中心で機会も少ないようだ。

dugout2017
質問者

お礼

ご回答ありがとうございます。 PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=11906, PrintZoomPaperHeight:=16838 , Pages:="1"の記述は、Wordのマクロの記録結果から、その一部をExcelのマクロへコピペしたものです。縮小については動作しています。 また、質問内容の印刷の実行は、エクセルのマクロに記述して、エクセル上でそのマクロを実行し、パソコンのフォルダーに保存されているWordファイルを印刷するという内容です。ご教示いただいたグーグル検索などで、調べてもう一度トライしてみます。ありがとうございました。

関連するQ&A

  • Excel VBAで呼び出したWordが文書への差し込みボタンが効かない状態で開く

    以下のExcel VBAでWordは開くのですが、新規文書への差し込みボタンが、活きていないです。参照設定は、Microsoft Word 11.0 Object Libraryを入れています。 どうしたらいいのでしょうか?困っています。 Sub Wordを開き、差し込み印刷する() Dim ワード As Object Dim ワード文書 As Object Dim フルパス As String フルパス = "D:\案内状.doc"          'フルパスを作成 Set ワード = CreateObject("Word.Application") 'Wordを起動 ワード.Visible =True 'Wordを表示 Set ワード文書 = ワード.documents.Open(フルパス) 'Word文書を開く End Sub

  • VBAに範囲を指定して印刷

    特定のセルに数字を入力することでVLOOKUPで印刷ページを 検索して指定できるシートを作成しています。 下記のようなVBAを作成しました。 印刷開始ページと印刷終了ページを指定する場合、 セルの指定はどのようにすれば、よいのでしょうか? 開始ページと終了ページが同じセルの為、 開始ページ=Rnage("セル") 終了ページ=Rnage("セル") としてしまいますと、エラーが出てしまいます。 Sub 印刷() Dim S As Long Dim B As Long S = Application.InputBox("印刷開始ページを入力", Type:=1) If 開始ページ = 0 Then Exit Sub B = Application.InputBox("印刷終了ページを入力", Type:=1) If 終了ページ = 0 Then Exit Sub ActiveSheet.PageSetup.Order = xlOverThenDown ActiveWindow.SelectedSheets.PrintOut _ From:=S, To:=B, Collate:=True End Sub 宜しくお願い致します。

  • VBAでファイルを消したい

    こんばんわ! VBAでエクセルファイルをバックアップしながら使用しているのですが、10個以上ファイルが溜まったら一番古いものを消したいです。 途中まではできているのですが、古いファイルを選択する方法が分かりませんToT 途中までのソースを乗せますので、アドバイスの程よろしくお願いいたします。 ================== Private Sub backup_bot_Click() Dim Path As String, WSH As Variant Dim fc As Long Dim fn As String 'マイドキュメントにバックアップ Set WSH = CreateObject("WScript.Shell") Path = WSH.SpecialFolders("MyDocuments") & "\test" If Dir(Path, vbDirectory) = "" Then MkDir (Path) End If 'ファイルコピー FileCopy "c:test_date\aaa.xls", Path & "\aaa" & Format(Now, "yyyymmdd") & ".xls" 'ファイル数確認 fn = Dir(Path & "\aaa*.xls") Do While fn <> "" fc = fc + 1 fn = Dir() Loop '10件以上消去 If fc > 10 Then 'ここが分かりません! End If End Sub ================== あ~ちなみにoffice2003エクセルを使用しています。 XP以降のOSで動かしたいです!

  • 返ってくる値が違う

    VBAでフォルダの中のファイルの個数を取得するコードなのですが Sub test1() Dim i As Long, buf, Path As String Path = ActiveWorkbook.Path & "\" buf = Dir(Path & "*.*") Do While buf <> "" i = i + 1 buf = Dir() Loop MsgBox "「" & ActiveWorkbook.Path & "」には、全部で" & i & "個のファイルがあります。" End Sub Sub test2() Dim Path As String Dim i As Long, FSO As Object, f As Object Path = ActiveWorkbook.Path & "\" Set FSO = CreateObject("Scripting.FileSystemObject") MsgBox "「" & ActiveWorkbook.Path & "」には、全部で" & FSO.GetFolder(Path).Files.Count & "個のファイルがあります。" Set FSO = Nothing End Sub Test1とtest2では返ってくる値が違うのですが なぜでしょうか? Test2はフォルダの個数も取得されてるのですか?

  • Excel2007のVBAにて印刷を指定枚数設定しようと思いましたが、

    Excel2007のVBAにて印刷を指定枚数設定しようと思いましたが、下記マクロでテストしたところ 2枚ではなく、何故か1076枚を印刷しようとしてきます。 印刷範囲も2枚しかないので、どこがおかしいのかが分りません。 分かる方いましたらご教授願います。 Sub Macro1() dim as i integer i = 2 ActiveWorkbook.PrintOut Copies:=i End Sub

  • RmDirでフォルダが削除できない vba

    http://www.k1simplify.com/vba/tipsleaf/dir.html を参考にしたのですが Sub test() RmDir "\\test-PC\Users\Public\test" End Sub でフォルダの削除ができると思ったのですが パス名が無効ですというエラーになってしまいます。 ネットワークパスだからダメなのでしょうか? パスはフォルダからコピペしたので間違いないです。

  • エクセルVBAで場所の指定

    また質問させていただきます。先日Wendy02さんに以下のコードを お教えいただきました。 少し内容を変更したくまた質問をさせていただきます。 移動前のフォルダ名をあらかじめフルパスで指定してある セルがあるのですが、そのセルには C:\Documents and Settings\user\デスクトップ\Test1Fold とあるとして、そのパスを取得して SourceDir = SourceFolder & "Test1Fold\" '末尾に\ は付けなくてよい の部分は移動前のフォルダが変わっても対応できるようにしたいのですが、どのようにするのかわかりません。どのように記述すればいいでしょうか?よろしくお願いします。 Sub MoveDirectries()   Dim SourceFolder As String   Dim SourceDir As String   Dim DestFolder As String   Dim DestDir As String   Dim ArDirs() As String   Dim FOLname As String   Dim i As Integer   Dim v As Variant   Dim ret As Integer      'Win 2000以上   Const MYCMD1 As String = "CMD /C MOVE " '末尾は半角スペースを開ける      SourceFolder = ActiveWorkbook.Path & "\" 'ベースのフォルダ(元)\ は必ず付ける   DestFolder = ActiveWorkbook.Path & "\" 'ベースのフォルダ(先)\ は必ず付ける      SourceDir = SourceFolder & "Test1Fold\" '末尾に\ は付けなくてよい   DestDir = DestFolder & "Test1AFold\"      '最終フォルダに \ があったら省く   If Right(SourceDir, 1) = "\" Then SourceDir = Mid$(SourceDir, 1, Len(SourceDir) - 1)   If Right(DestDir, 1) = "\" Then DestDir = Mid$(DestDir, 1, Len(DestDir) - 1)      ReDim Preserve ArDirs(i)   FOLname = Dir(SourceDir & "\", vbDirectory)   Do While FOLname <> ""     If FOLname <> "." And FOLname <> ".." Then       If (GetAttr(SourceDir & "\" & FOLname) And vbDirectory) = vbDirectory Then         ReDim Preserve ArDirs(i)         ArDirs(i) = FOLname         i = i + 1       End If     End If     FOLname = Dir   Loop   'フォルダの下のフォルダを作るのは一回のみ   For Each v In ArDirs()     If Dir(DestDir & "\" & v, vbDirectory) = "" Then      ret = Shell(MYCMD1 & """" & SourceDir & "\" & v & """" & " " & """" & DestDir & """")           ElseIf Dir(DestDir & "\" & v & "\" & v, vbDirectory) = "" Then       ret = Shell(MYCMD1 & """" & SourceDir & "\" & v & """" & " " & """" & DestDir & "\" & v & """")     End If   Next v End Sub

  • アプリからVB(Form)

    初心者ですが教えていただきませんか? やりたい事(順序) 1. Form1が開いています。(ノーマル表示) 2. Form1のcommand1ボタンを押す事により 3. Form1が最小化され 4. WORDが起動され、ファイルが開きます。(WORD最大表示) 5. WORDが終了(閉じられた時) 6. Form1が開きます。(ノーマル表示) 5番と6番で詰まっております。 ご教授をお願い致します。 コード Private Sub Command1_Click(Index As Integer) Dim wdApp As Object Dim ThisPos As Long WindowState = vbMinimized Set wdApp = CreateObjec("Word.Application") wdApp.Visible = True Set wddocuments = wdApp.Documents.Open("C:\test.doc") ThisPos = Application.WindowState 'アプリの画面表示を変更する If ThisPos = wdWindowStateNormal Then wdApp.WindowState = wdWindowStateMaximize Else wdApp.WindowState = wdWindowStateMaximize End If Set wdApp = Nothing    End Sub

  • EXCELのVBAでWORDが開いてあるかチェック

    EXCELのVBAで特定のWORDが開いてあるかチェックしたいのですが、 あるフォルダにWORD文章があるかチェック      set appWord=GetObject(,"Word.Application")      Msgbox appWord.Documents.count なければエラー処理で終了 そのWORD文章の名前を取得      docFile=....    (仮にABC.docxという名前だとしますと) そのWORD文章が誰かが使っている(開いているか)チェックしたいのですが.. 1.使われているなら、-$ABC.docxが作られているはずだから    dir(-$ABC.docx)として、あれば使われていると判断したいのですが、    実験するとdir(-$ABC.docx)は、使われて実際にそのファイルがあっても    falseになってしまいます。dir関数でなくてもいいので、このファイルの    有無を調べる方法はないでしょうか? 2.その他、読み取り属性とかをみて判断する方法はないでしょうか?    ただし、使われている場合は、10秒ごとにチェックをいれて、    使われていない場合に、初めて開くので、エラー処理で逃げるのは    ダメなのですが。

  • ExcelのVBAでWEBページを開くのが遅い

    よろしくお願いいたします。 現在社内システムのデータをExcelに落とすVBAを作っています。 単純に、 sub test () URL = "http://..." Dim xls As Workbook Set xls = Application.Workbooks.Open(URL) end sub のようなものを作成して実行したのですが、 Set xls = Application.Workbooks.Open(URL) の所で50~60秒ほど時間がかかってしまいます。 もう少し早くする方法はないのでしょうか?

専門家に質問してみよう