Excel VBA質問箱 IV

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

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


4739 / 13646 ツリー ←次へ | 前へ→

【54702】一定時間操作が無かった時にマクロを走らせる わいわい 08/3/26(水) 18:42 質問[未読]
【54703】Re:一定時間操作が無かった時にマクロを走... ハチ 08/3/26(水) 18:53 発言[未読]
【54706】Re:一定時間操作が無かった時にマクロを走... わいわい 08/3/26(水) 20:06 お礼[未読]
【54712】Re:一定時間操作が無かった時にマクロを走... VBWASURETA 08/3/27(木) 12:33 発言[未読]
【54748】Re:一定時間操作が無かった時にマクロを走... わいわい 08/3/28(金) 12:14 発言[未読]
【54751】Re:一定時間操作が無かった時にマクロを走... VBWASURETA 08/3/28(金) 13:23 回答[未読]
【54766】Re:一定時間操作が無かった時にマクロを走... n 08/3/28(金) 17:35 発言[未読]
【54767】Re:一定時間操作が無かった時にマクロを走... わいわい 08/3/28(金) 19:32 お礼[未読]
【54810】Re:一定時間操作が無かった時にマクロを走... わいわい 08/3/31(月) 11:21 お礼[未読]

【54702】一定時間操作が無かった時にマクロを走ら...
質問  わいわい  - 08/3/26(水) 18:42 -

引用なし
パスワード
   いつもお世話になります。
www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=54624;id=excel
での質問を見ていて問題の本質は『保存して閉じる』のを忘れる
なのかなと思い、『5分間操作が無かったら』
  With ThisWorkbook
    .Save
    .Close
  End With
してやれば良い思いました。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim E_sousa As Date
E_sousa = Now()
End Sub
で、バックグランドでどんどん時間を書き直してって…。
と考えていたんですが…。
操作がないことを知り、マクロを走らせる方法はあるんでしょうか?

急ぎではありません。興味があるので勉強したいです。
参考リンク等でも良いので、ありましたら教えて下さい。
ちなみに、ここで『操作』で検索してみましたがありませんでした。

・同時期にVBAはじめた岳さんは私よりもっと上達してるんだろうなぁ
がんばろう!!(過去ログで岳さんの名前を見かけたので…。)

【54703】Re:一定時間操作が無かった時にマクロを...
発言  ハチ  - 08/3/26(水) 18:53 -

引用なし
パスワード
   ▼わいわい さん:
>で、バックグランドでどんどん時間を書き直してって…。
>と考えていたんですが…。
>操作がないことを知り、マクロを走らせる方法はあるんでしょうか?
>
>急ぎではありません。興味があるので勉強したいです。
>参考リンク等でも良いので、ありましたら教えて下さい。

以前に同じような処理を書いたことがあるのですが、
「操作がなかったら」ではなく「更新がなかったら」としてました。
www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=41354;id=excel

多少、参考になればと思います。

【54706】Re:一定時間操作が無かった時にマクロを...
お礼  わいわい  - 08/3/26(水) 20:06 -

引用なし
パスワード
   ハチ さん、ありがとうございました。
丸々同じでした。
でも、コードを噛み砕くのに時間をかけますので、(自分の中で消化できるように)少々時間をください。
まずはお礼まで。

【54712】Re:一定時間操作が無かった時にマクロを...
発言  VBWASURETA  - 08/3/27(木) 12:33 -

引用なし
パスワード
   ▼わいわい さん、 ハチ さん:
こんにちは。

特に調べてはいないですが、
Excel vbaで作るスクリーンセーバーで調べると
それなりのソースができるんじゃないかなっと思います。

後、Saveで問題と書いてましたが、自動バックアップと
関係ないですか?

【54748】Re:一定時間操作が無かった時にマクロを...
発言  わいわい  - 08/3/28(金) 12:14 -

引用なし
パスワード
   現在のぶつかってる状況を報告します。

'ThisWorkBookモジュール
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  T = Now()
  Call Set_OnTime
End Sub

'標準モジュール
Public T As Date 'チェック実行時刻

Function Set_OnTime()
  'MsgBox "Set_OnTime"
  Application.OnTime T + TimeValue("00:00:30"), "Exe_OnTime"
End Function

Function Exe_OnTime()

If Now() < T + TimeValue("00:00:30") Then
  With ThisWorkbook
    .Save
    .Close
  End With
End If
End Function

