次の方法で共有

Excel2010 で マクロを使用してヘッダーやフッターにパーツを挿入する方法

Anonymous
2011-04-25T12:45:20+00:00

[http://answers.microsoft.com/ja-jp/office/forum/office_2010-excel/excel2010]-でフッターにマクロを使用して更新日をフォントを指定して表示させる方法/67cac6fa-5d6b-e011-8dfc-68b599b31bf5

上記の内容に更に内容を変更した質問になります。

Excel2010で、シートがいくつか入っているブックで、マクロを用いて、ヘッダー(左)にファイル名(拡張子なし) / メイリオ を、フッターにシート毎の更新日 / メイリオ を表示させたいと思っています。

以下を、マクロとして、ThisWorkBook に記載しているのですが、ヘッダーやフッターが表示されなかったり、デフォルトのフォントで表示されてしまったり(恐らくMS ゴシックかと思われます)しています。

どの様にすれば、常に、狙った表示が出来るでしょうか。(印刷を行う際にはブック全体を同時に印刷しています)

シートは更新するタイミングが違うので、できたら、シートごとの更新日を反映させたいと思っています。

――――――――――――――――――――――――――――

Private Sub Workbook_Activate()

ActiveSheet.PageSetup.RightFooter = "&""メイリオ"""

End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)

ActiveSheet.PageSetup.RightFooter = "&""メイリオ"""

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

ActiveSheet.PageSetup.RightFooter = "&""メイリオ""" & Format(Date, "yyyy / mm / dd")

End Sub

Private Sub Workbook_Open()

Dim file_name As String

file_name = Replace(ActiveWorkbook.Name, ".xlsm", "")

ActiveSheet.PageSetup.LeftHeader = "&""メイリオ""" & file_name

End Sub

――――――――――――――――――――――――――――

やたら色んなところでフォントを指定しているのは、フォントが狙った様に反映されないので、手探りで色々と記載をしただけなので、記載内容には拘りませんが、初心者で記述ルールが理解していない部分も有る為、ThisWorkBook に記載するだけで動く形で、動作出来るものを探しています。

お判りになる方がいらっしゃいましたら、ぜひ、ご指南をお願い致します。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2011-04-27T06:23:32+00:00

どういう時に、どういうイベントが発生しているか正確に理解された方がいいです。

ファイルを開いたときに、Openイベントが発生して、さらに、Activateイベントも発生します。

なので、後で発生した、Activateイベントの「メイリオ」のフォントのみが設定されます。

保存した際、BeforeSaveイベントが発生して、正しく、日付が設定されても、印刷プレビューや印刷した際に、「メイリオ」のフォントのみが設定され、せっかくの日付が消えます。

以下のサンプルを実行して、イベントが発生するタイミングを理解して下さい。

Private Sub Workbook_Activate()

If MsgBox("Activateイベントを実行しますか?", vbYesNo) = vbNo Then Exit Sub

ActiveSheet.PageSetup.RightFooter = "&""メイリオ"""

End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)

If MsgBox("BeforePrintイベントを実行しますか?", vbYesNo) = vbNo Then Exit Sub

ActiveSheet.PageSetup.RightFooter = "&""メイリオ"""

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

If MsgBox("BeforeSaveイベントを実行しますか?", vbYesNo) = vbNo Then Exit Sub

ActiveSheet.PageSetup.RightFooter = "&""メイリオ""" & Format(Date, "yyyy / mm / dd")

End Sub

Private Sub Workbook_Open()

Dim file_name As String

If MsgBox("Openイベントを実行しますか?", vbYesNo) = vbNo Then Exit Sub

file_name = Replace(ActiveWorkbook.Name, ".xlsm", "")

ActiveSheet.PageSetup.LeftHeader = "&""メイリオ""" & file_name

End Sub

この回答は役に立ちましたか?

0 件のコメント コメントはありません

7 件の追加の回答

並べ替え方法: 最も役に立つ
  1. 削除済み

    この回答は当社の行動規範に違反したため削除されました。 アクションを実行する前にこの回答を手動で報告したか、自動検出機能により特定しました。 詳細については、当社の行動規範を参照してください。


    コメントはオフになっています。 詳細情報

  2. Anonymous
    2011-04-26T04:45:06+00:00

    >質問の内容と重複致しますが、希望する状態に反映しない為、後からフォントの指定は自分自身で加筆しましたが

    ちょっと言い方は悪くなりますが、要するにわけも分からないままコードを追加して誰にもなにをなさりたいのか分からないしろものになってるということです。

    >初心者で記述ルールが理解していない部分も有る為、ThisWorkBook に記載するだけで動く形で、

    これ自体おかしいです。

    ThisWorkbookのモジュールは一種のクラスモジュールであり、イベントハンドラのみを記述し、それ以外は標準モジュールに記述すべきです。

    だいたい初心者ということでしたら良く理解しないままイベントなどを使うべきではありません。

    きちんと動くマクロを組んだ上で、場合によってはそれを希望のタイミングで動くようにするためにイベントに組み込む(イベントからコールする)形式にすべきでしょう。

    初心者だからどこかで教えてもらったり、拾ってきたコードを貼り付けて終わりで良いということではありません。

    だいたい、当日日付、ブック名をヘッダフッタに表示することはマクロなどを使わないでもできる話であり、なんでこんなややこしい話になっているか理解できません。

    まず、どういう状態にある、どのシートにどのタイミングでヘッダフッタを設定したいのかを中心に、なぜマクロが必要なのかも含めて、期待されている動きを第三者に分かるように記述してください。

    なさりたいことをちゃんと把握した上で可能な話であればアドバイスいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. 削除済み

    この回答は当社の行動規範に違反したため削除されました。 アクションを実行する前にこの回答を手動で報告したか、自動検出機能により特定しました。 詳細については、当社の行動規範を参照してください。


    コメントはオフになっています。 詳細情報

  4. Anonymous
    2011-04-25T14:20:59+00:00

    フォントの件はなぜかわかりませんが、マクロが実行された時点のActiveSheetが思ってらっしゃるシートと違う可能性はありませんか?

    全く異なるシートにヘッダ・フッタが設定されちゃってる可能性はありそうです。

    ActiveSheetではなくWorksheets("<シート名>")と設定するシート名を指定した方がよいですし、なんでまたイベントを使って設定する必要があるのでしょうか?

    特にフォントだけをいじっているところが不可解です。わざわざ物事をややこしくしているだけとしか思えません。

    毎日日付のシートを追加しているのなら、シート追加時にヘッダフッタをきちんと設定すれば済む話ではないんですか?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません