お世話様です。ネットの記事を読んで作成しましたが、VBA勉強不足のために途中で止まりました。
以下、2つのコードです。ご教示をよろしくお願いします。
■DAOでエクスポートをしようとした
Private Sub コマンド53_Click()
Dim SQL As String
Dim dbs As DAO.Database
Dim qdf1 As DAO.QueryDef
Dim qdf2 As DAO.QueryDef
Dim qdf3 As DAO.QueryDef
Dim rst1 As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim rst3 As DAO.Recordset
Dim xls As Object
Dim strSaveBookPath As String
'テンプレートの保存先フォルダ
Const cstrTemplateDir As String = "\SV30**\metal2*課\HDD\リフォーム見積りDB\見積書\"
Const cstrTemplateBook As String = "RF見積書.xlsx" 'テンプレートのファイル名
Const cstrSaveBookDir As String = "\SV30\metal2***課\HDD\リフォーム見積りDB\見積書\" 'データが代入されたファイルの保存先フォルダ
Set dbs = CurrentDb 'データ元のクエリを開く
Set qdf1 = dbs.QueryDefs("Q_見積明細1_P") 'クエリのオブジェクトを取得します
With qdf1
'クエリのオブジェクトに対して設定を行います。”抽出する○○ID”などがパラメータ名です
.Parameters("見積りNo").Value = Forms!F_見積!見積りNo
Set rst1 = .OpenRecordset '設定後のクエリオブジェクトを元にRecordsetを開きます
End With
Set xls = CreateObject("Excel.Application") 'Excelオブジェクトを生成
With xls
.ScreenUpdating = False '画面の再描画を抑止
.Workbooks.Open cstrTemplateDir & cstrTemplateBook 'テンプレートファイルを開く
.Workbooks(cstrTemplateBook).WorkSheets("Sheet1").Copy 'ワークシートをコピー
.DisplayAlerts = False 'テンプレートファイルを閉じる
.Workbooks(cstrTemplateBook).Save
.Workbooks(cstrTemplateBook).Close
.DisplayAlerts = True
.Cells(2, 1).CopyFromRecordset rst1
Set qdf2 = dbs.QueryDefs("Q_明細2_R")
With qdf2
.Parameters("見積りNO") = Forms!F_見積!見積りNo
Set rst2 = .OpenRecordset
End With
Set xls = CreateObject("Excel.Application")
With xls
「実際の式」はコピペですか?
Dsum("見積金額","qry見積","見積番号 = '" & [見積番号] & "' and (特殊行 = 3 Or 特殊行 = 4 Or 特殊行 = 5 Or 特殊行 = 6 Or 特殊行 is null)”)
Dsum("見積金額","qry見積","見積番号 = '" & [見積番号] & "' and (特殊行 = 3 Or 特殊行 = 4 Or 特殊行 = 5 Or 特殊行 = 6 Or 特殊行 is null)”)
↓
Dsum("見積金額","qry見積","見積番号 = '" & [見積番号] & "' and (特殊行 = 3 Or 特殊行 = 4 Or 特殊行 = 5 Or 特殊行 = 6 Or 特殊行 is null)")
Dim i As Long
Forms![F_test2]![txtテキスト_1] = ""
For i = 1 to 5
Forms![F_test2]![txtテキスト_1] = Forms![F_test2]![txtテキスト_1] & Me.Controls("txt子テキスト_" & i) & vbNewLine
Next
Dim i As Long
Forms![F_test2]![txtテキスト_1] = Me.txt子テキスト_1 & vbNewLine
For i = 2 to 5
Forms![F_test2]![txtテキスト_1] = Forms![F_test2]![txtテキスト_1] & Me.Controls("txt子テキスト_" & i) & vbNewLine
Next
Dim i As Long
Dim memo As String
memo = Me.txt子テキスト_1 & vbNewLine
For i = 2 to 5
memo = memo & Me.Controls("txt子テキスト_" & i) & vbNewLine
Next
Forms![F_test2]![txtテキスト_1] = memo
無駄な記述はしないというのがプログラミングの基本ではありますが、
memo = ""
memo = memo & txt子テキスト_1 & vbNewLine '//ここの「= memo」のmemoは無駄だけど
memo = memo & txt子テキスト_2 & vbNewLine
'//このような記述は冗長に思える
memo = txt子テキスト_1 & vbNewLine
For i = 2 To 5
memo = memo & Me.Controls("txt子テキスト_") & i & vbNewLine
Next
'//無駄な処理を含むコードでもこっちのほうが見やすい
memo = ""
For i = 1 To 5
memo = memo & Me.Controls("txt子テキスト_") & i & vbNewLine
Next
Private Sub グループヘッダー1_Format(Cancel As Integer, FormatCount As Integer)
If Me.Pages = 0 Then
Me.txt索引 = Me.txt索引 & Left(薬効87分類 & String(12, "・"), 12) & Format(Me.Page, "@@@") & vbCrLf
End If
End Sub
Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
Me.Page = 0
End Sub
2年程前、医薬品集の索引作成で大変お世話になりました。今回、この医薬品集に大分類(薬効87分類)、中分類(拡張薬効分類)を設けてレポートも作成し直した為、分類ごと(薬効87分類)の索引も欲しいと思い、hateneさんが提示されていた『目次(索引)ページを自動作成』を元にコピペしてみたのですが、テキストボックスに何もはきださない現象となっています。分からないなりに試行錯誤しましたが、どこが間違っているのかさっぱり分かりません。ご教示お願い致します。
Option Compare Database
Option Explicit
Private Sub グループヘッダー1_Format(Cancel As Integer, FormatCount As Integer)
If Me.Pages = 0 Then
Me.txt索引 = Me.txt索引 & Left(薬効87分類 & String(12, "・"), 12) & Format(Me.Page, "@@@") & vbCrLf
End If
End Sub
Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
Me.Page = 0
End Sub
Sub 転記()
Dim memo As String
memo = ""
For i = 1 To 5
memo = memo & Me.Controls("txt子テキスト_" & i) & vbNewLine
Next i
Forms![F_test2]![txtテキスト_1] = memo
End Sub
Public Sub test()
Dim excelBookName As String
Dim Sheets As String
Dim strRange As String
excelBookName = "Book1.xlsm"
Sheets = "data,aaa,bbb,ccc" 'カンマ区切りで対象シート名を記述
strRange = "!A7:I"
Dim myDir As String, excelPath As String
myDir = Application.CurrentProject.Path 'データベースファイルのパス
excelPath = myDir & "\" & excelBookName
Dim sheet
For Each sheet In Split(Sheets, ",")
DoCmd.TransferSpreadsheet acImport, _
acSpreadsheetTypeExcel12Xml, "T_2022", excelPath, , sheet & strRange
Next
End Sub
Sub 転記()
Dim memo As String
memo = ""
For i = 1 To 5
memo = memo & Me.Controls("txt子テキスト_" & i) & vbNewLine
Forms![F_test2]![txtテキスト_1] = memo
Next i
End Sub
■続きです
.ScreenUpdating = False
.Workbooks.Open cstrTemplateDir & cstrTemplateBook
.Workbooks(cstrTemplateBook).WorkSheets("Sheet2").Copy
.DisplayAlerts = False
.Workbooks(cstrTemplateBook).Save
.Workbooks(cstrTemplateBook).Close
.DisplayAlerts = True
.Cells(2, 1).CopyFromRecordset rst2
Set qdf3 = dbs.QueryDefs("Q_明細3_R")
With qdf3
.Parameters("見積りNO") = Forms!F見積!見積りNo
Set rst3 = .OpenRecordset
End With
Set xls = CreateObject("Excel.Application")
With xls
.ScreenUpdating = False
.Workbooks.Open cstrTemplateDir & cstrTemplateBook
.Workbooks(cstrTemplateBook).WorkSheets("Sheet3").Copy
.DisplayAlerts = False
.Workbooks(cstrTemplateBook).Save
.Workbooks(cstrTemplateBook).Close
.DisplayAlerts = True
.Cells(2, 1).CopyFromRecordset rst3
rst1.Close
rst2.Close
rst3.Close
'保存するファイル名のフルパスを組み立て
strSaveBookPath = cstrSaveBookDir & "見積書" & Format$(Forms!F_見積!物件名) & ".xlsx"
On Error Resume Next '同名ファイルを強制削除
Kill strSaveBookPath
On Error GoTo 0
.ScreenUpdating = True '画面の再描画を元に戻す
.ActiveWorkbook.SaveAs strSaveBookPath 'データを代入したブックを保存
MsgBox "データを保存しました"
.Quit 'Excelを終了
End With
Set xls = Nothing
End With
End With
End Sub
お世話様です。ネットの記事を読んで作成しましたが、VBA勉強不足のために途中で止まりました。
以下、2つのコードです。ご教示をよろしくお願いします。
■DAOでエクスポートをしようとした
Private Sub コマンド53_Click()
Dim SQL As String
Dim dbs As DAO.Database
Dim qdf1 As DAO.QueryDef
Dim qdf2 As DAO.QueryDef
Dim qdf3 As DAO.QueryDef
Dim rst1 As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim rst3 As DAO.Recordset
Dim xls As Object
Dim strSaveBookPath As String
'テンプレートの保存先フォルダ
Const cstrTemplateDir As String = "\SV30**\metal2*課\HDD\リフォーム見積りDB\見積書\"
Const cstrTemplateBook As String = "RF見積書.xlsx" 'テンプレートのファイル名
Const cstrSaveBookDir As String = "\SV30\metal2***課\HDD\リフォーム見積りDB\見積書\" 'データが代入されたファイルの保存先フォルダ
Set dbs = CurrentDb 'データ元のクエリを開く
Set qdf1 = dbs.QueryDefs("Q_見積明細1_P") 'クエリのオブジェクトを取得します
With qdf1
'クエリのオブジェクトに対して設定を行います。”抽出する○○ID”などがパラメータ名です
.Parameters("見積りNo").Value = Forms!F_見積!見積りNo
Set rst1 = .OpenRecordset '設定後のクエリオブジェクトを元にRecordsetを開きます
End With
Set xls = CreateObject("Excel.Application") 'Excelオブジェクトを生成
With xls
.ScreenUpdating = False '画面の再描画を抑止
.Workbooks.Open cstrTemplateDir & cstrTemplateBook 'テンプレートファイルを開く
.Workbooks(cstrTemplateBook).WorkSheets("Sheet1").Copy 'ワークシートをコピー
.DisplayAlerts = False 'テンプレートファイルを閉じる
.Workbooks(cstrTemplateBook).Save
.Workbooks(cstrTemplateBook).Close
.DisplayAlerts = True
.Cells(2, 1).CopyFromRecordset rst1
Set qdf2 = dbs.QueryDefs("Q_明細2_R")
With qdf2
.Parameters("見積りNO") = Forms!F_見積!見積りNo
Set rst2 = .OpenRecordset
End With
Set xls = CreateObject("Excel.Application")
With xls
■次に続きます
お世話様です。書き込みを有難うございます。
既存のテンプレートで名前を物件名を入れ込んで保存しようとしていました。(過去にこれは作成しています)
エクスポートはシートを指定して(クエリ毎にシート1・2・3と指定している)いますが、新しく書き込みをするようで、初めのシート1・2は消えて3だけがエクスポートされます。
エクセルファイルは新規に作成したものにエクスポートするのでしょうか。
それとも既存のテンプレートがあり、そこに出力するということでしょうか。
DoCmd.TransferSpreadsheetで既存のエクセルファイルにエクスポートすると、クエリはそれぞれ別々のシートに出力されると思いますが、そうはならないですか。
まずは、現状のコードを提示してもらえますか。
お世話様です。早速の書き込みを有難うございます。
クエリはテーブルを元に作成しており、それぞれT_明細1、T_明細2、T_明細3のテーブルとなっていて、3つのテーブルは明細NOフィールドをオートナンバーとして、テキストフィールドと数値や計算式のフィールドは数値型となっています。
テーブルをそのままクエリにしていますが、基本となるT_見積物件情報の見積りNOをオートナンバーとして、3つのクエリはQ_明細1、Q_明細2、Q_明細3で、見積りNOと明細NOにテキストと数値フィールドで構成されています。
Q_明細1のみは、T_見積物件情報とT_明細1の2つのテーブルとしています。
最大で3枚の見積書になりますが、フォームで親をT_見積物件情報、子を明細1~3で各フィールドをエクセルのような配置にしており、明細1は約170(7列×24行)フィールド明細2と3は約200(7列×28行)フィールドづつになっています。
T_見積物件情報は殆んどがテキスト型で、物件名・誦所・担当者に日付などが有ります。
Q_明細1・2・3は見積り書のNO・品名・数量・単位・単価・金額・備考(7列)で、T_製品マスタから品名をコンボボックスで選択し、数量を入れると単位・単価・金額が入るようになっています。
エクセルに出力するには上記と同じ形式の帳票で考えていますが、1物件づつの見積り書としてエクスポートするために、フォームの見積りNOでフィルターを掛けて、各クエリのデータをエクセルのシート1・2・3へ1行づつ出力して、それを元にしてもう一つのシートへ見積書として統合するよう、エクセル側でVBAを組んでデータを振り分けたいと考えています。
以上がデータベースの概要ですが、不足が有りましたらご指摘ください。
お手数を掛けますが、ご教示をよろしくお願いします。
回答するには、
見積書のクエリのそれぞれのフィールド構成、
エクセルへ出力する場合のレイアウト、
の情報が必要かと思います。
できれば、それぞれのクエリのデータ例、
それをエクセルに出力したときのデータレイアウト、
があればより回答しやすいです。
hiroton様
ご返答ありがとうございます。
ご指摘の箇所には全く気づきませんでした!
そんなところが変になっていたとは。
コピペです。
元々、Accessで作った式をLibreOffice Writerにコピーして一部書き換えしたので、そこで"が”になってしまったようです。
助かりました。
さすがです。
「実際の式」はコピペですか?
Dsum("見積金額","qry見積","見積番号 = '" & [見積番号] & "' and (特殊行 = 3 Or 特殊行 = 4 Or 特殊行 = 5 Or 特殊行 = 6 Or 特殊行 is null)”)
hatena様
hiroton様
ありがとうございます。また、返答遅くなり申し訳ありません。
他の部分での原因がわかり解決しました。
ユニオンクエリで結合した際にデーター型が数値型からテキスト型に変換してました。
元々型の違うテーブルでフィールド名だけをそろえたテーブルだったので…
再度SQLで数値型に変換したところ合計値が表示しました。
お騒がせしてすみません。まだまだACCESS初心者なので今後もよろしくお願いします。
ありがとうございました。
いちおう
他のフィールド(計算)でエラーがあると正常なはずのフィールドでもエラーを表示する
という謎の現象が発生することはあります
最小構成でフォームを作成して
=Sum([フィールド名])
でエラーが出ないか見てみるといいと思いますNz関数はNull値を0に変換する関数ですので、それでもエラーになるということは、フィールドにNull値が含まれているのが原因ではないということになります。
現状のユニオンクエリのSQLを提示してもらえますか。
hatena様ありがとうございます
=Sum(Nz([フィールド名], 0))
でも「#エラー」になってしまいます…
他に部分での原因としては2つのテーブルをユニオンクエリで1つの結合テーブルにしてます
フォームへのデータは結合テーブルのフィールドになります。
そのフィールドの合計値をと考えてます。
ACCESS初心者なので上記のわかりにくい説明ですみません。
Sum関数は空白(Null値)があってもエラーなく計算してくれるはずですが。
他の部分に原因がありそうです。
そのフィールドは演算フィールドだったりしませんか。
もし、そうならその式を提示してください。
いちおう、下記の式にした場合はどうなりますか。
独立した内容で新たに追加したいということであれば、改めて質問を立てたほうがいいかもしれません。既存環境に追加したいということでこの質問のURL(https://zawazawa.jp/ms-access/topic/564 )
を記載するといいと思います
今ちょっと腰を据えて手を付けられそうにないので確認と方針を挙げておきます
ひとまず分類のみの索引が出力されるか試してみる
→レポートを複製して、コードをいったん全て削除して、分類用索引のコードのみでテストする
分類の索引は出力順でいいですか?
→出力順を弄らないならコードを弄るところもほぼないと思います。(コントロール名くらい)
レポートの最初(レポートヘッダー)に出力するか最後(レポートフッター)に出力するかでコードが変わってくるので使うコードをよく見てください。また、これに合わせてコントロール(テキストボックス)の配置場所も重要かもしれません
コントロール名が正しく指定できているか?
→コントロール名
×:コントロールソースプロパティ
〇:名前プロパティ
です。
また、掲示板上のやり取りがやりやすいように具体的な名前を付けておくといいと思います
既存のコードがこの質問のコピペなら「
txt目次N
(N=0,1,2)」となっていると思います。(改めて見直したらソートしてるので「目次」じゃないですね)分かりやすいように既存のテキストボックスは
txt目次N
→txt薬品名索引N
として、今回追加する様のはtxt分類索引
とするなど分類索引も段組みにしたいのなら、その情報も必要ですね
分類だけで索引がうまく作成出来たら元のレポートと組み合わせます
既存の索引の前にということなので、レポートフッターの先頭に「txt分類索引テキストボックス」と「改ページコントロール」を挿入すればいいのでは?と思っていますがテストできていません
hirotonさんの目にとまり良かったです。薬品名を五十音順とした索引はそのままで、分類とその
ページの索引を新たに追加したいです。五十音順の索引コードに何かあっては困るので、分類索引のコードは別で作成していました。配置は五十音順索引の前にしたいです。宜しくお願い致します。
ループ処理はループ内のコードをそのまま繰り返します
hatenaさんも指摘していることですが、ループの最後で上書きするような処理はループ内に含める必要は薄いです。質問のコードも
は
Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 5)
と何ら変わらないので意味のない(≒ダメな)コードです。hirotonの伝わらない回答もそんな感じのことを言っていました
ループ処理を使うときは「イニシャル部」「メイン部」「エンド部」(前処理、メイン処理、後処理)を考えるようにすると良いです
「最終的にやりたいこと」と「ループ処理させたら楽そうな部分」を明確にすることですね
以下、いくつか同様のことを成すコードを記述してみます
無駄な記述はしないというのがプログラミングの基本ではありますが、
「目的が達成されない」や「エラーが出る」などの不正解は簡単な話ですが、善し悪しを語るのはなかなかに難しい話ですね
なにやら見覚えのあるタイトルが、と覗いてみたら懐かしい記憶が少しだけよみがえりました(ほとんど忘れてます)
今までの(薬品名を五十音ソートした)索引とはどういう関係ですか?
・削除して新たに分類ごとの索引を配置
・残したまま新たに分類ごとの索引を配置(→配置位置は?既存の索引の前? or 後 or その他)
・複合した索引を設置、薬品名は分類のグループごとに分割
・その他
りんごさん
社内では、製品を口座番号で管理しております。
また、当該DBは社内基幹システムの口座番号と紐付けされています。
口座管理は既成事実ですので、おそらく問題は起こらないのでは?と考えております。
ありがとうございます!
hatena様
ご丁寧にありがとうございました。
そうしたいのであれば、責任を負わなくて済むように立ち回りましょう。会社から口座番号を主キーにするように命令されていたので、その前提のもとで設計を開始したんだ。諸々の選択肢を検討したんだけれどね。根回し・既成事実化しておかないと詰みますな。
リンゴさん
派生・親子・参照それぞれの関係性について
ご提案いただきありがとうございます。
このDBは、口座番号で検索する既存用紙をDB化したものなので、
口座番号を主キーにした方が、不特定多数の者が使用することを想定しても
移行しやすいと思い設計しました。ご提案の内容も、一度検討したいと思います。
toneさん
列名の件、設計段階で「どうかな?」なんて思いながらもハイフンを使用しました。
改名したいと思います。ありがとうございます!
hatenaさん
ご指摘ありがとうございます。
ちょうど一年前に、こちらで非連結フォームの質問をした際に、同じようなご指摘を頂きました。
前回のDBでは、最大10人の者が使用する想定でしたので、よく目にする「ユーザー用の画面は
非連結で、予期せぬ更新を排除」というのを実践したく、こちらで助けていただきました。
今回のDBでは、データ編集をするのは最大3人で、かつ同時にデータ編集は行われないので、
ご指摘の通り、連結で設計してもよいかもしれませんね!
format で自己解決しました。
2年程前、医薬品集の索引作成で大変お世話になりました。今回、この医薬品集に大分類(薬効87分類)、中分類(拡張薬効分類)を設けてレポートも作成し直した為、分類ごと(薬効87分類)の索引も欲しいと思い、hateneさんが提示されていた『目次(索引)ページを自動作成』を元にコピペしてみたのですが、テキストボックスに何もはきださない現象となっています。分からないなりに試行錯誤しましたが、どこが間違っているのかさっぱり分かりません。ご教示お願い致します。
Option Compare Database
Option Explicit
Private Sub グループヘッダー1_Format(Cancel As Integer, FormatCount As Integer)
If Me.Pages = 0 Then
Me.txt索引 = Me.txt索引 & Left(薬効87分類 & String(12, "・"), 12) & Format(Me.Page, "@@@") & vbCrLf
End If
End Sub
Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
Me.Page = 0
End Sub
↑すみません投稿し直します。
2年程前、医薬品集の索引作成で大変お世話になりました。今回、この医薬品集に大分類(薬効87分類)、中分類(拡張薬効分類)を設けてレポートも作成し直した為、分類ごと(薬効87分類)の索引も欲しいと思い、hateneさんが提示されていた『目次(索引)ページを自動作成』を元にコピペしてみたのですが、テキストボックスに何もはきださない現象となっています。分からないなりに試行錯誤しましたが、どこが間違っているのかさっぱり分かりません。ご教示お願い致します。
Option Compare Database
Option Explicit
Private Sub グループヘッダー1_Format(Cancel As Integer, FormatCount As Integer)
If Me.Pages = 0 Then
Me.txt索引 = Me.txt索引 & Left(薬効87分類 & String(12, "・"), 12) & Format(Me.Page, "@@@") & vbCrLf
End If
End Sub
Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
Me.Page = 0
End Sub
そのコードでも結果は同じになりますが、memoをテキストボックスの代入するのは最後に1回のみでいいので、ループ内で繰り返すのは無駄ですね。
早速のご指導ありがとうございます。小生、配列は全く理解(?)できていません。いろいろな達人からの助言・指導を受けて応用しながら使っています。助言いただいた構文、大切に使わせていただきます。改めておれいもうしあげます。
こんな感じでどうですか。
早速のご指導、ありがとうございます。
シート数分記述 はできたのですが、「シート名を配列に格納して、Fprループで繰り返す」方法ができません。
シート名は固定されています。上記の構文を教授お願いできませんか?
よろしくお願いいたします。
例えば、data、aaa、bbb の固定なら、
とシート数分記述すればいいでしょう。
シート数が多い場合は、シート名を配列に格納して、Fprループで繰り返すようにすれば短くできます。
シート名か固定でなく、事前にシート名か分からないなら、TransferSpreadsheet では無理なので、VBAでExcelアプリケーションを開いて処理することになります。
AccessからExcelを操作する 《CreateObject》|Access|ヘルプの森
シート名は固定ですか、それとも、その時々で変わりますか。変わる場合は全シートが対象ですか。
こういうことだったのですね。
hiroton様
hatena様
ご丁寧にありがとうございました。
質問に対する直接の回答ではなく、前提に関する疑問点なんですが、
リレーションシップをみると一つのメインテーブルに4つのサブテーブルが紐づいているという関係ですね。つまり一対多の関係が4組あるということになります。
これを非連結のコントロールを想定されるレコード数分配置してそこに表示するという設計ですね。
通常、Accessでは一対多の関係のデータはメイン/サブフォーム形式で簡単に表示させることが可能です。
今回の場合は、[T_機械設定]をメインフォームのレコードソースにして、そこに4つのサブテーブルをサブフォームとしてそれぞれ配置すれば、コード無しに目的のことは実現できます。
そうせずに、非連結で設計する理由はなんでしょうか。
現状だと、レコード数が用意したコントロール数を超えてしまうということもあるし、コード量が増えて、メンテナンスも大変になるだけでメリットがあるようには思えないですが。
現状のコードをhirotonさんの回答あった「(元の値)と(転記する値) & vbNewLineを連結して上書きする」というヒントを元に書き換えると、下記になります。
これを質問の最初のコードのForループと同じ考え方で書き換えればいいでしょう。
「FUTEC品名4-表」のようなハイフンを含む列名は、SQLでマイナス記号として扱われてしまうため、[FUTEC品名4-表]のように角かっこで囲む必要があります。しかし、このような列名は他の場面でもトラブルの種になりがちなので、可能なかぎり列名を変更したほうが良いと思います。
派生関係 T_特記事項:🔑品名,🔑開始日,特記事項
T_機械設定:🔑品名,🔑開始日,…,承認者,承認日
親子関係 T_クレーム履歴:🔑品名,🔑開始日,🔑クレーム履歴番号,…
親子関係 T_FUTEC設定:🔑品名,🔑開始日,🔑検査番号,…
参照関係 T_更新履歴:🔑承認者,🔑承認日,…
とりあえず、たたき台にどうですか?
りんごさん、ありがとうございます。
リレーションシップに関するご指摘ですが、このような感じで良いでしょうか?
シングルクォーテーションとカンマについて。
おっしゃる通りでした。ありがとうございます!
リレーションシップウィンドウのスクショでしょうか?
もしかしたら、主キーの設定が緩い、リレーションシップが未設定、という課題があるかもしれませんね。
品名と年月を軸に、再検討は如何でしょうか?
参考サイト
リレーションシップの作成と参照整合性の設定
教えていただいた、処理方法と違うかもしれませんが、
実現することは、一応できます。
ただ、テキストボックスの最後に数字が連続しているので、ループまたは、カウントアップで出来ないかなと思いました。
https://zawazawa.jp/ms-access/topic/876
このトピで、hatena様から、改行コードを入れることで、転記ができたので、安直に、転記できると思いました。
ただ、hiroton様が、初めにカウントアップのことを記載したということは、カウントアップでコードを短くできるのでしょうか?
最初のシングルクォテーションは、閉じないのでしょうか?
最後のカンマは、必要ですか?