こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アクセスのDMAXをVBAで記述したい

今は、マクロで値の代入を使い
アイテム=[ID]
式=DMax("ID","テーブル名")+1
として連番の次の番号を振ろうとしています。

これと同じことをVBAでやるにはどのように
記述すれば良いのでしょうか。

宜しくお願い致します。

投稿日時 - 2015-05-15 16:23:27

QNo.8975540

すぐに回答ほしいです

質問者が選んだベストアンサー

すみません。不都合な回答になっているので
単純に以下で試してみてみてください。
(頭がボーっとしていて、回答になっていませんでした。)

Private Sub 名前_AfterUpdate()
  If Not IsNull(Me!名前) Then
    Me!ID = DMax("ID", "テーブル名") + 1
  Else
End Sub

これだと、「ID」が主キーの場合、名前が空白の場合、
レコードを移動しようとするとAccessからエラーが出ます。
「インデックス、または主キーにはNull値を使用できません」
このようなエラーです。フォームを閉じない限りこのエラーは
出続きます。このエラーを利用するほうがあれこれ複雑な
エラー処理をするよりはましかもしれません。

必要な追加処理、状況の把握のずれなどがありましたら
補足してください。

投稿日時 - 2015-05-22 20:22:40

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

すみません。No3の続きというか、No3の書き直しということで
少し変更してみます。
フォームの更新前処理で以下のように
してみるとどうなりますか?



Private Sub Form_BeforeUpdate(Cancel As Integer)
  If Not IsNull(Me!名前) Then
    Me!ID = DMax("ID", "テーブル2") + 1
  Else
    If MsgBox("レコードを破棄しますか", vbYesNo) = vbYes Then
      Me.Undo
    Else
      Cancel = True
    End If
End If
End Sub

投稿日時 - 2015-05-22 23:59:23

ANo.3

少し、したいことが不明の点があるので、
先読みのような回答ですが。

いずれかのフィールドの更新後処理でするとします。
もし、「ID」が主キーの場合は、いずれかのフィールドに何らかの
数値、あるいは文字を入れるとそのレコードはDirty状態でも
主キーがNullだと、エラーがでるので、、レコードの確定を
ないものとしたい場合はUndoを使ってレコードの確定を回避するようにします。
ただし、Accessのシステムからのエラーを回避することも必要になります。
たとえば、レコードで必ず必須のフィールドが「名前」というフィールドならば、
以下のように。

Private Sub 名前_BeforeUpdate(Cancel As Integer)
  'Accessのエラーを回避
  On Error Resume Next
  If Not IsNull(Me!名前) Then
    Me!ID = DMax("ID", "テーブル名") + 1
  Else
    If MsgBox("名前が抜けています。レコードを破棄しますか", vbYesNo) = vbYes Then
      Me.Undo
    End If
  End If
End Sub


何かまだ必要な処理がある、あるいは状況の把握がずれていたら
補足してください。

投稿日時 - 2015-05-22 18:38:49

ANo.2

No1です。
肝心なことを忘れていました。

このマクロについて、

(1) どのような場面で。
(2) どのように使用。
(3) 取得した値をどこにもっていく。

の3点について説明があれば、と思います。

投稿日時 - 2015-05-18 16:49:33

補足

フォームの起動時にIDの連番のデータがあるので最初はマクロで値の代入でDMAXを使っていたのですが、表示はうまくいくのですが、IDの部分にカーソルを持っていき文字を打ち込むと入ってしまうのでロックも同時にかけたいと思っています。そうするとマクロだけではおぎなえず(知らないだけ?)VBAでの記述の仕方が分かればと思い質問させていただきました。

投稿日時 - 2015-05-22 10:36:38

ANo.1

質問ですが。

(1) DMAX関数を他の方法でしたい。
(2) マクロをVBAに変更したい。
(3) DMAXもマクロも他の方法にしたい。

いすれでしょうか?

また、質問のマクロで不自由をしていることがあるのでしょうか?

投稿日時 - 2015-05-18 16:07:09

あなたにオススメの質問