ACCESS標準モジュールでテーブルの主キー採番方法とは?

このQ&Aのポイント
  • ACCESS標準モジュールを使用してテーブルの主キーを採番する方法を教えてください。
  • フォームには2つの非連結のtxtboxがあり、(1)のコマンドボタンから(2)のフォームを開くときに、(2)のtxtboxに現在のコードを採番しています。
  • 標準モジュールで同様の処理を行うための良い方法を教えてください。
回答を見る
  • ベストアンサー

ACCESS標準モジュールでテーブルの主キー採番したい。

ACCESS標準モジュールでテーブルの主キー採番したい。 フォームが (1) [Fメインメニュー] (2) [F会社] "(1)(2)全て非連結のtxtbox" と2つあり、(1)のコマンドボタンから(2)のフォームを開く時に (2)のtxtboxに現在下記のコードで採番しています。 If DCount("*", "T会社") = 0 Then Forms("F会社").txt会社コード = "001" Else Forms("F会社").txt会社コード = _ Format(DMax("会社コード", "T会社") + 1, "000") End If これを標準モジュールで行いたいのですが、良い方法を教えて下さい。 宜しくお願いいたします。

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

  • ベストアンサー
回答No.2

単純に。。。。 (1)さっきの「新規会社CD取得」関数を、標準モジュールに張る (2)F会社フォームをデザインで開く →フォームのプロパティ →→読込時イベントをイベントプロシージャにする。 →→→[...]となっているボタンを押し、フォームのモジュールに以下のようにする Private Sub Form_Load() Me.txt会社コード.Value = 新規会社CD取得() End Sub あとはVBAの本や、過去の履歴から学んでください。 「プログラミング > その他(プログラミング) 」 のカテゴリではなく、 「プログラミング > Visual Basic」 の方にもVBAの質問がされるので、そちらを見ると勉強になりますよ。

KOUSUKE0409
質問者

お礼

了解しました! 視野を広げて勉強します。 又なにかありましたら宜しくお願いいたします! ありがとうございました。

その他の回答 (1)

回答No.1

'新規会社コードを返す関数 Public Function 新規会社CD取得() As String   Dim l_int現在の最大 As Long      l_int現在の最大 = CLng(Nz(DMax("会社コード", "T会社"), "0"))      新規会社CD取得 = Format$(l_int現在の最大 + 1, "000") End Function '新規会社レコードを作成するメソッド Public Sub 新規会社挿入()   Dim l_strSQL  As String      l_strSQL = l_strSQL & "INSERT INTO T会社(会社コード)" & vbCrLf   l_strSQL = l_strSQL & "VALUES ('" & 新規会社CD取得() & "')" & vbCrLf      CurrentDb.Execute l_strSQL End Sub

KOUSUKE0409
質問者

お礼

早急な返答ありがとうございます。 F会社のtxt会社コードに、この値を挿入したいのですが、挿入先をどこに記述すればよいですか? 素人ですみません・・・ アドバイス宜しくお願いいたします。

関連するQ&A

  • テーブルの主キー採番を標準モジュールで行いたい!

    テーブルの主キー採番を標準モジュールで行いたい! 現在下記のコードで各フォームより各テーブルに番号を振っているのですが、 1.新規登録ボタンクリック時 2.削除ボタンクリック時など 同じコードを記述しなければいけないのでFunctionプロシージャで各フォームのコマンドボタンのクリック時に各テーブルに採番したいと思うのですが良い方法がありましたらアドバイス宜しくお願いいたします。 If DCount("*", "T会社") = 0 Then Forms("F会社").txt会社コード = "001" Else Forms("F会社").txt会社コード = _ Format(DMax("会社コード", "T会社") + 1, "000") End If

  • AccessVBAの標準モジュール

    標準モジュール Public PSwMdel As Boolean Public Function PMsgDel() If (MsgBox("削除してよろしいですか?", 1 + 48 + 256, "削除処理確認メッセージ゛") = vbOK) Then PSwMdel = True Else PSwMdel = False End If End Function と作成し、削除前の確認処理を共通で使えるようにしています。 (メッセージボックスでOKを押すとPSwMdelがTrueになって削除モジュールが動くようにする) 普通は全く問題なくモジュール通りに動くのですがここ最近急に正しく動かないものが出てきました 普段フォーム内のモジュールで Call PMsgDel If PSwMdel = True Then  ~以下削除処理~ END IF としているのですがメッセージボックスでOKを押しても削除が実行されなかったのです おかしいと思いブレークポイントで確認するとOK押した後PMsgDel内ではPSwMdel = True フォームモジュールに戻るといきなりPSwMdel = Falseに変わってしまいIF後の削除処理を通っていませんでした また、PSwMdelをウォッチ式に入れて確認もしてみたのですがOKを押した後は ずっとTrueのまま変わっていませんでした 今まで何年も同じようなコードを使用していますがこんな事は一度も無かったので困惑しています どうすればOK押した後でも確実にPSwMdel = Trueを元のフォームモジュールに持って行けるのでしょうか?

  • エクセルマクロユーザーフォームのtxtbox値を標準モジュールに保持

    宜しくお願いします。 ユーザーフォームのtxtbox値を標準モジュールに渡してマクロを実行 るのですが、一度値をセットしたら20~30回変更が無いので標準モジュール のみショートカットで実行したいのですが値を保持してくれません。 何か良い方法は無いのでしょうか。? 'フォーム起動 Sub フォーム() UserForm1.Show End Sub +++++++++++++++++++++++++++ Private Sub CommandButton1_Click() Call モジュール '標準モジュールを呼ぶ Unload UserForm1 ++++++++++++++++++++++++++ モジュール内 Static ufX As Byte ufX = UserForm1.XXX.Text 'ufXの値を保持したい。

  • subプロシージャーは標準モジュールではなくフォームのコードを書く部分

    subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? エクセルにVBAでフォームを挿入し、 「Private Sub UserForm_Initialize()」 などのフォームのモジュールに、 Sub test() MsgBox "あああ" End Sub という標準モジュールに書くべきのsubプロシージャーを書いてもなにもエラーにならないし正常に動きます。 subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? それともエラーにならなくても標準モジュールに書いた方がいいですか?

  • 大文字入力を標準モジュールにしたい!

    大文字入力を標準モジュールにしたい! 現在、各txtBoxのキー入力時に下記コードで大文字入力をしていますが、 箇所が多いのでCall呼び出しでできないものかとやってみましたがうまく行きません・・・ Select Case KeyAscii Case 97 To 122 KeyAscii = KeyAscii - 32 Case Else End Select どうかお力添えを宜しくお願いいたします。

  • テーブルのデータをフォームに表示したい。

    テーブルのデータをフォームに表示したい。 Access2003で顧客管理のシステムを作成しています、 下記コードで検索フォームより顧客フォームを開き顧客テーブルのデータを渡していますが、 現在では顧客データを渡したいフォームが増えた為、各フォームにtxt顧客コードを設けて 標準モジュールで行った方が良いかと思うのですが、どの様にしたら良いか解りません。 良い方法がありましたらご教授よろしくお願いいたします。 Dim rs As ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "T顧客", cn, adOpenKeyset, adLockOptimistic rs.Find "顧客コード=" & Forms!F顧客検索!S顧客.Form.顧客コード Forms!F顧客!txt顧客コード = rs!顧客コード Forms!F顧客!cmb顧客区分 = rs!顧客区分 Forms!F顧客!txt顧客名 = rs!顧客名 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing

  • 標準モジュールが入っているワークブック

    Excel VBAです。 二つのワークブックを開いておいた状態で 両方のブック内のユーザーフォームを表示した状態にします。 この時、ある片方のワークブックを表示した状態でもう片方のユーザーフォームを使って 標準モジュールを実行したとします。 すると、当たり前ですが、エラーが出るか、間違った計算を行ってしまいます。 これを防ぐために、 if ActiveWorkbook.Name = xxxxx then といったものを用いる必要があります。 ワークブックの名称を書き換えるたびに このxxxxxのところも毎回書き換える必要があり、面倒なのですが、 実行した標準モジュールが入っているワークブック名を 返り値として返す関数ってありますか?

  • フォームのイベントを標準モジュールから呼び出す

    フォームのイベントを標準モジュールから呼び出す事は出来ないのでしょうか? ちなみにアクセスです。 例えば、 Private Sub Form_Load() MsgBox "test" End Sub というのはフォームを開いたときにしか発生しないですよね。 でもフォームを開いている状態でForm_Loadと全く同じ事をしてほしい時は どうすればいいですか? 標準モジュールで Sub a() Call Form_フォーム1.Form_Load End Sub としてみましたが、メソッドまたはデータ メンバが見つかりません。 (Error 461)になりました。 MsgBox "test" だけなら、 Sub a() MsgBox "test" End Sub にすりゃいいじゃん!って思われがちですが、 実際はForm_Loadイベントにはたくさんのコードが書かれています。 標準モジュールからイベントの呼び出しを教えてください。

  • 標準モジュールからフォームをコントロールしたい

    こんにちは。 標準モジュールからフォームのリストボックスに文字を追加したいんですが、うまくいきません。 まず、button1をクリックすると、共通モジュールのサブルーチンを呼び出します。そして引数"0"を渡すと、Form1のListBox1に"hello"を追加したいのです。 実行させると、エラーはでないのですが、追加されるはずの"hello"がListBox1に追加されません。 たぶん     frm1.ListBox1.Items.Add("hello") あるいは    Dim frm1 As New Form1() あたりの宣言の仕方がまずいのだと思うんですが... どなたか、ご教授よろしくお願いします。 ■共通モジュール Module Module1 Dim frm1 As New Form1() Sub PC(ByVal PCrecieve As String) If PCrecieve = "0" Then frm1.ListBox1.Items.Add("hello") End If End Sub End Module ■フォーム Public Class Form1 Inherits System.Windows.Forms.Form Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call PC("0") End Sub End Class

  • フォーム間でtxtbox値の渡しで教えてください!

    フォーム間でtxtbox値の渡しで教えてください! いつもお世話になっております。今回もいきずまり皆様のお力をお貸ください。 フォーム1からフォーム2を開く時にOpenArgsでtxtboxの値を複数渡し、フォーム2の開くときに分解しようと考えています。 下記コードでやってみたのですが、txtboxの値では無く"txtコード"と"txt性別"2つの文字列を渡しているようです。 txtboxの中の値を渡すにはどのようにしたらよいのか教えてください。 フォーム1のcmdクリック時 DoCmd.OpenForm "フォーム2", , , , acFormReadOnly, , "txtコード/txt性別" フォーム2の開く時 Dim n As Integer Dim strコード As String Dim str性別 As String n = InStr(Me.OpenArgs, "/") strコード = Left(Me.OpenArgs, n - 1) str性別 = Mid(Me.OpenArgs, n + 1) Me!txtコード = strコード Me!txt性別 = str性別 ・・・で結果は txtコードに"txtコード" txt性別に"txt性別"となってしまいます。アドバイス宜しくお願いいたします。

専門家に質問してみよう