タイトルの件、質問します。

下記の条件で、エクセルを開き、下記の3つの書面を
印刷する、マクロはできますか??

●エクセルブック【Sheet1】【Sheet2】
●ワード【文書1】
※ワードは開いていません。閉じたまま。
※ワードとエクセルブックは同じフォルダ内にあります。

ご存知の方、いらっしゃいましたら、宜しくお願いいたします!!

このQ&Aに関連する最新のQ&A

A 回答 (1件)

マクロはエクセル側に書くんですね?


エクセルから開いていないワードを開き、印刷してワードは終了させればいいのですね?
エクセルのSheet1、Sheet2もPrintするんですね?

一例です。

Sub Word_Print()
  Dim wd As Object
  Set wd = CreateObject("Word.application")
  wd.Visible = True
  wd.documents.Open Filename:=ThisWorkbook.Path & "\文書1.doc"
  wd.ActiveDocument.PrintOut Background:=False
  wd.Quit
  Set wd = Nothing
  Sheets(Array("Sheet1", "Sheet2")).PrintOut
End Sub
    • good
    • 2

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPDFファイルを開き、印刷し、閉じるマクロ

Excel 2003 VBAにて、
PDFファイルを開き、印刷し、閉じるマクロを作りたいと思っています。

Dim AA, AAA

AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe C:\Scan\20131101160734050_001.pdf"
AAA = Shell(AA, vbNormalFocus)

にて、PDFファイルを開くことは出来ました。
このPDFファイルを、「印刷し、閉じる」ためには、
このPDFファイルを指定する必要があると思いますが、
その構文が判りません。
知っている方、教えて下さい。

Aベストアンサー

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional printerDriver As Variant)
Dim cmdLine As String
Dim WShell As Object
Dim oExec As Object
'ここは調整の必要がありそう
Const waitTime As Long = 1000
'Windows7 Home 64bitの場合です
Const pgmFullPath As String = "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"

Set WShell = CreateObject("WScript.Shell")
If IsMissing(printerName) Or IsMissing(printerDriver) Then
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
Else
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"" ""printerName"" ""printerDriver"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
cmdLine = Replace(cmdLine, "printerName", printerName)
cmdLine = Replace(cmdLine, "printeDriver", printerDriver)
End If
Debug.Print cmdLine
Set oExec = WShell.exec(cmdLine)
Sleep waitTime
'Windows7Home/64bit環境ではここで実行時エラーが出るので無理矢理先に進めていますが
'Adobe Readerは閉じられる様です
On Error Resume Next
oExec.Terminate
Set WShell = Nothing
End Sub

Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function

Terminateで原因不明のエラーが出るのでWebを漁っいて下記をみつけました。64bit環境でエラーが出るのはこれも関係しているのでしょうか?少々無理をしている様なので、ご使用時はご注意下さい。
Terminate メソッドは最後の手段としてのみ使用します。これは、アプリケーションによっては適切にクリーンアップできない場合があるためです。通常は、プロセスを途中で中断せず、プロセス自身で実行を終了させるようにします。Terminate メソッドは WM_CLOSE メッセージを使ってプロセスを終了しようとします。これで終了できない場合は、通常のシャットダウン手順を実行せずに、プロセスを強制終了します。
http://msdn.microsoft.com/ja-jp/library/cc364387.aspx

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional prin...続きを読む

Qマクロを使って両面 部数設定をして印刷したい

ぜひ教えてください。

エクセル2010です。
現在 下記で印刷していますがこれに 両面 部数設定U1 にて
印刷ができるようにしたいのです。
ぜひマクロを教えてください。
(マクロの知識がなく 下のマクロもコピーで使用しています)

Sub 印刷()

With Sheets("シート書")
For num = .Range("s1").Value To .Range("t1").Value
.Range("r7").Value = num
.PrintOut
Next num
End With

End Sub

Aベストアンサー

両面印刷はプリンタドライバの設定によって制御されます。
なので、VBA(マクロ)からこれを設定しようとすると
相当な努力が必要です。(私はやろうと思えません。)
> マクロの知識がなく
と言う状態であれば、ひとまずは「無理」と覚えていただきたいところです。


コレで終わるのは申し訳ないので、ある程度簡単にできるやり方を。
わかりやすいだろうと思われる言葉を選びますが、難しかったらご容赦ください。

準備)
両面印刷用の「プリンタドライバ」を用意します。

Win7なら、
コントロールパネル から デバイスとプリンタ を開き、 プリンタを追加、
両面印刷に使用するプリンタを指定して追加し(いつも使っているプリンタで結構です)、
「両面印刷用(仮)」などわかりやすい名前にしておきます。

追加されたプリンタを右クリック、印刷設定を出します。
これから先はプリンタのメーカーや機種によって様々ですので
詳細を記載することは困難ですので、いつも通りの「両面設定」をなさってください。
適用・OKとボタンを押すと「このドライバに」両面印刷の設定が保存されます。
注:今後、このプリンタドライバを使うと「必ず」両面印刷されます。
  「通常使うプリンタ」に指定するのは危険です。

ここから、エクセルマクロ(VBA)での設定です。
エクセルを立ち上げ、該当ブックを開き、
念のためプレビュー画面でプリンタを先ほど設定した「両面印刷用(仮)」にし、
プリンターのプロパティ で「両面印刷が初期値である」を確認しておきましょう。
上手く設定できていれば、プロパティを開いた時から両面印刷状態になっているはずです。

質問文中のコードを

Sub 印刷()
  With Sheets("シート書")
    For num = 1 To .Range("U1").Value '1~U1セルの数字まで繰り返し
      .Range("R7").Value = num 'R7セルに○部目を入力。不要ならこの行は削除
      .PrintOut ActivePrinter:="両面印刷用(仮)"
    Next num
  End With
End Sub

と書き換えてやります。

これでU1セルの部数分、両面印刷されます。


正直、苦肉の策です。

両面印刷はプリンタドライバの設定によって制御されます。
なので、VBA(マクロ)からこれを設定しようとすると
相当な努力が必要です。(私はやろうと思えません。)
> マクロの知識がなく
と言う状態であれば、ひとまずは「無理」と覚えていただきたいところです。


コレで終わるのは申し訳ないので、ある程度簡単にできるやり方を。
わかりやすいだろうと思われる言葉を選びますが、難しかったらご容赦ください。

準備)
両面印刷用の「プリンタドライバ」を用意します。

Win7なら、
コントロールパ...続きを読む

Qexcel VBAを利用し、テンプレートとなるワードファイルの一部分を

excel VBAを利用し、テンプレートとなるワードファイルの一部分をエクセルデータで
置換を行い、新しいワードファイルとして保存するという処理を作成しています。

[環境]
Windows Vista
Office 2007
差し込み文書ではなく個別にファイルを作りたいという条件があります。

処理としては、
テンプレートを開く→置換を実施→別名で保存→テンプレートを変更せず閉じる
を繰り返し実施しています。
ただ、このやり方ですと最後の閉じる処理を行った際に、
「wordは、動作を停止しました」というエラーメッセージが頻繁に出てしまいます。
出来上がったファイル自体は問題なく読めているんですが。
処理自体に問題があるんでしょうか?
VBA自体初心者であり、他に良い方法などありましたらご教示いただけたら助かります。


#処理内容はだいぶ簡略化しています。
Public Function output_word2()
  Dim word        As New word.Application
  Dim document      As word.document
  Dim file_name      As String
  Dim output       As String
  Dim path        As String
  Dim row        As Integer
  
  Sheets(CALC_SHEET).Select 'データ取得用シート

  path = Application.ActiveWorkbook.path
  file_name = path & "\xxxxxx.doc"          '元の文書
  row = 3
  Do
    If Range("B" & row).Value = "" Then
      Exit Do
    End If
    
    With word
      .Documents.Open Filename:=file_name
      Set document = .ActiveDocument
    End With
    
    word.Selection.Find.Text = "{置換対象文字}"
    word.Selection.Find.Forward = True
    word.Selection.Find.Replacement.Text = Range("C" & row).Value
    word.Selection.Find.Execute , , , , , , , , , , wdReplaceAll
    
    output = path & "\output\" & Range("C" & row).Value  & ".doc"
    
    document.SaveAs Filename:=output   '置換後のword文書を別名で保存
    document.Close SaveChanges:=False
    word.Quit
    row = row + 1
    Set word = Nothing
    Set document = Nothing
  Loop
