
エクセル初心者でお恥ずかしい質問なのですが。
仕事で複数で同じファイルを編集しており(共有不可)、開きっぱなし防止のため、過去の別の方の質問の回答から、以下のものを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で質問しましょう!
この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
Excelマクロで、稼働中のマクロを確認する方法
その他(Microsoft Office)
-
7
ontimeのリセット方法
Excel(エクセル)
-
8
VBA=一定時間エクセルの入力操作がない場合、自動的にそのブックを閉じたい
Windows Vista・XP
-
9
タイマーマクロの二重起動防止をしたい
Visual Basic(VBA)
-
10
「一定の時間間隔で5秒毎にMacro1を実行する」
Excel(エクセル)
-
11
毎日指定時刻に自動でエクセルを開き、マクロを起動する方法
Visual Basic(VBA)
-
12
VBAにてメッセージボックスを最前面に表示させる
その他(プログラミング・Web制作)
-
13
マクロの中でマクロを実行中に中止させたい
Excel(エクセル)
-
14
Excel(エクセル) VBA プロシージャーをミリ秒で繰り返し実行する方法
Excel(エクセル)
-
15
Application.Runエラー(1004)
Excel(エクセル)
-
16
vba セルに入力した時間をマクロで受け取るには?
Excel(エクセル)
-
17
Excelで一定時間が経ったらメッセージを出したい
Excel(エクセル)
-
18
エクセルで定期的(30分おき)にマクロを実行させる方法は?
Excel(エクセル)
-
19
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
20
Excel VBAで「プログラム実行」ボタンと「プログラム停止」ボタンをつけたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
警告?
-
エクセルの関数で「6ヶ月より...
-
ブラウザー(Google chrome)を...
-
アダルトサイトを見ていたら、...
-
「このサイトのセキュリティ証...
-
ETCマイレージサービスのサイト...
-
これはウイルスに感染した?
-
PSPをスマホのWi-Fiテザリング...
-
フリーWi-Fiが繋がらない
-
SoftBankのセキュリティONEにつ...
-
改ざん防止が管理者によってで...
-
Access の「コンテンツの有効化...
-
インスタのセキュリティ確認は...
-
LINEでごめんねって謝ったらこ...
-
McAfeeって安全なセキュリティ...
-
サイト観覧が重い(日系トレン...
-
iPhoneで使っているセキュリテ...
-
UsbEnterのUSBメモリを挿入する...
-
メールの件名に、「MEIWAKU」の...
-
海外からのDocomoの解約方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの関数で「6ヶ月より...
-
ブラウザー(Google chrome)を...
-
Excelで一定時間が経ったらメッ...
-
警告?
-
「セキュリティの警告」が出て...
-
OnTime の中断方法について
-
これはどうしたら良いのですか...
-
アダルトサイトを見ていたら、...
-
avast! 4 Home Editionのネット...
-
avastとzonealarm
-
パソコンが壊れました(前と同...
-
ウイルスバスタークラウド2011...
-
Access 「これ以上テーブルを...
-
警告が出っ放しで困ってます
-
audacityのダウンロード
-
RegCleenProやTuneUpUtiliti
-
Norton AntiVirusが無効と出ます。
-
エクセルのVBAについて教えてく...
-
エクセル形式 97-2003は将来使...
-
ipad miniを最近購入しました。...
おすすめ情報
WindFallerさま、ありがとうございました。補足で登録するのですね。。。
>解除方法
>Application.OnTime .設定時間, マクロ名, ,False (引数の設定時間と、最後の引数をFalse にすると>解除されます。)
なんとなくはわかるのですが、今の私の作成したマクロで可能なんでしょうか?おそらくWindFallerさまが作成したマクロのように、1つの作業で3回のメッセージがでるようにすれば解除できますってことでしょうか? すみません初心者の質問で。。。
WindFallerさまに作成いただいたマクロでも、メッセージの表示時間を5分にし、5分毎にメッセージを出るように変更したら理想に近い大変便利なものとわかりました。もし私のが手間がかかるようでしたら使わせて頂ければと思いますのでよろしくお願いします。