- ベストアンサー
テキストボックスの日付変更時のマクロ実行とは
- 初心者の方が、Windows7とExcel2007でマクロを作成している場合、テキストボックスの日付が変更されたときにのみマクロを実行したいと考えています。
- 現在の方法では、Range("E3")の値を手動で0に設定する必要があり、手間がかかっています。
- そこで、Aブックのユーザーフォームに日付の入ったテキストボックスを取り付け、ここの日付が変更されたときにのみマクロを実行できるようにしたいと考えています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(1)>(2)Bブックは毎月一回だけ、書式の変更マクロを実行します。 つまり目的は AブックのBブックに対する書式変更を行うマクロの実行頻度が月に1度キリで、 所定日(リセット日)を過ぎると再度実行出来るようにしたいという事ですか? (2)>mydate = Worksheets("集計").Range("D2").Value 「集計」シートとはBブックの(書式設定を対象とする)処理データのシートでしょうか。 (3)>Range("E3").Formula = "1" ’ここで次回起動時マクロ実行しない Bブックのマクロは起動時に実行したいという事でしょうか? workbookの指定コードが見当たらないため、コードからはBブックをアクティブにした状態でAブックに記述した「書式の変更操作」を手動実行しているようですが。 ご提示のコードに関する関連データの仕様と、目的を明確に記述して頂かないと詳細が分からないのですが。 なるべくご提示のコードを変えずに上記(1)により仕様変更したコードを記述しますので参考にしてください。 (不要な処理はコードをコメントアウトしています) また、質問にて「0」「1」でマクロの実行条件フラグを立てられているセルを利用して、 前回の実行日を格納(記録しておく)セルとして利用しています。 ■コードでの処理内容 コード内での処理内容を例題を踏まえて以下の(1)~(4)に記述いたします。 コード内の該当箇所に「▼(1)~▼(4)」でコメント行を記述しています。 (前回実行日「2015/07/24」がセルE3に入力(シリアル値:42209)されているものとします) (1)前回実行日の翌月の1日(2015/8/1)のシリアル値「42217」を変数「reset_day」に格納します (2)今回の実行日「2015/8/24」が(1)のリセット日を(含み)過ぎていれば書式更新マクロを実行 (条件式により真となりますので、更新用マクロを記述してください) (3)実行日をE3セルに上書きします (4)(2)においてリセット日より実行日が前の日付「2015/7/24~2015/7/31」であれば処理 (2)の条件において、偽となる場合ですが、コード内の冒頭で「Application.ScreenUpdating = False」をしているので「End Sub」で終了せずに、「Application.ScreenUpdating = True」は実行しておきましょう。 前回実行日が7/24であれば、8/1を超えない限り何度実行しても前回実行日となります。 8/1を超えた時点で実行すればリセット日が9/1で更新されるため、9/1を超えない限り同様に実行できなくなります。 以後、繰り返しとなります。 ■VBAコード Sub 書式の変更操作() Application.ScreenUpdating = False Dim n As Long Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim mydate As Date '▼(1) 'リセット日格納用変数 Dim reset_day As Date '前回実行日の日付を格納 reset_day = Range("E3").Value '前回実行日の日付の翌月の1日をリセット日として再格納 reset_day = DateAdd("m", 1, DateSerial(Year(reset_day), Month(reset_day), 1)) '▼(2) 'リセット日を現在の日時が超えていれば実行 If reset_day <= Now() Then myMsg = "この" & Format(Range("D2").Value, "m月") & "分 表の書式等を更新します。" myTitle = "書式変更の確認" myBtn = MsgBox(myMsg, vbOKOnly + vbExclamation, myTitle) '【ここに書式更新のマクロ実行処理を記述】 'Range("E3").Formula = "1" 'ここで次回起動時マクロ実行しない MsgBox "書式を更新しました。" '▼(3) '実行日をセルE3に書き出し Range("E3").Value = Now() Else '▼(4) MsgBox "既に変更済みです。", vbOKOnly + vbExclamation '『Application.ScreenUpdating = True』は処理するようにしましょう。 'Exit Sub End If Application.ScreenUpdating = True End Sub
その他の回答 (1)
- weavaest
- ベストアンサー率15% (157/1020)
やりたいことは何となく分かるのですが、E3の対する1や0の書き込みも要求仕様の一部ですか? E3の書き込みなどは全く無視して、私なりの方法を書いてみました。 手元にVBAに実行環境がないので、コードではなく、処理手順だけです。 ワークブックを開いた時に自動でマクロを実行することができますが、御存知でしょうか。 そのマクロで以下のような処理を行えば、月1回に任意の処理(書式変更マクロなど)を実行させることができると思います。 ・更新日と当日の日付けを比較するようにする ・当日の日付けと更新日の月が違えば、任意の処理を行う ・更新日を任意のセルに書き込む ※初回は更新日のセルは空白のはずですから、無条件で任意の処理が実行されます。
お礼
なるほど、気がつきませんでした。ありがとうございました。
お礼
ありがとうございます。こんなに早く自分のやりたいことが出来て感動です。 説明も初心者の私にも理解できそうな、完璧で詳細な記述をしていただき、ただただ感謝の一言です。本当にありがとうございました。