• ベストアンサー

エクセルを選択して開き印刷するマクロ

 お世話になっております。 タイトル通りのマクロの作成をしているのですが、行き詰ってしまい質問させていただきました。 説明させていただきますと、、 実行し、複数のエクセルbookを選択し開くとシートを全選択し通常使うプリンタで印刷をする。というマクロなんですが、改善していきたい事がありまして、助言をいただきたく思っております。 1.複数選択して開いても印刷されるのは開いた後アクティブになっているbookのみ。これを全て開いたbook印刷にしたい。 2.現在は通常使うプリンタで印刷するようにしていますが、複数選択し開いた時に始めの1回だけプリンタの設定画面になるようにしたい。 3.開いて印刷し閉じるだけなのにリンクなどが残っており、「保存しますか?」という文章が出るときがありますが、それを聞かれないように保存せずに閉じる。と自動的に実行してくれる。 2と3は、出来ればそうなってほしいという事なので、最重要は1番です。120個のエクセルを(1つあたりの容量は少ない)印刷しなければならないので困っております。一気に120個印刷かけるわけではなく10個位を分けてマクロ実行で印刷しようと思っております。 コードを載せさせて頂きますので、「ココをこう直せば出来るよ」など簡単な事でも結構ですのでアドバイスよろしくお願いいたします。 ----------------------------------------------------------- Sub 複数のファイルを選択して開く_エクセル版() '複数のファイルを選択する例 Dim vntFileName As Variant Dim vntGetFileName As Variant 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="印刷するファイルを選択" _ , MultiSelect:=True _ ) 'ファイルが選択されているとき(vntFileNameが配列型)は '選択した全てのファイルをWorkbooks.Openメソッドを使い開きます。 If IsArray(vntFileName) Then For Each vntGetFileName In vntFileName Workbooks.Open vntGetFileName Worksheets.Select 'シート全選択 Next ActiveWindow.SelectedSheets.PrintOut Copies:=1 '通常設定のプリンタで出力 End If ActiveWindow.Close 'ファイルを閉じる End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 >OKと答えると印刷設定画面が出るのを、どこか他のコードとのセットにしてみる。 >Application.Dialogs(xlDialogPrint).Show  自分自身で、調べるべきでした。よく考えずに、そのダイアログを使ってしまいました。そのダイアログは間違いです。 改良点: Application.Dialogs(xlDialogPrintSetUp).Show で、プリンタの設定だけにさせました。 たぶん、こちらで上手くいくと思います。 DoEvents で、Escキーによる割り込み終了を可能にしました。数回押せば、マクロが止まります。 このオプションは、大量に印刷する時に、万が一にも間違いに気づいたときに、少しでも、印刷の無駄を回避できるように考えました。 Sleep 100 にしてありますが、もう少し遅くしても実害はないかもしれません。1000で1秒になります。 改めて、コード全体を掲示します。 '------------------------------------------- 'Option Explicit Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) Sub MultiFilesPrintOutR()   Dim fNames As Variant   Dim fN As Variant   Dim sh As Worksheet   Const blPRV As Boolean = True 'プレビュー      fNames = _   Application.GetOpenFilename(FileFilter:="エクセルファイル(*.xls),*.xls" & _   ",CSVファイル(*.csv),*.csv", _   Title:="印刷するファイルを選択", _   MultiSelect:=True)   If VarType(fNames) = vbBoolean Or IsEmpty(fNames) Then Exit Sub      If IsArray(fNames) Then     If UBound(fNames) > 10 Then       If MsgBox("選択したファイルは、10を越えていますが実行しますか?", vbInformation + vbOKCancel) = vbCancel Then         Exit Sub       Else         Application.Dialogs(xlDialogPrinterSetup).Show       End If     End If   End If   On Error GoTo ErrHandler   For Each fN In fNames     If fN <> ThisWorkbook.FullName Then       With Workbooks.Open(fN)         If .ProtectStructure = False Then           For Each sh In .Worksheets             sh.PrintOut , Preview:=blPRV             Sleep 100             DoEvents '割り込み可能にする           Next sh           .Close False '保存を要求せずに閉じる         End If       End With     End If Jump:   Next   Exit Sub ErrHandler:   'パスワードなどで開けない場合   MsgBox Mid$(fN, InStrRev(fN, "\") + 1) & vbCrLf & Err.Description   GoTo Jump End Sub '-------------------------------------------

nyanzo
質問者

お礼

 返信おそくなりましてすみません。 実行し確認させていただいたところ、すばらしい!の一言でした! Escでキャンセルや、パスワードなどで開けない場合など、追加コードまで提示していただき大変感謝しております。  まだまだ勉強不足です>< 精進します! 本当にありがとうございました!

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 ご希望のものと合うかは分かりませんが、ファイル10個の制限をなくしてみました。 '------------------------------------------- 'Option Explicit Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) Sub MultiFilesPrintOutR2()   Dim fNames As Variant   Dim fN As Variant   Dim sh As Worksheet   Dim pdfFlg As Boolean   Dim acPrinter As String      Const blPRV As Boolean = False 'プレビュー         acPrinter = Application.ActivePrinter   Application.Dialogs(xlDialogPrinterSetup).Show   If InStr(1, Application.ActivePrinter, "pdf", 1) > 0 Then     pdfFlg = True   End If      fNames = _   Application.GetOpenFilename(FileFilter:="エクセルファイル(*.xls),*.xls" & _   ",CSVファイル(*.csv),*.csv", _   Title:="印刷するファイルを選択", _   MultiSelect:=True)   If VarType(fNames) = vbBoolean Or IsEmpty(fNames) Then Exit Sub   If Not IsArray(fNames) Then     fNames = Array(fNames)   End If   On Error GoTo ErrHandler   For Each fN In fNames     If fN <> ThisWorkbook.FullName Then       With Workbooks.Open(fN)         If .ProtectStructure = False Then           If pdfFlg = False Then             For Each sh In .Worksheets               sh.PrintOut , Preview:=blPRV               Sleep 100               DoEvents '割り込み可能にする             Next sh            Else             .Worksheets.PrintOut , Preview:=blPRV            End If           .Close False '保存を要求せずに閉じる         End If       End With     End If Jump:   Next   Application.ActivePrinter = acPrinter   Exit Sub ErrHandler:   'パスワードなどで開けない場合   MsgBox Mid$(fN, InStrRev(fN, "\") + 1) & vbCrLf & Err.Description   GoTo Jump End Sub

nyanzo
質問者

お礼

 おはようございます。 コードを再考していただき大変感謝しております。 PDF印刷、無事に出来ました^^ いろいろな希望はまだあるのですが、きりが無いのと、回答者様のみに負担をかけているので、今回提示されたコードを参考にさせていただき自分なりにやってみます。 長い間大変ご面倒だったとは思いますが、ここまでご助力していただき大変感謝しております。ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 1. ですが、 > For Each sh In .Worksheets >   sh.PrintOut , Preview:=blPRV >   Sleep 100 >   DoEvents '割り込み可能にする > Next sh 現行の設定では、それぞれファイルとしては別になってしまうか、ファイル名を決めてしまうと上書きもあるのかとは思います。PDFの統合ツールもあるようですが、これに関しては、コード側でも直せます。しかし、2と合わせて、コードを分岐させるコードを作らなくてはなりません。どちらかというと、コードを分岐せずに、別途、PDF出力としても良いように思います。どちらでも良いと思います。 2.は、それに付随したことですね。 Docuworks は、使ったことがありませんので分かりませんが、PDF クリエータは何をお使いですか? いわゆるバーチャル・プリンタとして使用するわけですね。 もし、確認画面だけなら、 FinePrint5 http://www.vector.co.jp/soft/win95/writing/se322363.html なんでもエコ印刷 http://www.silverstar.co.jp/02products/neco/neco.html 両方とも、体験版があります。 また、バーチャルプリンタ・ドライバというものも、Vector で出いるかと思います。FinePrint5 でしたら、こちらでも、試すことは可能です。PDFでも、今は試してみていませんが、一枚に入れることは可能です。 コードは、一旦、書き直しになるかと思います。

nyanzo
質問者

お礼

回答ありがとうございます。 教えていただいた確認用ソフトも使ってみました。確認用に使用する分には十分ですね。情報ありがとうございます。 今回打ち出したファイルを確認用としてみるだけの場合と、そのドキュやPDFを成果品として提出する場合がありまして、確認用だけならば先ほど教えていただいたソフトなどで十分なのですが、PDFなどを提出しなければならないので困っておりました。 なので大変失礼かと思いましたが、紙に打ち出す場合はWendy02様のコードを。PDFなどに打ち出さなければならない場合は#1様のコードを使用し使い分けておりました。(それでもシート内の解像度の違いなので順番がバラバラになるので後は手作業でやっておりました。) 使用しているソフトは「Adobe PDF」です。読み込むソフトは「Adobe Acrobat 8.0 Standard」は使用しておりました。それ以外に何か必要な情報があれば開示いたしますのでおっしゃってください。 ご多忙の中、ご迷惑をおかけして申し訳ありません。よろしくお願いいたします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 今回は、勉強させていただきました。コードとしては簡単ですから、問題の発生する部分は潰したつもりです。しばらく、ここを締めずに、コードを使ってみてください。不具合がありましたら、「お礼」側に書けば、メールで届きますから、連絡用にお使いください。

nyanzo
質問者

お礼

すみません。「お礼」欄に書いてほしいと言っているのに「補足」欄に書いてしまい、メールが行かなかったでしょうか?改めて書かせていただきます。 補足欄の「2」ですが、前の回答で、必要な場合のみプリンタの設定画面を出せばよいのでは?とありましたが、設定を間違えてA3をA4用紙で出してしまったりなどがあり数箇所打ち出し直したい。などが多々あるため、改めてお聞きしたかったので書かせていただきました。 ご面倒だとは思いますがよろしくお願いします。

nyanzo
質問者

補足

 おはようございます。お久しぶりです。 Wendy02様に作っていただいたコードをしばらく使わせていただきました。大変感謝しております。 このコードは#1様のコードとは異なり、開いたブックのシートを全選択ではなく、1シート毎に印刷をかけているのだと思われますが、そこで何点か希望がありまして補足させていただきます。 1、紙を打ち出すプリンタに印刷する場合は問題が無いが、PDFやDocuworksに出力する場合、ひとつのブックなのに1シート毎印刷なのでファイル名が「AAA」「AAA-2」「AAA-3」と異なる文書として印刷されてしまう。PDFにいたっては全て上書きになってしまう。 2、10個以上ファイルを選択しないとプリンタ設定に行かないのを1個でも出るようにするにはどの辺りを変更すればいけるでしょうか? PDFやDocuworksをPCに入れてないからわからない。PDFなどの為に作ってない。と言われればそれで終わりなのですが、私の場合紙に印刷をかける前に紙の無駄省くためにまずPDFやDocuworksに出力し確認してから打ち出しをかける方法をとっているために困っております。コード内でココを直せばおそらく出来る。などでも構いませんので、御助力頂き思い連絡させていただきました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >>選択したファイルは、10を越えていますが実行しますか? >のメッセージボックスが出ますがメッセージボックスが出ていてOKボタンを押す前に印刷を始めて>しまうのですが、その選択を待ってから印刷するようにするにはどうしたら宜しいでしょうか? それには、気づいていました。コードの中で、 'ここは問題があります。     Application.Dialogs(xlDialogPrint).Show と書いてあるとおりです。 当面の対処法ですが、このようにしてみたらどうでしょうか。 順序を変えました。お時間があれば、他の方法も試してみてください。私自身、今まで、いろいろ試行錯誤しています。 '-------------------------------------------   If IsArray(fNames) Then 'ここは問題があります。     If UBound(fNames) > 10 Then       If MsgBox("選択したファイルは、10を越えていますが実行しますか?", vbInformation + vbOKCancel) = vbCancel Then         Exit Sub       Else         Application.Dialogs(xlDialogPrint).Show       End If     End If   End If    '------------------------------------------- '------------------------------------------- プリンタを確認する方法は、本来は、ActivePrinterメソッドを使って、このような方法があります。 "\\FMV-DESKPOWER\EPSON PM-4000PX on USB002" の on の後の部分が、固定なら、自動で切り替えることが可能です。ただ、動いてしまうことが多いので、ループで、探したりしますが、コードが複雑になります。 '-------------------------------------------   DefPrt = "\\FMV-DESKPOWER\EPSON PM-4000PX on USB002" '規定のプリンタ      ActPrt = Application.ActivePrinter '現在のプリンタ      If InStr(1, DefPrt, ActPrt, vbTextCompare) > 0 Then      MsgBox "設定はそのままで、使えます。", vbInformation   Else      If MsgBox("プリンタの設定を換えますか?", vbInformation + vbOKCancel) = vbCancel Then       Exit Sub      Else       Application.Dialogs(xlDialogPrint).Show       ''Application.ActivePrinter = DefPrt '自動切換え      End If   End If '-------------------------------------------

nyanzo
質問者

補足

 こんにちは。再度回答ありがとうございます。 こんな無知な私の為に試行錯誤して頂き、大変ありがとうございます。 回答者様の書いた通り、順番を変えたコードを今までのコードと差し替えをしたところ、印刷とvbOKCancelのメッセージボックスがカブることはなくなりました。ありがとうございます。  ただマクロが入っているエクセルbookは、やはり印刷されてしまいます。 選択したbookを開く前に Application.Dialogs(xlDialogPrint).Show  ↑の実行で印刷されるので、印刷設定画面が出るのをもう少し後の方にし順番を変更するとか、 10個以上選択した場合、実行しますか?というコードに、OKと答えると印刷設定画面が出るのを、どこか他のコードとのセットにしてみる。 など、試行錯誤しているのですが、どうも明後日な方向に向かっているような感じです。。。 やはり回答者様が完璧にコードを作っておりますので、いろいろ変更するとエラーが出てうまくいかないですね。悩みどころです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 2バイトプロシージャ名やハンガリアン表記は、あまり書かないほうがよいかもしれません。流行はあったとは思いますが、過去形です。解説も必要以上は書く必要はありません。 Const blPRV As Boolean = True 'プレビュー ここの部分をFalse にすれば、そのまま印刷されます。 >2.現在は通常使うプリンタで印刷するようにしていますが、複数選択し開いた時に始めの1回だけプリンタの設定画面になるようにしたい。 *ここは、少し問題があるようです。 「通常使うプリンタ」というのは、期待していないプリンタが選択されているときだけ出せばよいのではないかと思います。 '------------------------------------------- Sub MultiFilesPrintOut()   Dim fNames As Variant   Dim fN As Variant   Dim sh As Worksheet   Const blPRV As Boolean = True 'プレビュー      fNames = _   Application.GetOpenFilename(FileFilter:="エクセルファイル(*.xls),*.xls" & _   ",CSVファイル(*.csv),*.csv", _   Title:="印刷するファイルを選択", _   MultiSelect:=True)   If VarType(fNames) = vbBoolean Or IsEmpty(fNames) Then Exit Sub   If IsArray(fNames) Then 'ここは問題があります。     Application.Dialogs(xlDialogPrint).Show     If UBound(fNames) > 10 Then       If MsgBox("選択したファイルは、10を越えていますが実行しますか?", vbInformation + vbOKCancel) = vbCancel Then         Exit Sub       End If     End If   End If      For Each fN In fNames     On Error GoTo ErrHandler     If fN <> ThisWorkbook.FullName Then       With Workbooks.Open(fN)       For Each sh In .Worksheets         sh.PrintOut , Preview:=blPRV       Next sh        .Close False '保存を要求せずに閉じる       End With     End If Jump:   Next   Exit Sub ErrHandler:   MsgBox Err.Description   GoTo Jump End Sub '-------------------------------------------

nyanzo
質問者

お礼

 すみません~初めに書いてありましたね><  >Const blPRV As Boolean = True 'プレビュー ここの部分をFalse にすれば、そのまま印刷されます。 と。。。 やってみたらできました^^ それとマクロが入っているbookが印刷されるのと、10個以上選択すると、 >選択したファイルは、10を越えていますが実行しますか? のメッセージボックスが出ますがメッセージボックスが出ていてOKボタンを押す前に印刷を始めてしまうのですが、その選択を待ってから印刷するようにするにはどうしたら宜しいでしょうか? お礼欄ですが、続けて補足させていただきます。

nyanzo
質問者

補足

こんにちは。回答ありがとうございます。  2バイトプロシージャ名はエラーの原因になる。ハンガリアン表記は、使い勝手が悪い…など調べて分かりました。もっと勉強し以後気を付けていきます。ご指摘ありがとうございます。   提示していただいたコードを実行してみたのですが、何故かうまくいきませんでした(>_<)何かこちらで変更する箇所などあるのでしょうか?ここは問題がある。と書かれていた所が何かの原因なのでしょうか? なにせ、自分の実力はマクロの記録をし、足りない必要な部分をサンプルコードなどを引用し追加していく程度しか出来ないので、提示していただいたコードを完璧に理解は出来ないレベルです。なので説明などもわからなくなるので消してなかったです…質問の時は皆さんご存じなので、簡潔に表記するため消すようにします。  それで実行してみたマクロですが、印刷されるのは、マクロコードが入っているエクセルで、選択したブックは印刷プレビューまでしか出ないんです。出来れば、選択しプリンタ設定、後は全て自動でやってくれる。というのが理想なんです。10個以上選択すると、メッセージボックスが出て、実行するかしないかを聞かれるというのは、作って頂いて大変感謝しております。  以後このマクロを使い続けて行きたいので、大変ご面倒だとは思いますが、よろしくお願いいたします。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

こまかいエラーチェックはしていませんが、下記のような感じで出来ます。 Sub 複数のファイルを選択して開く_エクセル版() '複数のファイルを選択する例 Dim vntFileName As Variant Dim vntGetFileName As Variant Dim B As Boolean Dim W As Workbook 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="印刷するファイルを選択" _ , MultiSelect:=True _ ) 'ファイルが選択されているとき(vntFileNameが配列型)は '選択した全てのファイルをWorkbooks.Openメソッドを使い開きます。 If IsArray(vntFileName) Then For Each vntGetFileName In vntFileName Set W = Workbooks.Open(vntGetFileName) If B Then 'すべてのシートを印刷 W.Worksheets.PrintOut Copies:=1 '通常設定のプリンタで出力 Else W.Worksheets.Select '印刷ダイアログを表示 Application.Dialogs(xlDialogPrint).Show B = True End If W.Close False Next End If End Sub

nyanzo
質問者

お礼

 おはようございます。返信遅れましてすみません。 実行させていただいたところ問題なく動作し、思い描いたようなマクロでした。助かりました!ありがとうございました。

関連するQ&A

  • Excelのマクロでファイルを開くのダイアログをキャンセルしたときの挙

    Excelのマクロでファイルを開くのダイアログをキャンセルしたときの挙動についてです。 マクロで次のような記述をしています。 Sub tekitou() Dim vntFileName As Variant vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="ファイルを開く" _ , MultiSelect:=False _ ) If vntFileName <> "False" Then Workbooks.Open Filename:=vntFileName End If うんたらかんたら End Sub このとき、ファイルを開くのダイアログをキャンセルしたときでも「うんたらかんたら」の部分が実行されてしまいます。 キャンセルを押したときにそこでそれ以降をスキップして何もなかったかのような挙動をさせるためにはどのような記述をすればいいのでしょうか?

  • 指定のシート枚数をマクロで印刷

    こんにちは。 エクセルマクロを使用しての印刷に関して、皆様の知恵をお借りしたく投稿させて頂きました。 現在は ・マクロを実行し印刷したいエクセルブックを開く。 ・指定した名前のエクセルシートの選択。 ・選択した名前のシートの印刷。 となります。 それを ・マクロを実行し印刷したいエクセルブックを開く。 ・2枚目のシートから4枚目のシートまでを選択。 ・空白のシートを追加(両面印刷する際に奇数だと次のファイルが同じ紙の裏面に印刷されてしまうため) ・2枚目から4枚目シート+空白シートの印刷。 と変更したいのです。 ※2~5枚目シート選択、1~6枚目シート選択など、変更できると助かります。 ※偶数シートの印刷の場合は空白シート追加は不要となります。 1000近くのエクセルブックを印刷しているのですが、シート名が統一されていないため、マクロが止まってしまい困っておりました。 なんとか知恵をお貸し頂けないでしょうか。 宜しくお願い致します。 下記に現在使用しているマクロのコードを提示致します。 --------------------------------------------------------------------------------------------------------- Sub Excelファイルの指定したシートのみ印刷_資料2から資料3Ver() '複数のファイルを選択する Dim vntFileName As Variant Dim vntGetFileName As Variant Dim B As Boolean Dim W As Workbook 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="xlsxファイル(*.xlsx),*.xlsx" & _ ",エクセルファイル(*.xls),*.xls" _ , FilterIndex:=1 _ , Title:="印刷するファイルを選択" _ , MultiSelect:=True _ ) If IsArray(vntFileName) Then For Each vntGetFileName In vntFileName Set W = Workbooks.Open(vntGetFileName) If B Then Sheets(Array("資料2", "資料3", "資料4")).Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 '通常設定のプリンタで出力 Else Sheets(Array("資料2", "資料3", "資料4")).Select Application.Dialogs(xlDialogPrint).Show '印刷ダイアログを表示 B = True End If W.Close False Next End If End Sub ----------------------------------------------------------------------------------------------------

  • VBAでファイルOPEN ダイアログを使用したいです

    現在、指定したファイルを開くVBAを書いているのですが、 ↓こんなの ----------------------------------------------------------- Dim vntFileName As Variant 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="開けゴマ" _ , MultiSelect:=False _ ) 'ファイルが選択されているときは '選択したファイルをWorkbooks.Openメソッドで開きます If vntFileName <> False Then Workbooks.Open Filename:=vntFileName End If ---------------------------------------------------------------- あらかじめ開くディレクトリを、ネットワーク上のフォルダに指定したいのですが、どこにパスを書いたらいいのか、わかりません。 教えていただけますでしょうか。

  • エクセルマクロ印刷時にプリンタを指定できますか?

    エクセル2002を使用しています。VBAはまったくわかりません。 マクロの自動登録で印刷を記録すると、通常使うプリンタから 出力されるようですが、LANでプリンタ複数使用可能な環境です ので、いちいち通常使うプリンタを変更するのではなく、マクロ 実行時にプリンタを選択したく思います。  因みに、以下のマクロはSheet1に値を入力し、Sheet1の値をコピー したSheet2を印刷するというマクロです。このマクロのどの部分に コードを付け加えればプリンタをこのマクロ実行時に選択可能でしょうか? もしくはマクロではプリンタを選択できないのでしょうか? どうぞよろしくお願いいたします。 ****************************************************************** Sub 印刷() Sheets("Sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("Sheet1").Select End Sub *******************************************************************

  • エクセルのマクロでファイルを自動で保存するには?

    こんにちは。お世話になります。 エクセルのVBAマクロ文の書き方でお知恵を拝借したいと思います。 さて、私のかかる業務でエクセルファイルで営業実績を出しています。 COBOLで作ったファイルをCSVにインポートして そのCSVの値を別のエクセルファイルで引っ張るという手順を踏んでいますが、 それをマクロで動かすとエクセル上で『保存しますか?』と聞いてきます。 答えは『はい(Y)』で確定しているので、その命令文さえ組み込められればいいのですが、 その命令文の書き方が判りません。 (解決したいVBAマクロの命令文) Workbooks.Open Filename:="D:\(Aファイル).csv" Workbooks.Open Filename:="D:\(Aファイルの値を引っ張るBファイル).xls" ThisWorkbook.Saved = True (ここで聞いてくる注意に自動で『Y』を入れたいと思っています。) ActiveWindow.Close ActiveWindow.Close 以上、お知恵を拝借したく、お願いいたします。

  • エクセルマクロでマクロをアクティブにしたくない

    エクセルのマクロをひとつの「マクロA」という名前で、データーファイルからセルに入っている内容などを呼び出しながらまくろAのシートにデーターを貼り付けながら作業をしています。 Workbooks.Open Filename:= _ "C:\Documents and Settings\owner\My Documents\マクロ.xls" Application.Run "マクロ.xls!マクロ" と記載すると、マクロXLSがアクティブになってしまいます。 その為記載に'ActiveWindow.WindowState = xlMinimized と入れたりするのですが、アクティブになるシートがマクロ以外にうまくいかないことがあるのです。 データーシートは、毎回データーが変わる関係で、DATA.xlsがAのときやBのときが発生します。

  • エクセルと同じファイル名でcsvを作成するマクロ

    エクセルからCSVファイルをYYMMDD付でマクロを使って 作ろうとしていますが拡張子の「.xls」がどうしても残ってしまいます。 例えば、「test.xls」が「test.xls070326.csv」のように。 これを「test070326.csv」とするにはどうしたらよいでしょう。 今のコードはつぎのようにしています。 Sub test1() Dim flname As Variant Dim wb As Workbook flname = ActiveWorkbook.Name + CStr(Format(Date, "yymmdd")) ActiveSheet.Copy ActiveSheet.SaveAs Filename:=flname, _ FileFormat:=xlCSV ActiveWindow.Close savechanges:=False ActiveWorkbook.Close End Sub これでもCSVとしては使えるのですが、気持ちがすっきりしません。 どなたか正解をお願いします。

  • 複数のエクセルファイルを順番に開く

    Excel2003、OS WindowsXPを使用し、Visual Basicに関する質問です。 下記マクロを作成したのですが、これですとファイルを複数選択した場合に毎回開く順番がランダムになってしまいます。これをファイル名を参照して順番に開くようにしたいのです。 因みにファイル名は **-***_AAA_日付.xls です。 *には数字が入り、AAAには漢字による名称が入ります。 例)(1)24-002、(2)24-005、(3)24-008といった3つのファイルを開くとします。現在ですと(3)→(1)→(2)のような順番で開きますが、これを(1)→(2)→(3)のようにファイル名の数字をkeyとして順番に開きたいのです。 色々と調べてみたのですが、よく分かりませんでした…。 すみませんが、ご回答の程、宜しくお願い致します。 Opf = ThisWorkbook.Path & "\注文書・請書" ChDrive ThisWorkbook.Path ChDir Opf 'ファイルを開くダイアログを開く vntFileName = _ Application.GetOpenFileName( _ FileFilter:="エクセルファイル(*.xls),*.xls" _ , FilterIndex:=1 _ , Title:="ファイル選択" _ , MultiSelect:=True _ ) 'ファイルが選択されているとき(vntFileNameが配列型)は '選択した全てのファイルをWorkbooks.Openメソッドを使い開く If IsArray(vntFileName) Then For Each vntGetFileName In vntFileName Workbooks.Open vntGetFileName Next Else Exit Sub End If

  • エクセルマクロでコピーの質問です。

    エクセルマクロでコピーの質問です。 こんにちわ^^; よくわからないエラーが起こっているため困っています。 1.xlsという別のエクセルを開いて指定のセルをコピーし、貼り付けるということで下記のマクロを作ってみました。 ちなみにマクロを書いたファイルはsum.xlsで、1.xlsのコピーしたいセルには数値のみ入っています(書式は会計)。 Sub before() Workbooks.Open Filename:="c:¥aaa¥1.xls" Range("a1:a5").Copy ActiveWindow.Close Range("a1").PasteSpecial End Sub しかし、このマクロをThisWorkbookに貼り付けると文字列として保存されてしまいます。 そこで最後の行を Range("a1").PasteSpecial Paste:=xlValues にするとエラー400が出ます。 一応、sheet1(sheet1)に貼り付けて実行してみたところ、コピー自体ができませんでした。 まだ余りエクセルマクロを理解していないため、なぜなのかが良くわからないのでアドバイスをお願いいたします。 ちなみに使っているのはoffice2003のエクセルです。

  • 「dbf」「csv」などをマクロで「xls」に一括変換する方法

     お世話になっております。 タイトルの通りの質問なのですが、拡張子「dbf」「csv」などのエクセルで開けるファイルをマクロで「xls」に一括変換する方法が分からなかったので質問させていただきました。 まずやり方としてなのですが、 1:「dbf」もしくは「csv」ファイルをフォルダから選び開く。 2:何も変更せずにファイル→名前を付けて保存ボタン 3:ファイル名を変更せずに保存拡張子を「Microsoft Office Excel ブック(*.xls)」に変更し保存。 4:Excelブックを変更や保存せずに閉じる。 これだけの事なのですが、流石に200個ほどあるのでマクロで出来ないものかと思いまして質問させていただきました。 ・マクロを実行するとフォルダ選択にいき、新しく「xls」に変更したいファイルを選択し、実行すると「xls」が出来ている。と言うのが理想なのですが、そのような事は可能なのでしょうか? ・1つのフォルダに様々な箇所から集めた「dbf」や「csv」をまとめてありますので、どのファイルを選択するかの時に複数個選択出来ると非常に助かります。 ・「dbf」と「csv」両方対応していなくてもどちらかだけでも、構いません。 よろしくお願いします。

専門家に質問してみよう