- ベストアンサー
ExcelVBAで複数のブックに同じ動作をさせるには
Excel97を使っています。 ひながたファイルにはマクロ実行ボタンのあるシートと基本の書式が入ったシートがあります。 Access97からOutputToでエクスポートした複数のファイル(全ファイルのデータ形式は同じでファイル数はいつも同じ)があります。 実行ボタンを押すとエクスポートした一つのファイルが、ひながたファイルで設定した書式になるようにする事は出来ました。 同じ式を繰り返していけば複数のファイルにひながたと同じ書式を設定する事が可能ですが、 式がかなり長くなってしまいます。 なるべく簡潔にしたいのですが、一連の動作を定義づけてそれを呼び出すような事はできないでしょうか。 列の幅を広げて、特定のセルの色を変えて、用紙設定を変更する作業を「共通」と名付けたとすると Aファイルに「共通」を実行、Bファイル、Cファイルにも「共通」を実行・・・というイメージです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
kootsukiです。 すみません、久しぶりに見たもので。回答が遅くなってしまいました。 アドインの説明ですよね。 > 列の幅を広げて、特定のセルの色を変えて、用紙設定を変更する作業を >「共通」と名付けたとするとAファイルに「共通」を実行、Bファイル、 > Cファイルにも「共通」を実行・・・というイメージです。 という命題ですね。 まず、私がイメージしてる処理を述べます。この前提でのアドインの説明と なりますので、もし違っていたら済みません。 Aファイル、Bファイル、 CファイルはすべてExcelのブックと仮定します。 操作としては、 (1)「共通」の機能を持ったアドインを開きます。 (2)Aファイルを開きます。 共通アドインを実行します。 印刷します。 Aファイルを閉じます。 (3)Bファイルを開きます。 共通アドインを実行します。 印刷します。 Bファイルを閉じます。 (4)Cファイルを開きます。 共通アドインを実行します。 印刷します。 Cファイルを閉じます。 こんな感じです。 では、アドインの作り方です。 まず、新規にBook1を開きます。 次にVBEで標準Moduleを追加しておきます。ここはマクロの作成と同じです。 次にVBEのプロジェクトエクスプローラでBook1のThisWorkbookをダブルクリックします。 すると、(General)の(Declarations)とう表示になりますので、コマンドボックスみたいな 下三角マークで(Workbook)にします。すると右は(Open)になるかと思います。 そして、コード部分には Private Sub Workbook_Open() Dim WORKA Application.CommandBars("standard").Controls.Add(Type:=msoControlButton, Id:= _ 2950).Caption = "印刷前の設定" With Application.CommandBars("standard").Controls("印刷前の設定") .OnAction = "印刷前の設定PROC" .FaceId = 272 End With End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.CommandBars("standard").Reset End Sub とコードを書きます。 次に標準モジュールの方に以下のコードを書きます。 Sub 印刷前の設定PROC() Columns(1).ColumnWidth = 30 Cells(2, 1).Interior.ColorIndex = 6 ActiveSheet.PageSetup.Orientation = xlLandscape End Sub そして、Excelに戻って、「名前を付けて保存」でファイルの種類を MicrosoftExcelアドインとします。 ファイル名は例えば「印刷前設定.xla」として保存します。 まだExcelは終了していませんよ。 次にVBEに戻って、ThisWorkbookをクリックしてプロパティでIsAddinをTrueにします。 そしてまた保存します。Excelも終了します。 さて、今からが検査です。 印刷前設定.xlaを開きます。次に適当なExcelファイルAを開きます。 ツールバーを見ると、音楽の音符記号が出ているかと思います。 そこにカーソルを近づけると「印刷前の設定」と表示されるかと思います。 次にその音符記号をクリックします。 すると、A列の幅が30になり、A2のセルの色が黄色になり、印刷ページ設定が横向きに なってるかと思います。 次にExcelファイルAを閉じ、ExcelファイルBを開きます。 まだツールバーには音符記号が出ているかと思います。そのマークをクリックすると 同じように設定されます。 こんな感じです。 注意する点としては、アドインのマクロではActiveWorkbookは使いません。 開いてるブックを示す場合はThisWorkbookと書きます。 FaceIdについてはどのマークが何番か説明したものはないかも知れません。 ちょっと説明が雑ですがこんな感じです。後はModifyしていけばいいかと思います。 きっとお望みのことができると思います。
その他の回答 (4)
- kootsuki
- ベストアンサー率54% (6/11)
> Application.Run = "印刷前設定.xla!印刷前の設定PROC" > だとエラーが出てしまいますが、アドインの場合マクロの呼出方とは > 異なるのでしょうか。 kootsukiです。 さぁ、何故でしょうか。このxlaはひとつでもExcelでブックを開いてい てactiveworkbookが存在していないといけません。そういう環境でしたか? なお、私はApplication.Run はあまり使っていませんので違っていたら回答できません。 どなたかVBおよびApplication.Runに詳しい方ご回答お願いします。 ただ、VBでやるのであれば、どうせだったらexportの時....と なりNo.1さんの回答に近くなるような気がします。
お礼
お礼が遅くなって申し訳ありません。 #1さんの方法でやろうとしたところエラーが出てしまい (多分、私の構成が間違っているのだと思います) 試行錯誤していたところで別件にかかりきりになってしまいました。 解決させてからお礼をしたかったもののこのままズルズル返答なしも 良くないと思うので、閉じさせて頂きます。 しかしながら、共通の動きをさせる方法は分かりましたので今後応用してみたいと思います。 また分からない時は教えてgooで質問をすると思いますので もし見かけましたら宜しくお願い致します。 どうもありがとうございました。
- kootsuki
- ベストアンサー率54% (6/11)
kootsukiです。 >注意する点としては、アドインのマクロではActiveWorkbookは使いません。 >開いてるブックを示す場合はThisWorkbookと書きます。 間違えました。 アドインのボタンをクリックしたときにアクティブなブックはActiveWorkbookと書きます。アドイン自身のブックを指す場合はThisWorkbookと書きます。 失礼しました。
- kootsuki
- ベストアンサー率54% (6/11)
すみません、状況が良く分からないままの回答です。 >実行ボタンを押すとエクスポートした一つのファイルが、ひながた >ファイルで設定した書式になるようにする事は出来ました。 マクロは「Access97からOutputToでエクスポートした複数のファイル」の中に書いたのですか? マクロは別ブックにあるけど処理する対象の「OutputToでエクスポートしたファイル」を順に処理することができない、という質問でしょうか? >「式がかなり長くなってしまいます。」はVBAのコードが長くなってしまいますという意味ではないんですよね? おそらく解決はできるのでしょうが、Workbooks.Open (変数)を使えば解決するのか、あるいはアドインをご存じないのか・・・? どうもアドインが答えかと思いますが状況がいまいち分からなくて。
補足
会社でExcelで作っているリストを定期的に分類ごとに分けて出力して、 それを目視でチェックしたいと言われてAccessにインポートして クエリーで分類項目(支所毎に番号を振った)ごとにテーブルを作り それをExcelにエクスポートして印刷またはメールで送れるようにしています。 ですから、Excel側じゃなくても良いのですが書式をや紙の余白であったり印刷方向を設定したいのです。 そして、お察しの通り恥ずかしながらアドインは存じておりません(汗 #1さんの方法でも挑戦中ですが、別の仕事が立て込んでいてまだ完成しておりません。 もしよろしければ、アドインについて、或いはアドインならここを読むといいというサイトを教えて頂けないでしょうか。
- Dxak
- ベストアンサー率34% (510/1465)
私なら、Access側でエクスポート後、Excelの書式など整えるマクロを記載します Excelで、マクロが出来ているのであれば、それ程手間が掛りません ただし、ブックを開く、ブックを閉じて、Excelの終了は、追記する必要がありますが・・ Dim xlsApp As Object Set xlsApp = CreateObject("Excel.Application") With xlsApp .Workbooks.Open Filename:="ファイル名" ~Excelのマクロを頭「.」を付けて書き込み .ActiveWorkbook.SaveAs Filename:= "ファイル名" .Quit End With Set xlsApp = Nothing って、感じで行けますよ
お礼
お礼が遅くなりましたが、Excelマクロの流用(?)法を教えて頂きありがとうございます。 別件で立て込んでしまったので、当面は上で教えて頂いたアドインを使う事にしますが、別件が終わったら、もう一度挑戦してみようと思います。
お礼
kootsukiさん、回答ありがとうございます。 教えていただいた手順で無事にアドイン作成が出来ました。 Accessからエクスポートする時にVBでアドインを実行出来たら 自分以外の人間が操作しやすいかと思い、まずはExcelの別ファイルにマクロを作ってみました。 Application.Run = "印刷前設定.xla!印刷前の設定PROC" だとエラーが出てしまいますが、アドインの場合マクロの呼出方とは異なるのでしょうか。