- ベストアンサー
エクセルを選択して開き印刷するマクロ
お世話になっております。 タイトル通りのマクロの作成をしているのですが、行き詰ってしまい質問させていただきました。 説明させていただきますと、、 実行し、複数のエクセル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
- nyanzo
- お礼率82% (34/41)
- オフィス系ソフト
- 回答数7
- ありがとう数6
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >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 '-------------------------------------------
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 ご希望のものと合うかは分かりませんが、ファイル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
お礼
おはようございます。 コードを再考していただき大変感謝しております。 PDF印刷、無事に出来ました^^ いろいろな希望はまだあるのですが、きりが無いのと、回答者様のみに負担をかけているので、今回提示されたコードを参考にさせていただき自分なりにやってみます。 長い間大変ご面倒だったとは思いますが、ここまでご助力していただき大変感謝しております。ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 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でも、今は試してみていませんが、一枚に入れることは可能です。 コードは、一旦、書き直しになるかと思います。
お礼
回答ありがとうございます。 教えていただいた確認用ソフトも使ってみました。確認用に使用する分には十分ですね。情報ありがとうございます。 今回打ち出したファイルを確認用としてみるだけの場合と、そのドキュやPDFを成果品として提出する場合がありまして、確認用だけならば先ほど教えていただいたソフトなどで十分なのですが、PDFなどを提出しなければならないので困っておりました。 なので大変失礼かと思いましたが、紙に打ち出す場合はWendy02様のコードを。PDFなどに打ち出さなければならない場合は#1様のコードを使用し使い分けておりました。(それでもシート内の解像度の違いなので順番がバラバラになるので後は手作業でやっておりました。) 使用しているソフトは「Adobe PDF」です。読み込むソフトは「Adobe Acrobat 8.0 Standard」は使用しておりました。それ以外に何か必要な情報があれば開示いたしますのでおっしゃってください。 ご多忙の中、ご迷惑をおかけして申し訳ありません。よろしくお願いいたします。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 今回は、勉強させていただきました。コードとしては簡単ですから、問題の発生する部分は潰したつもりです。しばらく、ここを締めずに、コードを使ってみてください。不具合がありましたら、「お礼」側に書けば、メールで届きますから、連絡用にお使いください。
お礼
すみません。「お礼」欄に書いてほしいと言っているのに「補足」欄に書いてしまい、メールが行かなかったでしょうか?改めて書かせていただきます。 補足欄の「2」ですが、前の回答で、必要な場合のみプリンタの設定画面を出せばよいのでは?とありましたが、設定を間違えてA3をA4用紙で出してしまったりなどがあり数箇所打ち出し直したい。などが多々あるため、改めてお聞きしたかったので書かせていただきました。 ご面倒だとは思いますがよろしくお願いします。
補足
おはようございます。お久しぶりです。 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)
こんにちは。 >>選択したファイルは、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 '-------------------------------------------
補足
こんにちは。再度回答ありがとうございます。 こんな無知な私の為に試行錯誤して頂き、大変ありがとうございます。 回答者様の書いた通り、順番を変えたコードを今までのコードと差し替えをしたところ、印刷とvbOKCancelのメッセージボックスがカブることはなくなりました。ありがとうございます。 ただマクロが入っているエクセルbookは、やはり印刷されてしまいます。 選択したbookを開く前に Application.Dialogs(xlDialogPrint).Show ↑の実行で印刷されるので、印刷設定画面が出るのをもう少し後の方にし順番を変更するとか、 10個以上選択した場合、実行しますか?というコードに、OKと答えると印刷設定画面が出るのを、どこか他のコードとのセットにしてみる。 など、試行錯誤しているのですが、どうも明後日な方向に向かっているような感じです。。。 やはり回答者様が完璧にコードを作っておりますので、いろいろ変更するとエラーが出てうまくいかないですね。悩みどころです。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 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 '-------------------------------------------
お礼
すみません~初めに書いてありましたね>< >Const blPRV As Boolean = True 'プレビュー ここの部分をFalse にすれば、そのまま印刷されます。 と。。。 やってみたらできました^^ それとマクロが入っているbookが印刷されるのと、10個以上選択すると、 >選択したファイルは、10を越えていますが実行しますか? のメッセージボックスが出ますがメッセージボックスが出ていてOKボタンを押す前に印刷を始めてしまうのですが、その選択を待ってから印刷するようにするにはどうしたら宜しいでしょうか? お礼欄ですが、続けて補足させていただきます。
補足
こんにちは。回答ありがとうございます。 2バイトプロシージャ名はエラーの原因になる。ハンガリアン表記は、使い勝手が悪い…など調べて分かりました。もっと勉強し以後気を付けていきます。ご指摘ありがとうございます。 提示していただいたコードを実行してみたのですが、何故かうまくいきませんでした(>_<)何かこちらで変更する箇所などあるのでしょうか?ここは問題がある。と書かれていた所が何かの原因なのでしょうか? なにせ、自分の実力はマクロの記録をし、足りない必要な部分をサンプルコードなどを引用し追加していく程度しか出来ないので、提示していただいたコードを完璧に理解は出来ないレベルです。なので説明などもわからなくなるので消してなかったです…質問の時は皆さんご存じなので、簡潔に表記するため消すようにします。 それで実行してみたマクロですが、印刷されるのは、マクロコードが入っているエクセルで、選択したブックは印刷プレビューまでしか出ないんです。出来れば、選択しプリンタ設定、後は全て自動でやってくれる。というのが理想なんです。10個以上選択すると、メッセージボックスが出て、実行するかしないかを聞かれるというのは、作って頂いて大変感謝しております。 以後このマクロを使い続けて行きたいので、大変ご面倒だとは思いますが、よろしくお願いいたします。
- kybo
- ベストアンサー率53% (349/647)
こまかいエラーチェックはしていませんが、下記のような感じで出来ます。 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
お礼
おはようございます。返信遅れましてすみません。 実行させていただいたところ問題なく動作し、思い描いたようなマクロでした。助かりました!ありがとうございました。
関連する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 このとき、ファイルを開くのダイアログをキャンセルしたときでも「うんたらかんたら」の部分が実行されてしまいます。 キャンセルを押したときにそこでそれ以降をスキップして何もなかったかのような挙動をさせるためにはどのような記述をすればいいのでしょうか?
- ベストアンサー
- その他MS Office製品
- 指定のシート枚数をマクロで印刷
こんにちは。 エクセルマクロを使用しての印刷に関して、皆様の知恵をお借りしたく投稿させて頂きました。 現在は ・マクロを実行し印刷したいエクセルブックを開く。 ・指定した名前のエクセルシートの選択。 ・選択した名前のシートの印刷。 となります。 それを ・マクロを実行し印刷したいエクセルブックを開く。 ・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のときが発生します。
- ベストアンサー
- Excel(エクセル)
- エクセルと同じファイル名で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
- ベストアンサー
- Visual Basic
- エクセルマクロでコピーの質問です。
エクセルマクロでコピーの質問です。 こんにちわ^^; よくわからないエラーが起こっているため困っています。 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」両方対応していなくてもどちらかだけでも、構いません。 よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
お礼
返信おそくなりましてすみません。 実行し確認させていただいたところ、すばらしい!の一言でした! Escでキャンセルや、パスワードなどで開けない場合など、追加コードまで提示していただき大変感謝しております。 まだまだ勉強不足です>< 精進します! 本当にありがとうございました!