• ベストアンサー

ExcelVBAで複数のブックに同じ動作をさせるには

Excel97を使っています。 ひながたファイルにはマクロ実行ボタンのあるシートと基本の書式が入ったシートがあります。 Access97からOutputToでエクスポートした複数のファイル(全ファイルのデータ形式は同じでファイル数はいつも同じ)があります。 実行ボタンを押すとエクスポートした一つのファイルが、ひながたファイルで設定した書式になるようにする事は出来ました。 同じ式を繰り返していけば複数のファイルにひながたと同じ書式を設定する事が可能ですが、 式がかなり長くなってしまいます。 なるべく簡潔にしたいのですが、一連の動作を定義づけてそれを呼び出すような事はできないでしょうか。 列の幅を広げて、特定のセルの色を変えて、用紙設定を変更する作業を「共通」と名付けたとすると Aファイルに「共通」を実行、Bファイル、Cファイルにも「共通」を実行・・・というイメージです。

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

  • ベストアンサー
  • kootsuki
  • ベストアンサー率54% (6/11)
回答No.3

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していけばいいかと思います。 きっとお望みのことができると思います。

whatwhat
質問者

お礼

kootsukiさん、回答ありがとうございます。 教えていただいた手順で無事にアドイン作成が出来ました。 Accessからエクスポートする時にVBでアドインを実行出来たら 自分以外の人間が操作しやすいかと思い、まずはExcelの別ファイルにマクロを作ってみました。 Application.Run = "印刷前設定.xla!印刷前の設定PROC" だとエラーが出てしまいますが、アドインの場合マクロの呼出方とは異なるのでしょうか。

その他の回答 (4)

  • kootsuki
  • ベストアンサー率54% (6/11)
回答No.5

> Application.Run = "印刷前設定.xla!印刷前の設定PROC" > だとエラーが出てしまいますが、アドインの場合マクロの呼出方とは > 異なるのでしょうか。   kootsukiです。   さぁ、何故でしょうか。このxlaはひとつでもExcelでブックを開いてい   てactiveworkbookが存在していないといけません。そういう環境でしたか?   なお、私はApplication.Run はあまり使っていませんので違っていたら回答できません。   どなたかVBおよびApplication.Runに詳しい方ご回答お願いします。   ただ、VBでやるのであれば、どうせだったらexportの時....と   なりNo.1さんの回答に近くなるような気がします。

whatwhat
質問者

お礼

お礼が遅くなって申し訳ありません。 #1さんの方法でやろうとしたところエラーが出てしまい (多分、私の構成が間違っているのだと思います) 試行錯誤していたところで別件にかかりきりになってしまいました。 解決させてからお礼をしたかったもののこのままズルズル返答なしも 良くないと思うので、閉じさせて頂きます。 しかしながら、共通の動きをさせる方法は分かりましたので今後応用してみたいと思います。 また分からない時は教えてgooで質問をすると思いますので もし見かけましたら宜しくお願い致します。 どうもありがとうございました。

  • kootsuki
  • ベストアンサー率54% (6/11)
回答No.4

kootsukiです。 >注意する点としては、アドインのマクロではActiveWorkbookは使いません。 >開いてるブックを示す場合はThisWorkbookと書きます。 間違えました。 アドインのボタンをクリックしたときにアクティブなブックはActiveWorkbookと書きます。アドイン自身のブックを指す場合はThisWorkbookと書きます。 失礼しました。

  • kootsuki
  • ベストアンサー率54% (6/11)
回答No.2

すみません、状況が良く分からないままの回答です。 >実行ボタンを押すとエクスポートした一つのファイルが、ひながた >ファイルで設定した書式になるようにする事は出来ました。 マクロは「Access97からOutputToでエクスポートした複数のファイル」の中に書いたのですか?  マクロは別ブックにあるけど処理する対象の「OutputToでエクスポートしたファイル」を順に処理することができない、という質問でしょうか? >「式がかなり長くなってしまいます。」はVBAのコードが長くなってしまいますという意味ではないんですよね? おそらく解決はできるのでしょうが、Workbooks.Open (変数)を使えば解決するのか、あるいはアドインをご存じないのか・・・? どうもアドインが答えかと思いますが状況がいまいち分からなくて。

