2017-03-24 16 views
1

これは私が初めてこのサイトに投稿したもので、助けていただければ幸いです。私はmrexcelフォーラムのメンバーであり、そこの偉大な人々から多くの助けを受けたが、私の質問に対する答えを見つけることができなかった。職場では、ユーザーフォームを使用してさまざまなワークシートにデータを入力できるワークブックを作成しました。私はできるだけ多くの「ユーザーエラー」をできるだけ排除しようとすると、これをユーザーフレンドリーにしようとしています。私が避けようとしている問題の1つは、シフトが終わったときにシートを閉じるのを忘れてしまい、他のユーザーがファイルを開いているときにブックが読み取り専用になっているために全員がロックアウトされることです。だから、私は40分の非アクティブ後にブックを保存して閉じるコードがあります。これが引き起こしている1つの問題(それは非常に小さな問題ですが、私の従業員の1人が私に持ち込んだ問題です)は、たまには偶然にユーザーがデータをユーザーフォームのすぐ近くに入力することですその40分の非活動、およびデータを提出する機会を得る前に、ワークブックが閉じます。誰かが自分のコードを変更する手助けをすることができれば、40分の無活動時間に達したときに、保存して閉じる前に、userformが開いていると判断し、そのアクションがあれば取​​り消すことができますか?ここに私が持っているコードがあります。私が得ることができるすべてのおかげで、ありがとう。VBAユーザーフォームが開いていない限り、非アクティブの時間後にブックを保存して閉じる方法は?

はThisWorkbookで
Dim CloseTime As Date 
Sub TimeSetting() 
    CloseTime = Now + TimeValue("00:40:00") 
    On Error Resume Next 
    Application.OnTime EarliestTime:=CloseTime, _ 
     Procedure:="SavedAndClose", Schedule:=True 
End Sub 
Sub TimeStop() 
    On Error Resume Next 
    Application.OnTime EarliestTime:=CloseTime, _ 
     Procedure:="SavedAndClose", Schedule:=False 
End Sub 
Sub SavedAndClose() 
    ActiveWorkbook.Close Savechanges:=True 
End Sub 

:モジュール1では

Private Sub Workbook_Open() 
    Call TimeSetting 
End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Call TimeStop 
End Sub 

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    Call TimeStop 
    Call TimeSetting 
End Sub 

答えて

0

ちょうどUserform_Initialize()イベントにTimeStop()サブを呼び出し、その後、ユーザーフォーム

+0

私は何度も物事を分析し、単純な解決法を完全に見過ごしていることを私に驚かせます。どうもありがとうございました。 –

0

を閉じたときにTimeSetting()サブを呼び出しますこの関数を使用してユーザーフォームがロードされているかどうかを確認できます。

Function IsUFLoaded(ByVal UFName As String) As Boolean 
    Dim UForm As Object 

    For Each UForm In VBA.UserForms 
     If UForm.Name = UFName Then 
      IsUFLoaded = True 
      Exit For 
     End If 
    Next 
End Function 

そして3210その後、SavedAndCloseサブで:

Sub SavedAndClose() 
    ' change userform_name to your userform name 
    If IsUFLoaded("userform_name") = False Then ActiveWorkbook.Close Savechanges:=True 
End Sub 
0

なぜ、代わりにあなたが示唆されているものを行うので:ユーザーフォームにログインし、誤って自分自身を残すために、ユーザーを許可する問題を引き起こします」あなたの代わりにCall TimeStopCall TimeSettingのタイマーをuserformのフィールドの変更イベントでリセットしますか?

+0

ありがとうございました。これは簡単な解決策です。それらは通常私が一番上を見ているものです。笑。 –

関連する問題