フォームのテキストボックスに一番新しいテーブルの値を入れるには?

このQ&Aのポイント
  • 現在、VBA初心者の方が使用しているアクセス2000では、フォームのテキストボックスに一番新しいテーブルの値を入れる方法についての質問です。
  • 質問者様は、フォームのテキストボックスの初期値に、DMAX関数を使用してテーブルにある最新の(年月度)の値を入れているようです。
  • しかし、過去の(年月度)を入力した後も続けて入力を行う場合、DMAX関数で取得された最新の値が初期値として表示されます。質問者様は、前回入力した(年月度)を初期値にする方法について知りたいとのことです。
回答を見る
  • ベストアンサー

フォームのテキストボックスに一番新しいテーブルの値を入れるには?

こんにちは、VBA初心者です。アクセス2000を使用してます。 現在、フォームのテキストボックス(年月度)の初期値に、DMAXでテーブルにある(年月度)の値を入れてます。 過去の年月度を入れる時は、手入力で変更してるのですが、続けて入力したい場合、DMAXになってるので、初期値が一番新しい(年月度)になってしまいます。 これを、前回入力した(年月度)を初期値にするには、どうしたらいいでしょうか? Private Sub Form_Current() Dim dbs As Database Dim rst As Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("年月度マスター", dbOpenDynaset) If IsNull(Me![年月度]) Then Me![年月度] = DMax("年月度", "データ") End If If Me![データID] = 0 Then Me!データID = rst![マスターデータID] + 1 rst.Edit rst![マスターデータID] = Me!データID rst.Update rst.Close End If End Sub

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

  • ベストアンサー
  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.1

> 前回入力した(年月度)を初期値にするには、どうしたらいいでしょうか? DLast 関数を使えば、最後に入力したレコードを参照することができます。

makoc_chan
質問者

お礼

DLastですね!ありがとうございます。 先ほど、書き換えたら出来ました。

