テーブルの存在を確認するVBA
テーブルの存在自体を確認するってことはあまりないかと思いますが、作業用テーブルなどを使っていると、リセットするのに、テーブルデータを消して、データをコピーという手順さえも省きたくなる時がある。また、自動採番などをやっていると、途中からの採番になり、1から降りなおしておきたい時などは、元データから新規でテーブルを作成してしまった方が簡単な場合がある。
そのような用途から、ただ単にテーブルの存在確認まで、下記の様なモジュールを使うと便利です。
Public Function ExistTable(TableName As String) As Boolean
On Error Resume Next
ExistTable = CurrentDb.TableDefs(TableName).name = TableName
End Function
Public Functionなので、モジュールとして登録になるわけですから、各VBAの中で呼び出すことになります。
呼び出すサンプルを下記に記載しておきます。
Private Sub entry_btn_Click()
Dim t_name As String
t_name = "存在を確認したいテーブル名"
' テーブル存在チェック
If ExistTable(t_name) Then
' テーブルあり
MsgBox "テーブルは存在します。"
Else
' テーブルなし
MsgBox "テーブルが存在していません。"
End If
End Sub
上記のVBAもネット上の拾い物ですが、なぜか?
ココに注意
ByRef 引数の型が一致しません
というエラーがでるので、
Dim t_name As String
t_name = "存在を確認したいテーブル名"
の部分を追加した訳です。
これでテーブルの存在確認ができるようになりました。
メッセージボックスの文章を改行したい
通常のメッセージボックスは、デフォルトのままですと、勝手に適当な場所で改行されます。
ちょっと見栄えが悪い時がありますので、意図的に改行したい場合の方法です。
MsgBox("入荷処理は新規ですか?" & Chr(13) & "【新規または作業途中データをリセットの場合は、「はい」】" & Chr(13) & "【途中からの再作業の場合は、「いいえ」】) "
つまり、
ココがポイント
文章” & Chr(13) & "文章
ってやれば、改行の意味になる。
※" & vbCrLf & "でも改行になるらしいが試していません。
VBAでアクションクエリの確認を無くす
レコードの追加クエリ、削除クエリ、更新クエリ、テーブル作成クエリなどをVBAで実行する時に、Access(アクセス)の設定自体を変更しなければならない。それだと、
ココに注意
各パソコン毎に設定をしなければならないので面倒
である。
参考
[ファイル]タブから[オプション]をクリックして、[Accessのオプション]ダイアログボックスを表示。[クライアントの設定]で[確認]から[アクションクエリ]のチェックボックスをオフにする
VBAのクエリなどを実行する手前に下記の様なコマンドを入れておけば確認ボックスは表示されなくなります。
DoCmd.SetWarnings False DoCmd.OpenQuery "アクションクエリ" DoCmd.SetWarnings True
テーブルを削除とテーブル内全レコード削除
テーブル内のデータを削除するってことは、リセットするってことですが、下記の一文をVBAで書くと全レコード削除になります。
DoCmd.RunSQL "DELETE * FROM 全レコード削除するテーブル名"
それから、めったにないかと思いますが、テーブルごと消したい時ですね。
ただし、フォームなどで消したいテーブルを開いておくとエラーになりますので注意してください。
DoCmd.DeleteObject acTable, "消したいテーブル名"
両方ともたった一行で、全レコードを消したりテーブルごとを削除しますので、使用する場合は、選択する文をいれて考える時間を与えるようにすることが大切ですね。
非連結フォームの1レコードデータ更新
https://pctips.jp/pc-soft/access-serach-vba-howto201907/
以前も、非連結フォームの更新を記事にしてありますが、馬鹿の一つ覚えの様に同じVBAをつかっていましたが、1レコードだけの更新なら下記のVBAの方がスマートかと思います。
Private Sub entry_btn_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String
On Error GoTo ErrRtn
' Debug.Print trans_stock_no
If IsNull(edit_stock Or edit_schedule_arrival Or edit_ideal_stock Or edit_waiting_shipping) Then
MsgBox ("データ入力されていません。無い場合は「0」を入力してください。")
Exit Sub
End If
If MsgBox("更新しますか? yes/no", vbYesNo, "更新確認") = vbYes Then
Set cn = CurrentProject.Connection
rs.CursorLocation = adUseClient
rs.Open "dbo_stock", cn, adOpenKeyset, adLockOptimistic
rs.Filter = "no = " & trans_stock_no 'ここにフーム間変数を設定
cn.BeginTrans
rs!stock = edit_stock
rs!schedule_arrival = edit_schedule_arrival
rs!ideal_stock = edit_ideal_stock
rs!waiting_shipping = edit_waiting_shipping
rs.Update
cn.CommitTrans
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
Else
MsgBox ("更新しませんでした。")
Exit Sub
End If
ExitErrRtn:
DoCmd.ShowAllRecords
Exit Sub
ErrRtn:
MsgBox "エラー: " & Err.Description
cn.RollbackTrans
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub