Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7542 / 13645 ツリー ←次へ | 前へ→

【37769】BeforeCloseイベント たくぴょん 06/5/18(木) 14:56 質問[未読]
【37777】Re:BeforeCloseイベント ぴかる 06/5/18(木) 16:22 回答[未読]
【37801】Re:BeforeCloseイベント Kein 06/5/18(木) 22:06 回答[未読]
【37806】Re:BeforeCloseイベント Nina 06/5/18(木) 23:04 質問[未読]
【37808】Re:BeforeCloseイベント Kein 06/5/19(金) 1:25 発言[未読]
【38397】Re:BeforeCloseイベント Nina 06/6/1(木) 21:44 質問[未読]
【38404】Re:BeforeCloseイベント Kein 06/6/1(木) 23:39 回答[未読]
【38405】Re:BeforeCloseイベント Nina 06/6/2(金) 7:59 お礼[未読]
【37814】Re:BeforeCloseイベント ハチ 06/5/19(金) 10:34 回答[未読]

【37769】BeforeCloseイベント
質問  たくぴょん  - 06/5/18(木) 14:56 -

引用なし
パスワード
   どなたかお願いいたします。
Book1のデータを基にBook2を作成します。
Book2を閉じるときに”提出期限は3日後です”
のようなメッセージボックスを表示させたいのですが・・・

イメージ的には Book2のBeforeClose 設定すればいいのだろうとは
思うのですが方法がわかりません。

よろしくお願いいたします。

【37777】Re:BeforeCloseイベント
回答  ぴかる  - 06/5/18(木) 16:22 -

引用なし
パスワード
   たくぴょんさん、こんにちは。

ThisWorkbookの所にこやつを入れてみて下さい。
Private Sub Workbook_BeforeClose(Cancel As Boolean)

  MsgBox "提出期限は3日後です", vbInformation, "お知らせ"

End Sub

【37801】Re:BeforeCloseイベント
回答  Kein  - 06/5/18(木) 22:06 -

引用なし
パスワード
   Book1にマクロを入れます。
まずVBEの画面で「挿入」「クラスモジュール」を選択します。
すると "Class1" という名前のモジュールが追加されますので、そこへ

Public WithEvents App As Application

Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, _
Cancel As Boolean)
  If Wb.Name = "Book2.xls" Then
   MsgBox "提出期限は3日後です", 48
   Set App = Nothing
  End If
End Sub

を、入れます。次に標準モジュールの先頭から

Dim X As New Class1

Sub Make_MyBook()
  Set X.App = Application

  Workbooks.Add
  With ActiveWorkbook

    '以下Book1のデータを基に、Book2に入力等の処理をするコードを書く

    .SaveAs X.App.DefaultFilePath & "\Book2.xls"
  End With
End Sub

を入れて、Make_MyBookを実行し、Book2を閉じてみて下さい。

【37806】Re:BeforeCloseイベント
質問  Nina  - 06/5/18(木) 23:04 -

引用なし
パスワード
   提出期限が今月の20日で、
この提出期限がD1に書かれていた時、
その3日前に、実際にアラームとしての
イベントマクロ(オープンでもクローズでも良いのですが)はどのように書くのでしょうか。教えていただけませんでしょうか。

【37808】Re:BeforeCloseイベント
発言  Kein  - 06/5/19(金) 1:25 -

引用なし
パスワード
   >D1に書かれていた
これは Book1, Book2 のどちらの、どういう名前のシートにですか ?
そもそも Book1 から Book2 を作成する、という現状のコードは
どういうものでしょーか ? ここへ提示してみて下さい。

【37814】Re:BeforeCloseイベント
回答  ハチ  - 06/5/19(金) 10:34 -

引用なし
パスワード
   ▼たくぴょん さん:

おはようございます。
自分もこの手のマクロの良い方法があれば、ぜひ知りたいです。

Excel2002(2003でしたっけ?)以降では、
マクロでVBprojectに書き込みするとエラーが出たと思います。
設定を変えると出来るようですが、ウィルスソフトで検知されることもあります。
なので良い方法かわかりませんが、自分はこうしてます。

1、引き継ぎたいマクロを記載したbookを作る。
今回であれば、ぴかるさんが回答されている内容です。

2、任意のフォルダに保存する。
テストですのでデスクトップに"test"を作って
その中に"sub"フォルダを作成、その中に"テンプレ.xls"で保存。
Pathで書くと 〜\デスクトップ\test\sub\テンプレ.xls

3、テンプレ.xlsの拡張子を .xltに変更

4、"test"フォルダの中に新しいファイルを作成し
標準モジュールに下記マクロを記載

Sub test()

If Dir(ThisWorkbook.Path & "\sub") <> "" Then
MsgBox "subフォルダがない為、マクロは動きません": Exit Sub
End If
Workbooks.Add Template:=ThisWorkbook.Path & "\sub\テンプレ.xlt"

End Sub

テンプレート機能を使ってマクロを転記してます。
説明ヘタですいません。

【38397】Re:BeforeCloseイベント
質問  Nina  - 06/6/1(木) 21:44 -

引用なし
パスワード
   ▼Kein さん:
>>D1に書かれていた
>これは Book1, Book2 のどちらの、どういう名前のシートにですか ?
>そもそも Book1 から Book2 を作成する、という現状のコードは
>どういうものでしょーか ? ここへ提示してみて下さい。

大変失礼しました。時間だけが経過してしまいました。
説明が不十分でした・・・
私のやりたいことを書いてしまったのですが、本来の内容とはずれているかも知れませんが、期限のあるもので、エクセルを閉じる時に
期限3日前・期限2日前・期限1日前・期限当日と日にちが経過するに従って日数が少なくなり、期限が過ぎると何も出ないようなことが出来無いものか?と思って質問させていただいたのです。

今まで色々と考えていましたが・・・経過日数に追随する方法がわから無いままです。
良い方法が有りましたら、ご教授ください。
期限の日をA1に入力しておいて、期限を書きました。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Dim TheDate As Date
 TheDate = Range("A1")

  If DateDiff("d", TheDate, Now) >= -3 Then

  MsgBox "提出日は3日後です"
  End If
On Error GoTo 0
End Sub

【38404】Re:BeforeCloseイベント
回答  Kein  - 06/6/1(木) 23:39 -

引用なし
パスワード
   Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Dim TheDate As Date
  Dim DyX As Long
 
  With Worksheets("Sheet1").Range("A1") 'シートへの参照を付けること
   If Not IsDate(.Value) Then
     MsgBox "日付がクリアされています", 48
     .Parent.Activate: Cancel = True
     Exit Sub
   Else
     TheDate = .Value
   End If
  End With
  DyX = Date - TheDate
  If DyX >= 1 Then
   MsgBox "提出日は " & DyX & " 日後です", 64
  End If
End Sub

というコードでどうでしょーか ?

【38405】Re:BeforeCloseイベント
お礼  Nina  - 06/6/2(金) 7:59 -

引用なし
パスワード
   ▼Kein さん:

ありがとう御座いました。
よく分かりました。
>  DyX = Date - TheDate

DyX = TheDate-Date と理解したら良いですね。

Parent関数に関してはヘルプを見ても今一つ分かりませんが
これから調べたく思います。

7542 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free