whatwhat
質問者

補足

会社でExcelで作っているリストを定期的に分類ごとに分けて出力して、 それを目視でチェックしたいと言われてAccessにインポートして クエリーで分類項目(支所毎に番号を振った)ごとにテーブルを作り それをExcelにエクスポートして印刷またはメールで送れるようにしています。 ですから、Excel側じゃなくても良いのですが書式をや紙の余白であったり印刷方向を設定したいのです。 そして、お察しの通り恥ずかしながらアドインは存じておりません(汗 #1さんの方法でも挑戦中ですが、別の仕事が立て込んでいてまだ完成しておりません。 もしよろしければ、アドインについて、或いはアドインならここを読むといいというサイトを教えて頂けないでしょうか。

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.1

私なら、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 って、感じで行けますよ

whatwhat
質問者

お礼

お礼が遅くなりましたが、Excelマクロの流用(?)法を教えて頂きありがとうございます。 別件で立て込んでしまったので、当面は上で教えて頂いたアドインを使う事にしますが、別件が終わったら、もう一度挑戦してみようと思います。

関連するQ&A

  • ExcelVBAをどのブックでも使う

    お世話になっています。 今回、いろんなブックで使っているシートを最新のデータに入れ替えるVBAを作りました。 これをどのExcelのファイルを開いたときにも動くようにしたいのです。 (入れ替えたいシートの検索なども入っている) 今は特定のブックの標準モジュールになっていて、ユーザ設定でコマンドボタンにしてありますが、他のブックでそのボタンを実行しても、当然特定のブックを開いて実行してしまいます。 これはどのように保存?したら他のブックでも使えるのでしょうか? 他のブックに標準モジュールを作って、すべてに入れていくしかないのでしょうか? ご存知の方がいらっしゃったら、ご教授ください。

  • エクセルの複数のブックを1つにしたい

    こんにちは。 エクセルの複数のブックを1つのブックにまとめたいのです。(シートをコピーしたい) コピー&ペーストでできますが、エクセルの機能で他にはないですか?外部データの取り込みで実行したら書式まではインポートできませんでした。 VBAでもできましたが、他の(もっと簡単でエクセルの普通の機能を使って)やり方はないでしょうか? よろしくお願いします。

  • EXCELで複数シート作成後、全シート書式設定の同一設定は可能か

     質問はタイトルの通りです。  EXCELの使用で、一つのファイルで複数シート作成し、個々のシートの複数のセルに別の文字等を入力後、何かの設定操作で全部のシートの書式設定を同一の書式設定にすることは可能でしょうか。  データ入力前でしたら、書式設定後にシートのコピーすれば同一書式に設定されているのでコピーして使用しています。  ちなみに使っているものはEXCEL2002 SP3です。  可能でしたら操作方法をお教えください。  宜しくお願い致します。

  • accessからエクセルにエクスポートしたファイルを開きたい。

    accessのマクロ・ワークシート変換で4枚のシートを含むエクセルファイルを作るように設定をしたのですが、これをエクスポートが終わったら自動的に開くようにしたいのですが、どのようにしたらよいでしょうか。 VBAで DoCmd.OutputTo acOutputTable, "tbl_aaa", acFormatXLS, , True と試してみましたが、シートは一つのみになってしまいます。 1つのエクセルファイルに4枚のシートを出力して、それを立ち上がるようにしたいです。 DoCmd.TransferSpreadsheet acExport, … も考えたのですが、エクセルを開く書き方がわかりません。 よろしくお願いします。

  • Excel既存ファイルへのエクスポートについて

    accessのクエリのデータをExcelファイルへエクスポートしようとしています。 Excelファイルは既存のファイルで、書式が設定されています。 上記のexcelファイルに設定されている書式はそのまま反映されたままで、Accessのクエリのデータのみをエクスポートする方法はありますか? またaccessのフォームにコマンドボタンを設定し、ボタンを押下すると、エクスポート操作ができるようにしたいのですが、どうすればよいでしょうか?

  • 複数シートのボタンに同一の動作をさせたい

    ExcelのVBAで、表題の動作をさせたいと考えています。 複数のシート(Sheet1、Sheet2、Sheet3…)にそれぞれ配置したボタンに、 全て同じ動作をさせるのが目的です。 ただし、動作内容そのものは、Generalで定義するなどで一箇所で行うようにしたいです。 シート数が多く、それぞれにボタンを配置するのはいいとして 全てのシートのセクションでボタン動作を一つ一つ定義するのが面倒なため、 ここで質問させて頂いています。 単純に、各シートのボタンの名前をfuncButton1とし、Generalセクションに Public宣言して動作を書きましたが動きませんでした。 (↑ニュアンスとしてこういうやり方をしたい、という事です) どうかご教授お願いします。

  • エクセル(97)で、片方のブックからもう片方のブックのセルへ書式ごとコピーできないようにするには?

    エクセルのファイルを幾つか使ってみて、気づいた事があるのですが…、 例えば、同時にエクセルのファイルを開いてる時に、 片方のファイルのセルからもう片方のファイルのセルに コピーを実行した時に、いいのか悪いのか書式まで コピーされてしまいますよね? 「形式を選択してコピー」を実行すれば すむことなのですが、エクセルのファイルの中には たまに普通にコピー(例えばCtrl+V)しただけで 「書式は抜きで」もう片方のファイルにコピー出来る事が あるのですが、これはどこか設定をかえればいいのでしょうか?

  • 複数のCSVファイルを読み込んで複数シートを1ブックとしたい

    始めまして。 VBA初心者です。 2枚のCSVファイルをダイアログで各々指定し、保存する2枚のシートを1ブックにまとめたいのですが、うまくいきません。 現状は以下のようなマクロですが、別々のシートとなります。 よろしくお願い致します。 Sub 選択されたPDPファイルを開いて読み込む() With Application.FileDialog(msoFileDialogOpen) .Title = "ファイルを選択して[OK]ボタンをクリックしてください" .AllowMultiSelect = False '複数選択不可 .Filters.Clear .Filters.Add "1枚目", "*.csv", 1 If .Show = -1 Then .Execute 'キャンセルでなければ開く End With With Application.FileDialog(msoFileDialogOpen) .Title = "2つめのファイルを選択して[OK]ボタンをクリックしてください" .AllowMultiSelect = False '複数選択不可 .Filters.Clear .Filters.Add "2枚目", "*.csv", 1 If .Show = -1 Then .Execute 'キャンセルでなければ開く End With End Sub

  • AccessからExcelへのエクスポート後、Excel上の「セルの書式設定」が無効になった場合の解決策を教えてください。

    AccessからExcelへエクスポートしたら、Excel上の「セルの書式設定」の画面が表示されなくなってしまいました。 エクスポート時に次のエラーメッセージが表示されたのが原因しているのではないかと思います。 「ファイルエラー:表示形式の設定が失われた可能性があります。」 このような場合、「セルの書式設定」が有効になるようなExcel上の設定箇所はないでしょうか? 別のExcelで作りこの現象が現れているワークシートでは「セルの書式設定」は有効です。 この現象が現れているファイルで挿入したワークシートは、「セルの書式設定」が無効です。 なので、この現象が現れているファイルの設定自体がおかしくなっていると考えれます。 どなたか解決策をご存知の方がいらっしゃいましたら、ご教示ください。 よろしくお願いいたします。

  • シートを複数持つExcelファイルを複数ファイル結合する方法

    シートを複数持つExcelファイルを複数ファイル結合する方法 ○○○工事・▲▲▲工事・■×○工事・・・・と複数のEXCELファイルが有り そのファイルの中には共通してA・B・C・D・・・・シートがあります。 各EXCELファイルの同じ名前のシートを取り出して1つのファイルにしたいと思っています。 1つのファイルにした時、各シート名が抜き出したファイル名になるようにしたいです。 50ファイル以上ありシート数が20ある為、なんとかいい方法をお教え下さい。

専門家に質問してみよう