Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2010)
一定期間はボタンが押せない設定
投稿日時: 18/09/26 09:03:20
投稿者: あびあび

Access超初心者です。
Accessのボタンのうち一つのボタンについて、毎月10日0:00から10:00までボタンを押せない仕様にしたいのですが、方法がわかりません。
どのようにVBAを書いたら良いか教えていただけませんか??

回答
投稿日時: 18/09/26 10:19:00
投稿者: sk

引用:
Accessのボタンのうち一つのボタンについて、

とりあえず「Access のフォーム上にある
1 つのコマンドボタン」について
おっしゃっているのだと仮定しますが。
 
引用:
毎月10日0:00から10:00までボタンを
押せない仕様にしたいのですが、方法がわかりません。

(フォームモジュール)
------------------------------------------------------------------------
Option Compare Database
Option Explicit
 
'定数の宣言
Private Const LockedButtonName As String = "コマンドボタン名"
Private Const LockDayInMonth As Integer = 10
Private Const LockTimeStart As Date = #12:00:00 AM#
Private Const LockTimeEnd As Date = #10:00:00 AM#
 
'フォームの[読み込み時]イベント
Private Sub Form_Load()
On Error GoTo Err_Form_Load
 
    Dim strMsg As String
     
    'コマンドボタンの[使用可能]プロパティを設定
    Me.Controls(LockedButtonName).Enabled = fncTimerLocked
     
    'タイマー間隔を1000ミリ秒(1秒)に設定
    Me.TimerInterval = 1000
 
'終了処理
Exit_Form_Load:
    Exit Sub
 
'エラー時処理
Err_Form_Load:
    Me.TimerInterval = 0
    strMsg = "以下の実行時エラーが発生しました。" & vbCrLf & _
             "エラー番号: " & Err.Number & vbCrLf & _
             "説明: " & Err.Description
    Debug.Print strMsg
    MsgBox strMsg, vbCritical, "エラー(" & Me.Name & ".Form_Load)"
End Sub
 
'フォームの[タイマー時]イベント
Private Sub Form_Timer()
On Error GoTo Err_Form_Timer
 
    Dim boolEnabled As Boolean
    Dim strMsg As String
     
    'ロック判定の結果を取得
    boolEnabled = fncTimerLocked
         
    '[使用可能]プロパティの設定が不要である場合
    If Me.Controls(LockedButtonName).Enabled = boolEnabled Then
        'プロシージャを抜ける
        Exit Sub
    End If
     
    'コマンドボタンを使用不可にしようとする際に
    'そのコマンドボタンにフォーカスがある場合
    If (boolEnabled = False) And _
       (Me.ActiveControl.Name = LockedButtonName) Then
        '前のコントロールにフォーカスを移す
        Screen.PreviousControl.SetFocus
    End If
 
    'コマンドボタンの[使用可能]プロパティを設定
    Me.Controls(LockedButtonName).Enabled = boolEnabled
 
'終了処理
Exit_Form_Timer:
    Exit Sub
     
'エラー時処理
Err_Form_Timer:
    Me.TimerInterval = 0
    strMsg = "以下の実行時エラーが発生しました。Timerイベントを終了します。" & vbCrLf & _
             "エラー番号: " & Err.Number & vbCrLf & _
             "説明: " & Err.Description
    Debug.Print strMsg
    MsgBox strMsg, vbCritical, "エラー(" & Me.Name & ".Form_Timer)"
End Sub
 
'ロック判定関数
Private Function fncTimerLocked() As Boolean
     
    Dim dtCurrent As Date
    Dim dtCurrentTime As Date
     
    fncTimerLocked = True
     
    dtCurrent = Now()
    dtCurrentTime = TimeValue(dtCurrent)
     
    If Day(dtCurrent) <> LockDayInMonth Then
        Exit Function
    End If
 
    If dtCurrentTime < LockTimeStart Then
        Exit Function
    End If
 
    If dtCurrentTime > LockTimeEnd Then
        Exit Function
    End If
 
    fncTimerLocked = False
 
End Function
------------------------------------------------------------------------

投稿日時: 18/09/26 11:32:55
投稿者: あびあび

早速にご返事頂きありがとうございます。
本当に何もわからずで、非常に勉強になります。
VBAを貼り付け、コマンドボタン名を入れましたが、制限がかからず、そのままボタンが押せてしまいました。
ボタンは
@入力ボタン
A確認ボタン
B終了ボタン
と3つあります。
@のボタンのみ、対象期間中に押せない設定ができるとありがたいです。
また、時間については、パソコンの時間を想定しており、先ほど試したのもパソコンの時間を操作いたしました。
何か私の操作に問題があれば教えて頂けるとたすかります。

回答
投稿日時: 18/09/26 11:51:49
投稿者: sk

引用:
VBAを貼り付け、コマンドボタン名を入れましたが、
制限がかからず、そのままボタンが押せてしまいました。

・フォームモジュールではなく標準モジュールに
 コードを貼り付けたから。
 (貼り付け先が誤っている)
 
・フォームの各イベントプロパティの設定の問題。
 (イベントプロシージャが実行されていない)
 
・モジュールレベルの各定数の設定とシステム日時の問題。
 (正常に動作した結果そうなってるだけ)
 
引用:
ボタンは
@入力ボタン
A確認ボタン
B終了ボタン
と3つあります。
@のボタンのみ、対象期間中に押せない設定ができるとありがたいです。

それはモジュールレベルの定数 LockedButtonName の値を
そのコマンドボタンの名前に変更すればよいでしょう。

投稿日時: 18/09/26 13:06:02
投稿者: あびあび

確認したところ標準モジュールに貼り付けしていました。
また、イベントプロシージャが実行されいないエラーも出ましたが、なんとか解決できました。
早急なご対応のおかげもあり、できました。
ありがとうございました。