
エクセル初心者でお恥ずかしい質問なのですが。
仕事で複数で同じファイルを編集しており(共有不可)、開きっぱなし防止のため、過去の別の方の質問の回答から、以下のものをThisWorkBookへ作成しました。1,2,3分後(実際は5,10,30分後)にメッセージが出る設定にしてますが、当ファイルを閉じても別のファイルが開いていると、メッセージが中断されず、指定時間になると出てしまいます。Workbook_BeforeCloseでは直前しか中断されないため、なにかいい方法はないか途方にくれております。そもそもこうじゃない等(おそらくOpenのあとのIfは3つまとめていいと思いますが)含め、ご教授いただきましたらよろしくお願いします。
以下
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Dim 警告時刻 As Date
Const 利用時間 As Integer = 1 '分+起動時刻:now
Private Sub Workbook_Open()
If Not ThisWorkbook.ReadOnly Then
警告時刻 = Now + 利用時間 * TimeValue("00:01:00") '分に変換
Application.OnTime 警告時刻, "ThisWorkbook.利用制限ご注意"
End If
If Not ThisWorkbook.ReadOnly Then
警告時刻 = Now + 利用時間 * TimeValue("00:02:00") '分に変換
Application.OnTime 警告時刻, "ThisWorkbook.利用制限ご注意2"
End If
If Not ThisWorkbook.ReadOnly Then
警告時刻 = Now + 利用時間 * TimeValue("00:03:00") '分に変換
Application.OnTime 警告時刻, "ThisWorkbook.利用制限ご注意3"
End If
End Sub
Private Sub 利用制限ご注意()
警告文 = "ファイル名 「" + ThisWorkbook.Name + "」" + vbCrLf
警告文 = 警告文 + "利用時間1分経過しました。" + vbCrLf
警告文 = 警告文 + "あせらずあわてず確実に"
MsgBox 警告文, vbCritical, "ファイルの閉じ忘れ確認"
End Sub
Private Sub 利用制限ご注意2()
警告文 = "ファイル名 「" + ThisWorkbook.Name + "」" + vbCrLf
警告文 = 警告文 + "利用時間2分を経過しました。" + vbCrLf
警告文 = 警告文 + "お時間が経過しております。"
MsgBox 警告文, vbCritical, "ファイルの閉じ忘れ確認"
End Sub
Private Sub 利用制限ご注意3()
警告文 = "ファイル名 「" + ThisWorkbook.Name + "」" + vbCrLf
警告文 = 警告文 + "利用時間3分を経過しました。" + vbCrLf
警告文 = 警告文 + "一度ファイルを閉じてください。"
MsgBox 警告文, vbCritical, "ファイルの閉じ忘れ確認"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime 警告時刻, "ThisWorkBook.利用制限ご注意3", Schedule:=False
End Sub
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
今回、同様の質問がこれを含めて3つも出ていますね。
このご質問者(さんのコードを参考にしてみてください。
http://oshiete.goo.ne.jp/qa/10160168.html
この質問の元のコードは、かなり前のものですが、Application.OnTime ......,False とすることで解除するという内容なのです。ご質問のコードの場合は、
ループして、1つ終わったら、次のSub 利用制限ご注意 () 呼び出せばよいのですが、終了する時は残ってしまいますので、
解除方法
Application.OnTime .設定時間, マクロ名, ,False (引数の設定時間と、最後の引数をFalse にすると解除されます。)
今回、私は改めて見直してみました。気にいるかどうかは別ですが、それとは別案です。
MsgBox は、ユーザーが閉じなくても、自動で閉じますが、3分経つと、終了してください、と出ます。
なお、ThisWorkbook を使わなかったのは、元のマクロに、邪魔にならないようにしたまでです。
現行では、変数colSchedule は、Collectionオブシェクトにしたのはあまり意味がありません。
'標準モジュール
#If Win64 Then
Private Declare PtrSafe Function MessageBoxEx Lib "user32" Alias _
"MessageBoxExA" (ByVal hwnd As LongPtr, ByVal lpText As String, ByVal lpCaption _
As String, ByVal uType As Long, ByVal wLanguageId As Long) As Long
#Else '32bit版
Private Declare Function MessageBoxTimeoutA Lib "user32" (ByVal hwnd As Long, _
ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long, ByVal _
wLanguageId As Long, ByVal dlliseconds As Long) As Long
#End If
Dim PassTime As Long
Dim colSchedule As Collection
Dim myTime As Date
Sub Auto_Open()
PassTime = 0
Set colSchedule = New Collection
Call myTimeSchedule
End Sub
Private Sub myTimeSchedule()
'1分
myTime = Now + TimeSerial(0, 1,0)
PassTime = PassTime + 1
colSchedule.Add myTime
'8'秒の待ち時間
Application.OnTime myTime, "MyCaution", TimeSerial(0, 0, 8), True
End Sub
Private Sub myCaution()
Dim msgAry
Dim Ret As VbMsgBoxResult
Dim i As Long
msgAry = Array("", "あせらずあわてず確実に", "お時間が経過しております。", "一度ファイルを閉じてください。", "時間超過!")
If PassTime < 4 Then: i = PassTime: Else i = 4
'自動的にメッセージが消えます。
Ret = MessageBoxTimeoutA(Application.hwnd, "利用時間" & PassTime & "分経過しました。" & vbCrLf & _
msgAry(i), "messagebox", vbMsgBoxSetForeground, 0, 3000)
colSchedule.Remove 1
If PassTime >= 3 Then
Ret = MsgBox("終了してください。", vbExclamation + vbOKCancel)
If Ret = vbOK Then
ThisWorkbook.Close True
Else
Call myTimeSchedule
End If
Else
Call myTimeSchedule
End If
End Sub
Sub Auto_Close()
If colSchedule.Count > 0 Then
Application.OnTime myTime, "MyCaution", , False
End If
End Sub
WindFallerさま。ありがとうございました。ここへの質問が初めてでまた、素人の質問をしてしまいますが、
>(引数の設定時間と、最後の引数をFalse にすると解除されます。)
とは、いろいろと調べながら考えてみましたが、理解が追いつきませんでした・・・
私のマクロから具体的にいただけるとうれしいですが。。。
WindFallerさまが作ったマクロで試してみました。すばらしいですが、開きっぱなし防止なのでメッセージが消えてしまうことがあわないこと、なにより素人の私には時間を変えたり手を加えるにはハードルが高いようです。わざわざいただいたのにすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Access(アクセス) ExcelのVBAコードについて教えてください。 4 2023/01/20 09:44
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) Excelのマクロコードについて教えてください 1 2022/03/27 12:02
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
タイムマクロ内にタイムマクロは可能ですか?
Excel(エクセル)
-
OnTimeを使ったのですが「エラー」になってしまいます
Visual Basic(VBA)
-
-
4
OnTime 使用時のプロシージャへの引数の与え方、その記述方法を教えて下さい。
Visual Basic(VBA)
-
5
VBA Ontime を一旦停止をさせるには
Excel(エクセル)
-
6
ontimeのリセット方法
Excel(エクセル)
-
7
VBA=一定時間エクセルの入力操作がない場合、自動的にそのブックを閉じたい
Windows Vista・XP
-
8
タイマーマクロの二重起動防止をしたい
Visual Basic(VBA)
-
9
Excelマクロで、稼働中のマクロを確認する方法
その他(Microsoft Office)
-
10
「一定の時間間隔で5秒毎にMacro1を実行する」
Excel(エクセル)
-
11
毎日指定時刻に自動でエクセルを開き、マクロを起動する方法
Visual Basic(VBA)
-
12
VBAにてメッセージボックスを最前面に表示させる
その他(プログラミング・Web制作)
-
13
マクロの中でマクロを実行中に中止させたい
Excel(エクセル)
-
14
Excel(エクセル) VBA プロシージャーをミリ秒で繰り返し実行する方法
Excel(エクセル)
-
15
Application.Runエラー(1004)
Excel(エクセル)
-
16
Excelで一定時間が経ったらメッセージを出したい
Excel(エクセル)
-
17
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
18
Excel VBAで「プログラム実行」ボタンと「プログラム停止」ボタンをつけたい
Excel(エクセル)
-
19
vba セルに入力した時間をマクロで受け取るには?
Excel(エクセル)
-
20
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ブラウザー(Google chrome)を...
-
エクセルの関数で「6ヶ月より...
-
Excelで一定時間が経ったらメッ...
-
OnTime の中断方法について
-
携帯でインターネットしようと...
-
「このサイトのセキュリティ証...
-
PSPをスマホのWi-Fiテザリング...
-
メールの件名に、「MEIWAKU」の...
-
Access の「コンテンツの有効化...
-
finest で中古PCを購入 独自の...
-
海外からのDocomoの解約方法
-
もし、自分の住所を知られたく...
-
McAfeeって安全なセキュリティ...
-
LINEでごめんねって謝ったらこ...
-
日本経済新聞の NIKKEI NET が...
-
VBAでWebのデータを取得したい
-
マカフィー30日体験版から製品...
-
SoftBankのセキュリティONEにつ...
-
このサイトのセキュリティ証明...
-
ネットワーク脅威防止
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの関数で「6ヶ月より...
-
OnTime の中断方法について
-
Excelで一定時間が経ったらメッ...
-
セキュリティ警告が出ています...
-
黄色い三角しるしの中に白いビ...
-
OSX Tiger用のFirefoxとサファ...
-
これはウイルスに感染した?
-
トロイの木馬が何度も・・・・
-
ツイッターで、リンクのところ...
-
アダルトサイトを見ていたら、...
-
変数名の自動変更支援機能について
-
セキュリティ警告の消し方について
-
Facebookを見ていたらいかがわ...
-
ETCマイレージサービスのサイト...
-
今、自分のアイフォーンが27の ...
-
Norton Anti Virusでのウィルス...
-
セキュリティ証明書エラーが出...
-
svchost.exeに対して警告が出る
-
Symantecで以下のような警告文...
-
シートを削除する際
おすすめ情報
WindFallerさま、ありがとうございました。補足で登録するのですね。。。
>解除方法
>Application.OnTime .設定時間, マクロ名, ,False (引数の設定時間と、最後の引数をFalse にすると>解除されます。)
なんとなくはわかるのですが、今の私の作成したマクロで可能なんでしょうか?おそらくWindFallerさまが作成したマクロのように、1つの作業で3回のメッセージがでるようにすれば解除できますってことでしょうか? すみません初心者の質問で。。。
WindFallerさまに作成いただいたマクロでも、メッセージの表示時間を5分にし、5分毎にメッセージを出るように変更したら理想に近い大変便利なものとわかりました。もし私のが手間がかかるようでしたら使わせて頂ければと思いますのでよろしくお願いします。