関連するQ&A

  • サブフォーム用のテーブルのデータで検索をしてマスタフォームに表示したい。

    Access2000での質問です。 T_マスタ(氏名ID・氏名)・T_サブ(氏名ID・データ年・データ種類)というテーブルから F_マスタ・F_サブというフォームを作成し、 F_マスタの中にサブフォームとしてF_サブを入れています。(氏名IDでリンク) F_検索というフォームを作成し、 データ年・データ種類で検索するようにしました。 この結果を、F_マスタで表示したいのですが、 F_マスタはT_マスタから作成されているため、検索結果が 希望するものではなくなってしまいます。 F_サブでみればきちんと検索されているのですが、 それでは氏名がみれないので。。。 このようなことはできるのでしょうか? F_検索の検索ボタンのコードです。 ------- Private Sub コマンド1_Click() Dim SQL As String Dim WhereCond As String Dim condNendo As String Dim condSyurui As String 'データ年 If Me!データ年.Value <> "" Then condNendo = "(T_サブ.データ年 like '*" & Me!データ年.Value & "*')" WhereCond = WhereCond & " AND " & condNendo End If '種類 If Me!データ種類.Value <> "" Then condSyurui = "(T_サブ.データ種類 like '*" & Me!データ種類.Value & "*')" WhereCond = WhereCond & " AND " & condSyurui End If WhereCond = Mid(WhereCond, 6) DoCmd.OpenForm "F_サブ", acNormal, , WhereCond End Sub ------- *上記の「F_サブ」を[F_マスタ」で開くようにしたいのです。 宜しくお願いします。

  • access リストボックスから文章を選び、テーブルに挿入

    > > テーブルとして、 > > テーブル:T_患者 > 患者ID 氏名 > 1 あいうえお > 2 かきくけこ > > テーブル:T_具体策 > 具体策ID 具体策 > 1 観察項目A > 2 観察項目B > 3 観察項目C > 4 観察項目D > 5 援助項目A > 6 援助項目B > > テーブル:T_看護計画 > 患者ID 具体策 > 1 観察項目A > 1 観察項目B > > とあったとします。 > > で、フォームとして > > フォーム:F_看護計画入力 ※メイン/サブフォーム形式 >  メインフォーム:患者情報 >  サブフォーム:看護計画の情報 > > フォーム:F_看護計画選択>>  リストボックス:具体策 >   値集合ソース:SELECT 具体策 FROM T_具体策 >   複数選択:標準  ※これで、複数選択ができるようになります。 >  コマンドボタン:追加 >   > とあり、F_看護計画入力のコマンドボタンで、F_看護計画選択に画面遷移し、リストボックスで > 選択した後に、コマンドボタン:追加をクリックすると、テーブル:T_看護計画にデータを追加します。 > > コマンドボタン:追加 のクリック時イベント > > Dim dbs As DAO.Database > Dim rst As DAO.Recordset > Dim varItm As Variant > > Set dbs = Application.CurrentDb > Set rst = dbs.OpenRecordset("テーブル12") > > For Each varItm In Me!具体策.ItemsSelected > rst.AddNew > rst!患者ID = Forms!F_看護計画入力!患者ID > rst!具体策 = Me!具体策.ItemData(varItm) > rst.Update > Next varItm > > rst.Close > dbs.Close > Set rst = dbs.OpenRecordset("テーブル12") のところで、エラーが出て、存在しませんとでます。これは何をいみしているのですか? とりあえず、つくってみました。そこで、("テーブル12")とはなんなんでしょうか?存在しませんとでます。

  • Access日付から月度入力

    現在Access2007を使用して取引管理の作成を勉強しているのですが、下記の内容を実現できず行き詰ってしまいました。 フォームのレコード移動時に Private Sub Form_Current() If Me.NewRecord = False Then Exit Sub Dim AutoID As String Dim MaxID As Variant AutoID = Format(Date, "yyyymmdd") MaxID = DMax("取引ID", "取引マスタ", "Left(取引ID,8)='" & AutoID & "'") If IsNull(MaxID) Then Me.取引ID.DefaultValue = "'" & AutoID & "01" & "'" Else Me.取引ID.DefaultValue = "'" & AutoID & Format(Right(MaxID, 2) + 1, "00") & "'" End If End Sub として”取引マスタ”テーブルの”取引ID”へ年月日8桁+連番2桁のデータ(2010111201等)が入力されています。これに併せて”月度”フィールドへ下記法則に乗っ取ってデータを入力させたいのですが、実現できずにいます。 ”取引ID”の年月日の下4桁 0115~0214 → 1 0215~0314 → 2 0315~0414 → 3 0415~0514 → 4 0515~0614 → 5 0615~0714 → 6 0715~0814 → 7 0815~0914 → 8 0915~1014 → 9 1015~1114 → 10 1115~1214 → 11 1215~0114 → 12 上記のように実現するには、どのようにすればよいのでしょうか? ご指南宜しくお願い致します。

  • yymmddを用いた管理番号のエラーについて

    以前、こちらでfuuten_no_nekoさまに大変お世話になったものです。 以前のIDがわからなくなり、再登録しました。 まえに、helpaccessのIDで質問させていただいた件について、困ったことが出てきたので、 再度、こちらでお助けいただければと思い質問させていただきました。 以前、こちらで教えていただき、Accessで、管理番号追加というボタンを作成し、そのボタンを押すと、 yymmddプラス2ケタの通し番号が自動的に払いだされるようにしておりました。 たとえば、今日が 2009年12月25日なら、09122501から順に、09122502、09122503とボタンをクリックする度に払い だされるようになっておりました。 ただ、2010年に変わったとたん、たとえば、今日が2010年1月5日なら、一度目のクリックでは、 10010501と払いだされるのですが、2度目のクリックで桁数が増え、010010502と、最初に0が ついてしまい、実行時エラー3022となります。 デバックをクリックすると、下記VBAの←部分が黄色く反転しています。 rst.Fields("管理番号").Value = MngNo rst.Fields("刃具ID").Value = 刃具ID rst.Fields("顧客ID").Value = 顧客ID rst.Fields("登録日").Value = Date rst.Update   ←←←←←←←←←←←←←<この部分が黄色く反転している> 2010年になったことが原因なのでしょうか。 恐れ入りますが、従来通り、8ケタで表示できる方法がおわかりであればどなたかどうぞ教えてくださいませ。 なにとぞ、よろしくお願い申し上げます。 管理番号追加ボタンのVBA ******************************************************************************************** Private Sub コマンド16_Click() Dim dbs As Database Dim stDocName As String Dim rst As DAO.Recordset Dim 刃具ID As Integer Dim 顧客ID As Integer Set rst = Me.Recordset If rst.RecordCount > 0 Then rst.MoveLast End If 刃具ID = Form_管理番号フォーム.刃具ID 顧客ID = Form_管理番号フォーム.顧客ID If rst.Fields("登録日").Value = Date Then MngNo = rst.Fields("管理番号").Value + 1 MngNo = "0" & MngNo Else MngNo = Format(Date, "yymmdd") & "01" End If Set dbs = CurrentDb Set rst = dbs.OpenRecordset("管理番号テーブル") rst.AddNew rst.Fields("管理番号").Value = MngNo rst.Fields("刃具ID").Value = 刃具ID rst.Fields("顧客ID").Value = 顧客ID rst.Fields("登録日").Value = Date rst.Update On Error GoTo errorhandler16 Set rst = Me.Recordset With rst .Requery .MoveLast .MovePrevious .MovePrevious .MovePrevious .MovePrevious End With errorhandler16: MsgBox "管理Noを追加しました!" & Chr(13) _ & "「顧客名」を確認のうえ、「再研磨記録フォーム」にて" & Chr(13) _ & "受付日の登録手続きをしてください。", vbOKOnly + vbInformation, "メッセージ" Me.Requery End Sub ********************************************************************************************

  • Access2007でフォームのリストボックスから

    Access2007でフォームのリストボックスから選択したフィールドをクエリしたいのですが どうもうまくいきません。 テーブル数は10個くらいあり、全テーブルのフィールド数は100超あります。 テーブル1に一意のIDがあり、それに対して他のテーブルとリレーションシップで繋いでいます。 1.全テーブルのフィールドリストを作るのに「全テーブルクエリ」を作成 (テーブル1.IDのLEFT JOINでくっつけています。) 2.全テーブルクエリのコピーを作成し、リストから選択したフィールドのみを表示 3.選択した全フィールドのデータにNull以外のデータのみを表示するようフィルターをかける 以下、作成したVBAですが、実行すると、3.がうまく動いてくれず、Null値も表示してしまいます。 しかし、エラーは出ません。 フィルター適用になっていますが、最後のフィールドにフィルターマークが出ているだけで 実際はかかっていません。。 ========== Option Compare Database Option Explicit Dim dbs As Database Dim qdf As QueryDef Dim IDX As Long 'リストのインデックス用 Dim i As Integer Dim F_name() As String Dim strDate As String '現時刻取得 Dim Path As String Public Sub 抽出_Click() Set dbs = Application.CurrentDb strDate = Format(Now, "_mmdd_hh:mm") If Me.リスト.ItemsSelected.Count = 0 Then MsgBox "抽出する項目を選択してください。" Exit Sub Else Application.DoCmd.CopyObject , "抽出結果" & strDate, acQuery, "全テーブルクエリ" Set qdf = dbs.QueryDefs("抽出結果" & strDate) For IDX = 1 To Me.リスト.ListCount Let qdf.Fields(Me.リスト.ItemData(IDX - 1)) _ .Properties("ColumnHidden").Value = Not (Me.リスト.Selected(IDX - 1)) Next End If DoCmd.OpenQuery "抽出結果" & strDate ReDim F_name(qdf.Fields.Count) For i = 1 To qdf.Fields.Count F_name(i - 1) = qdf.Fields(i - 1).Name If qdf.Fields(F_name(i - 1)).Properties("ColumnHidden").Value = True Then '項目が非表示の場合何もしない Else       'Null以外のデータを抽出 DoCmd.ApplyFilter "抽出結果" & strDate, "('" & F_name(i - 1) & "') Is Not Null" End If Next i dbs.Close Set qdf = Nothing Set dbs = Nothing End Sub ============== ですが、違うやり方があるのではないか・・と1週間くらい悩んでおります。 やりたいことは、 (1)まず100個以上あるフィールドをフォームのフィールドリストから選定。 (2)選定したフィールドのデータにNullまたは長さ0の値があればその行ごと非表示にする。 この2つです。 とりかかってから1カ月以上経ちます。。 お知恵をお貸しください!!!

  • Access2007 サブフォームのレコードを一括印刷する方法

    お世話になっております。 サブフォームは帳票型になっており、下記で表示されている全レコードのチェックが入ります。 これと平行して、各レコードを印刷したいのですが、カーソルがあるレコードのみがレコードの数だけ印刷されてしまいます。 これを各レコードごとに印刷したいと思います。 Dim dbs As Database Dim rst As Recordset Dim strSQL As String Set dbs = CurrentDb Set rst = Me.RecordsetClone With rst If .RecordCount > 0 Then .MoveFirst Do Until .EOF .Edit !チェック = True DoCmd.OpenReport "印刷", acNormal, , "コード=" & Me.コード .Update .MoveNext Loop End If .Close End With ご教授いただければ幸いです。よろしくお願いいたします。

  • Access2007 データ型エラーについて

    お世話になっております。 下記のVBAでコードを数値型からテキスト型に変更したところ、「抽出条件でデータ型が一致しません。」というエラーが出ました。 デバッグをクリックすると、dbs.Execute strSQLの部分が黄色に反転しています。 VBAはあまり詳しくありませんので、エラーが出なくなる方法を教えていただければ助かります。 よろしくお願いいたします。 Private Sub 在庫差引_Click() Dim dbs As Database Dim rst As Recordset Dim strSQL As String Set dbs = CurrentDb Set rst = Me!サブフォーム.Form.RecordsetClone With rst .MoveFirst Do Until .EOF strSQL = "UPDATE マスター " & _ "SET 在庫数 = NZ(在庫数) - " & Nz(!数量, 0) & " " & _ "WHERE コード = " & !コード dbs.Execute strSQL .MoveNext Loop .Close End With End Sub

  • アクセス テキストボックスに値を返す

    こんにちは アクセス2000で管理表を作っています。 工事マスタ 工事ID 工事名 顧客ID 担当ID 顧客マスタ 顧客ID 顧客名 〒 現住所 電話 ファックス メールアドレス (詳細は略) クエリA SELECT 工事マスタ.工事ID, 工事マスタ.工事名, 工事マスタ.顧客ID, 工事マスタ.担当ID, 工事マスタ.顧客担当ID FROM 工事マスタ; 上記のようなテーブル構成とクエリで フォームAを作成しています (コントロールソースはクエリA) フォームAに 顧客IDのコンボボックス顧客コンボを作り それを選択すると詳細が テキストボックス「〒TB」「現住所TB」「電話番号TB」「FAXTB」「メールアドレスTB」に反映するという形をとっています Private Sub 顧客コンボ_AfterUpdate() Me!顧客担当コンボ.Requery '内容反映ここから Me.〒TB = Me.顧客コンボ.Column(2) Me.現住所TB = Me.顧客コンボ.Column(3) Me.電話番号TB = Me.顧客コンボ.Column(4) Me.FAXTB = Me.顧客コンボ.Column(5) Me.メールアドレスTB = Me.顧客コンボ.Column(6) '反映ここまで End Sub うまくいっているように見えたのですが 全部のレコードが変更になっていることに 先程気づきました(T_T;) 調べてみると 非連結だから当たり前ということなのですが これを、各々のレコードで反映できる方法はないでしょうか?

  • 検索結果を非連結のテキストボックスに表示させるには

    accessでシステム開発しています。初心者です。 検索結果を非連結のテキストボックスに表示させる方法を教えてください。 条件(1) フォームのレコードはどのテーブルとも紐づいていない 条件(2) 2つのテーブルから1つの検索ボタンで検索できるようにしたい テーブルA;案件マスタ テーブルB:リソースマスタ ・検索テキストボックス(1つ) ・検索ボタン(1つ) 条件(3) 案件ID、リソースIDはともに数値型です。 検索結果表示テキストボックス(非連結) ・案件IDテキストボックス:案件マスタより検索した案件IDを表示する ・リソースIDテキストボックス:リソースマスタより検索したリソースIDを表示する 下記のように考えていますが ・非連結のテキストボックスに検索結果を表示させる ・1つの検索ボタンで2つのテーブルから検索ができるようにする 方法がわかりません。 どのようなコードを追記したらいいのか教えていただけないでしょうか。 よろしくお願いいたします。 Private Sub btn検索ID_Click() Dim strFilter As String Me![案件マスタ].SetFocus If Me!案件IDテキスト = Me![案件マスタ]![案件ID] Then strFilter = " AND 案件ID= " & Me!案件IDテキスト End If If Me!テキストリソースID = Me![リソースマスタ]![リソースID] Then strFilter = strFilter & " AND リソースID= " & Me!リソースIDテキスト End If ’↓?いらないかも.. 'Forms!ID検索.Filter = Mid(strFilter, 6) Forms!ID検索.FilterOn = True Me.案件IDテキストボックス= Null Me.リソースIDテキストボックス = Null

  • ユーザーフォームのテキストボックスでVLOOK

    ユーザーフォームのテキストボックスで、ご教示お願いいたします。 現在、以下のようなコードこちらで教えていただきセルに入力をしております。 上から順番に入力した際、テキストボックス5に値を入たら、 listのシートから該当するもの(項目は20個)をテキストボックス6に表示させたいと思っております。 ■現在のコード '// Private Sub CommandButton1_Click() Dim LastRow As Long 'ここはキャメル形式やパスカル形式にします/大文字は定数です。 Dim i As Long '/テキストボックスに値があるか調べる For i = 1 To 7 Next i '/セルに書き込み With Worksheets("Sheet1") LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 For i = 1 To 7 .Cells(LastRow, i).Value = Me.Controls("TextBox" & i).Value Next End With '/TextBox1-7をクリア If MsgBox("テキストボックスを空にしてよろしいですか?", vbQuestion + vbYesNo) = vbYes Then For i = 1 To 7 Me.Controls("TextBox" & i).Value = "" Next i End If 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub ■付け足したいコード Private Sub textbox5_change() Dim temp, x temp = Me.textBox5.Value If IsNumeric(temp) Then temp = Val(temp) x = Application.VLookUp(temp, Sheets("list").Range("a1:b20"), 2, False) If Not IsError(x) Then Me.TextBox6.Value = x Else MsgBox Me.TextBox5.Value & " はリストにありません" End If End Sub 【質問内容】 付け足したいコードは上記の通りですが、どのように付け足せばいいのかが分からず、 困っております。 度々で申し訳ありませんが、テキストボックス5の値を見て、 テキストボックス6に表示させるやり方をご教示お願いいたします。

専門家に質問してみよう