これで、良いのかなと思っていたら、(テストなので30秒)
Tが代わっていないような…。イミディエイトで確認すれば、操作するたびに代わっています。
それと、勝手に閉じるには閉じるんですけど、勝手にまた開いてきます。
ハチさんの過去ログに記載の過去ログで ”Now()”が良くないと解ったんですが、代替案がなくて…。

VBWASURETAさん、返事が遅くなりすみませんでした。上記の様な状態でスクリーンセーバーは試していません。
スクリーンセーバーでやってけば、出来そうですね。ひと段落したら探してみます。

【54751】Re:一定時間操作が無かった時にマクロを...
回答  VBWASURETA  - 08/3/28(金) 13:23 -

引用なし
パスワード
   ▼わいわい さん:
こんにちは。

ハチさんが質問スレッドを過去分の話として別けて
書いて頂いたのでそちらも見てください。

//www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=54713;id=excel

多分その辺り関係もありそうです。

【54766】Re:一定時間操作が無かった時にマクロを...
発言  n  - 08/3/28(金) 17:35 -

引用なし
パスワード
   こんにちは。
SheetSelectionChangeごとにTが書き換わると同時に、
その回数分OnTimeで予約してる事は把握されてますか?
>勝手にまた開いてきます。
もそこに原因があります。
Bookが閉じた後も解除されていないOnTimeが残っている事になります。
対処方法としては、予約前に直前予約の解除をしなければいけないと思いますよ。

簡易的に考えて、x分後に閉じる処理、ではなくx分間隔で操作状況を調べる、
というので良ければ、昔書いた事があるサンプルです。

'ThisWorkbookモジュール
Option Explicit

Private Type POINTAPI
  x As Long
  y As Long
End Type

Private Declare Function GetCursorPos Lib "user32.dll" ( _
                   ByRef lpPoint As POINTAPI) As Long

Private MoP As POINTAPI
Private pasTime As Date
Private chkTime As Date
Private xx As Long
Private yy As Long

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
                     ByVal Target As Range)
  pasTime = Now
End Sub

Private Sub ontime_set()
  Dim tv As Date
  
'  ontime_reset
  tv = TimeValue("00:00:10")
  GetCursorPos MoP
  If (MoP.x = xx) And (MoP.y = yy) And (pasTime < (chkTime - tv)) Then
    'MsgBox "end?"
    ThisWorkbook.Close True
  Else
    xx = MoP.x
    yy = MoP.y
    chkTime = Now + tv
    Application.OnTime chkTime, "ThisWorkbook.ontime_set"
  End If
End Sub

Private Sub ontime_reset()
  If chkTime > Now Then _
    Application.OnTime chkTime, "ThisWorkbook.ontime_set", False
End Sub

起動と終了については、Workbook_Open/Workbook_BeforeClose などと
連携するなりなんなりと。

ただ、実務運用するかしないかは、
ファイルの使用用途を充分吟味した方が良いと思います。
あらゆるケースでも『上書き保存』して閉じるというのは、
私だったら避けたいとこですね。

【54767】Re:一定時間操作が無かった時にマクロを...
お礼  わいわい  - 08/3/28(金) 19:32 -

引用なし
パスワード
   n さんありがとうございます。
>SheetSelectionChangeごとにTが書き換わると同時に、
>その回数分OnTimeで予約してる事は把握されてますか?
チョット前に気付きました
If Now < A Then
    ActiveWorkbook.Save
    ActiveWorkbook.Close
  Else
    Selection.Offset(1, 1).Select
にしてやったりしていました。

>>勝手にまた開いてきます。
>もそこに原因があります。
>Bookが閉じた後も解除されていないOnTimeが残っている事になります。
↑ まったく解りませんでした。すっきりしました。
>対処方法としては、予約前に直前予約の解除をしなければいけないと思いますよ。
了解です。

>ただ、実務運用するかしないかは、・・・
まったくその通りですね。運用するつもりはなくなりました。

ただ、ここまで来て断念するのは悔しいので、nさんのコードをしっかり解読したいと思います。 
難航不落のヘルプやろーと戦ってみます。
nさんのレスでだいぶ進みそうです。ありがとうございました。

記事21162 05/1/26 にもまったく同じのがありました。
私と同じ過ちをしてるようです。

【54810】Re:一定時間操作が無かった時にマクロを...
お礼  わいわい  - 08/3/31(月) 11:21 -

引用なし
パスワード
   みなさんありがとうございます。
www.winapi-database.com/Beginner/page1.html
↑他サイトで見つけたレスで紹介されていた↑
ここでチョット勉強してからにしてみます。
今回は解決とさせていただきます。

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