End Function

excel VBAを利用し、テンプレートとなるワードファイルの一部分をエクセルデータで
置換を行い、新しいワードファイルとして保存するという処理を作成しています。

[環境]
Windows Vista
Office 2007
差し込み文書ではなく個別にファイルを作りたいという条件があります。

処理としては、
テンプレートを開く→置換を実施→別名で保存→テンプレートを変更せず閉じる
を繰り返し実施しています。
ただ、このやり方ですと最後の閉じる処理を行った際に、
「wordは、動作を停止しました」というエラーメッセージが頻...続きを読む

Aベストアンサー

その元のコードは、癖になりますから、エラーが発生するとかいう以前に直した方がよいですね。時々、非VBAのプログラマの人にいますが、VBAは、ほとんど、予約語が存在しないので、変数名は、何でも付けられますが、それをそのまま使うと、他人からは、まったくコードを読めなくなってしまいます。エラーが発生しても原因がわかりにくくなります。

それから、ハングした後は、タスクマネージャーで、WinWord を削除しないと、エラーが繰り返すはずです。それで、メモリに残らないように、以下のように、エラーが発生したら、必ず、wdApp を外すようにします。

'//
 Sub WordDocDupulicate()
 Dim wdApp As Word.Application
 Dim wdDoc As Word.Document
 Dim wdRng As Word.Range
 Dim Fname  As String
 Dim sOutput As String
 
 Dim mPath  As String
 Dim mRow As Long
 Dim sh As Worksheet
 Set wdApp = New Word.Application
 
 Const CALC_SHEET As String = "Sheet1" '←シート名
 Set sh = Worksheets(CALC_SHEET) 'データ取得用シート
 sh.Select
 
 mPath = ActiveWorkbook.Path & "\"
 Fname = mPath & "xxxxxx.doc"
 
 sOutput = mPath & "\"
 On Error GoTo ErrHandler
 '元の文書
 If Dir(Fname) = "" Then
  MsgBox "元の文書がありません。", vbExclamation
  GoTo ErrHandler
 End If
 mRow = 3
 Do
  With wdApp
   Set wdDoc = .Documents.Open(Fname)
   Set wdRng = wdDoc.Content
  End With
  With wdRng.Find
   .Text = "[置換対象文字]"
   .Forward = True
   .Replacement.Text = Range("C" & mRow).Value
   .MatchCase = False
   .MatchWildcards = False
   .MatchFuzzy = True
   '.Execute Replace:=wdReplaceAll 'Ver Word2003
   .Execute , , , , , , , , , , wdReplaceAll
  End With
  sOutput = mPath & "test1\" & Range("C" & mRow).Value & ".doc"
  wdDoc.SaveAs sOutput '置換後のword文書を別名で保存
  wdDoc.Close False
  mRow = mRow + 1
 Loop Until sh.Range("C" & mRow).Value = ""
 wdApp.Quit
ErrHandler:
 If Err.Number > 0 Then
  MsgBox Err.Number & " : " & Err.Description
 Else
  Beep '正常終了
 End If
 Set wdRng = Nothing
 Set wdDoc = Nothing
 Set wdApp = Nothing
 Set sh = Nothing
End Sub

その元のコードは、癖になりますから、エラーが発生するとかいう以前に直した方がよいですね。時々、非VBAのプログラマの人にいますが、VBAは、ほとんど、予約語が存在しないので、変数名は、何でも付けられますが、それをそのまま使うと、他人からは、まったくコードを読めなくなってしまいます。エラーが発生しても原因がわかりにくくなります。

それから、ハングした後は、タスクマネージャーで、WinWord を削除しないと、エラーが繰り返すはずです。それで、メモリに残らないように、以下のように、エラーが...続きを読む

Qエクセルからワードに自動で差し込みしたいです!DMラベルを作る為に・・・

