アクセス小僧:全レコードの特定フィールドに0を書き込む [コンピューター]
アクセスのフォームでボタンを押したら、全レコードの特定フィールドに0を書き込んで、そのフィールドを初期化するマクロを
作りました。
【流れ】
【スクリプト】
Private Sub 検索回数リセット_Click()
'【機能】フォームを閉じて、検索回数を全レコード0にして、フォームを再度開く
'On Error GoTo ERR1
'【変数】
Dim myPWMngID As Long ' PW_Mng_ID
Dim MyStr1 As String ' 文字列
Dim myAns As Integer ' 答え
Dim objWshShell ' WSHオブジェクト
Dim db1 As DAO.Database
Dim rs1 As DAO.Recordset
Dim strSQL As String ' SQL文字列
'【実行コード】
Set objWshShell = CreateObject("WScript.Shell")
' IDを退避
myPWMngID = [PW_Mng_ID]
MyStr1 = "PW_Mng_ID = " & myPWMngID
' フォームを閉じる
DoCmd.Close acForm, "パスワード入力", acSavePrompt
' 検索回数を全レコード0にする。
Set db1 = CurrentDb
strSQL = "SELECT * FROM T_パスワード管理"
Set rs1 = CurrentDb.OpenRecordset(strSQL)
If rs1.RecordCount >= 1 Then
rs1.MoveFirst
Do Until rs1.EOF
rs1.Edit
rs1![検索回数] = 0
rs1.Update
rs1.MoveNext
Loop
End If
rs1.Close
Set rs1 = Nothing ' 解放
db1.Close
Set db1 = Nothing ' 解放
' フォームを再度開く
myAns = objWshShell.PopUp("フォームを再度開きますか?" & vbCrLf _
& "(5秒待ちます)", 5, "確認", vbOKCancel + vbDefaultButton2 + vbQuestion)
Select Case myAns
Case -1
myAns = objWshShell.PopUp("応答がありませんでした" _
& vbCrLf & "(2秒で消えます)", 2, "応答なし", vbExclamation)
Case vbOK
DoCmd.OpenForm "パスワード入力", acNormal, , , acFormPropertySettings, acWindowNormal ' フォームを開く
With Forms![パスワード入力].Recordset
.FindFirst MyStr1
End With
End Select
Set objWshShell = Nothing
'If SysCmd(acSysCmdGetObjectState, acQuery, "全件の経過日数") _
'= acObjStateOpen Then
'myAns = MsgBox("クエリ「全件の経過日数」を一旦、閉じます。", vbExclamation, "注目!")
'DoCmd.Close acQuery, "全件の経過日数"
'End If
'DoCmd.OpenQuery "全件の経過日数"
Exit Sub
ERR1:
MsgBox ("エラー(検索回数リセット_Click)" & vbCrLf & Err.Description)
Set objWshShell = Nothing
End Sub
作りました。
フォーム名 | パスワード入力 |
テーブル名 | T_パスワード管理 |
フィールド名 | 検索回数 |
【流れ】
1.フォームを一旦、閉じる。 |
2.テーブルの全レコードを選択するSELECT文で、レコードセットをセットする。 |
3.各レコードの検索回数フィールドに0をセットして、レコードセットを閉じる。 |
4.フォームを開く。 |
【スクリプト】
Private Sub 検索回数リセット_Click()
'【機能】フォームを閉じて、検索回数を全レコード0にして、フォームを再度開く
'On Error GoTo ERR1
'【変数】
Dim myPWMngID As Long ' PW_Mng_ID
Dim MyStr1 As String ' 文字列
Dim myAns As Integer ' 答え
Dim objWshShell ' WSHオブジェクト
Dim db1 As DAO.Database
Dim rs1 As DAO.Recordset
Dim strSQL As String ' SQL文字列
'【実行コード】
Set objWshShell = CreateObject("WScript.Shell")
' IDを退避
myPWMngID = [PW_Mng_ID]
MyStr1 = "PW_Mng_ID = " & myPWMngID
' フォームを閉じる
DoCmd.Close acForm, "パスワード入力", acSavePrompt
' 検索回数を全レコード0にする。
Set db1 = CurrentDb
strSQL = "SELECT * FROM T_パスワード管理"
Set rs1 = CurrentDb.OpenRecordset(strSQL)
If rs1.RecordCount >= 1 Then
rs1.MoveFirst
Do Until rs1.EOF
rs1.Edit
rs1![検索回数] = 0
rs1.Update
rs1.MoveNext
Loop
End If
rs1.Close
Set rs1 = Nothing ' 解放
db1.Close
Set db1 = Nothing ' 解放
' フォームを再度開く
myAns = objWshShell.PopUp("フォームを再度開きますか?" & vbCrLf _
& "(5秒待ちます)", 5, "確認", vbOKCancel + vbDefaultButton2 + vbQuestion)
Select Case myAns
Case -1
myAns = objWshShell.PopUp("応答がありませんでした" _
& vbCrLf & "(2秒で消えます)", 2, "応答なし", vbExclamation)
Case vbOK
DoCmd.OpenForm "パスワード入力", acNormal, , , acFormPropertySettings, acWindowNormal ' フォームを開く
With Forms![パスワード入力].Recordset
.FindFirst MyStr1
End With
End Select
Set objWshShell = Nothing
'If SysCmd(acSysCmdGetObjectState, acQuery, "全件の経過日数") _
'= acObjStateOpen Then
'myAns = MsgBox("クエリ「全件の経過日数」を一旦、閉じます。", vbExclamation, "注目!")
'DoCmd.Close acQuery, "全件の経過日数"
'End If
'DoCmd.OpenQuery "全件の経過日数"
Exit Sub
ERR1:
MsgBox ("エラー(検索回数リセット_Click)" & vbCrLf & Err.Description)
Set objWshShell = Nothing
End Sub
ヤバイぜ! ありがとうございます(^_0)ノ
by cheese999 (2020-03-28 06:37)