エクセルを使って顧客リストの管理をしています。DM発送の際には、ワードへ差込印刷をしています。
今のままで特に不具合は無いのですが・・・。
以前の職場では、エクセルの顧客リスト(DM用)とワードを連動させて(マクロ??)、エクセルにリストを入力するとワードを開いたときに自動に差し込まれているようになっていました。
エクセルにラベルを作る都度、ベースのエクセルリストから必要な部分をコピペして使用する方法でした。

とてもラクだったので、どなたか作り方がわかれば教えていただけたら・・・と思い質問しました!

Aベストアンサー

参考になればいいんですけど・・・
http://www.wanichan.com/pc/word/2000/word25.htm

Qフォルダ内のエクセル文書をすべて印刷したいデス

1つのフォルダに ファイルが100個くらいあり それぞれ 1~3シートのBookになています。
すべてのシートを印刷したいのですが 毎回 ファイルを開いてシートを選択しないとできません。

一括で処理する方法をご存知の方 教えて頂けないでしょうか。
(>_<)よろしくお願いしますぅぅ

Aベストアンサー

>まだ使い方が分かりません。。

エクセルを開いて、[Alt] + [F11] でマクロを編集する画面(VBE)が現れます。
その画面で、[挿入] - [標準モジュール] を選択すると、マクロを記述する画面が現れます。

そこに、Sub ~ End Sub までの行をコピーして貼り付けてください。

一行目の「Sub test()」の "test" の文字は任意に書き換えできます。「一括印刷」などの解りやすい名前にしても良いでしょう。

「Fol = "C:\Tmp"」の "" の内側には、ファイルが入っているフォルダのフルパスを書き込んでください。

実行するには、マクロ文中にカーソルを置いて、VBEの[|>](横向き三角ボタン)をクリックすれば実行できます。
若しくは、エクセルの画面で [Alt] + [F8] で実行するマクロを選択する画面が現れます。

まずは、適当なフォルダを作成し、印刷対象ファイルを数個置いて、そのフォルダを対象にして実行テストをして見てください。

参考URL:http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page03.htm

>まだ使い方が分かりません。。

エクセルを開いて、[Alt] + [F11] でマクロを編集する画面(VBE)が現れます。
その画面で、[挿入] - [標準モジュール] を選択すると、マクロを記述する画面が現れます。

そこに、Sub ~ End Sub までの行をコピーして貼り付けてください。

一行目の「Sub test()」の "test" の文字は任意に書き換えできます。「一括印刷」などの解りやすい名前にしても良いでしょう。

「Fol = "C:\Tmp"」の "" の内側には、ファイルが入っているフォルダのフルパスを書き込んで...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QExcelVBAで既に開いてるwordを閉じる

ExcelVBAで困っております。

現在Excelで住所録を作り、1度送付してから1ヶ月したら自動でwordを起動し
送付の印刷をするマクロを作ってます。

普通に開いて閉じることはできましたが、
既にwordが開いていた場合に読み込み専用になり、少し困っております。

理想としては、既に開いていた場合、1度保存して終了し、
再度開くようにしたいです。


分かる方がいらっしゃいましたら教えてください。

よろしくお願い致します。

Aベストアンサー

試してください。
(例)
Dim wdapp As Object
Dim wddoc As Object
Dim wdpath As String
Dim wdname As String

wdname = "abc.docx"

On Error Resume Next
Set wdapp = GetObject(, "Word.Application")
Set wddoc = wdapp.Documents(wdname)
On Error GoTo 0
If wddoc Is Nothing Then Set wdapp = Nothing: Exit Sub

wdpath = wddoc.FullName
wddoc.Save
wddoc.Close
wdapp.Documents.Open FileName:=wdpath, ReadOnly:=False

Set wdapp = Nothing: Set wddoc = Nothing

試してください。
(例)
Dim wdapp As Object
Dim wddoc As Object
Dim wdpath As String
Dim wdname As String

wdname = "abc.docx"

On Error Resume Next
Set wdapp = GetObject(, "Word.Application")
Set wddoc = wdapp.Documents(wdname)
On Error GoTo 0
If wddoc Is Nothing Then Set wdapp = Nothing: Exit Sub

wdpath = wddoc.FullName
wddoc.Save
wddoc.Close
wdapp.Documents.Open FileName:=wdpath, ReadOnly:=False

Set wdapp = N...続きを読む

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報