For i = 1 To 10
If Not IsNull(Me("依頼理由_1" & i).Value) Then
rs.AddNew
For Each fld In rs.Fields
fld.Value = Me("詳細ID" & i).Value '←ここでエラー
fld.Value = Me("ロット番号" & i).Value
fld.Value = Me("ロット枝" & i).Value
fld.Value = Me("依頼理由_1" & i).Column(1)
fld.Value = Me("依頼理由_2" & i).Column(1)
fld.Value = Me("依頼理由_3" & i).Column(1)
fld.Value = Me("巻き長さ" & i).Value
fld.Value = Me("詳細補足説明" & i).Value
fld.Value = Now
Next
rs.Update
End If
Next i
Private Sub btn追加_Click()
Dim rs As DAO.Recordset, fld As DAO.Field
Dim strSQL As String
strSQL = "SELECT 依頼ID AS txt依頼ID, 依頼日 AS txt依頼日, 依頼者 AS cmb依頼者, 作業長承認 AS cmb作業長承認, W_No AS txtW_No, W_Noロット AS txtW_Noロット, 品名 AS txt品名, 希望処置 AS cmb希望処置, 補足説明 AS txt補足説明 FROM T_依頼;"
Set rs = CurrentDb.OpenRecordset(strSQL)
rs.AddNew
For Each fld In rs.Fields
fld.Value = Me(fld.Name).Value
Next
rs.Update
strSQL = "SELECT 詳細ID As txt詳細ID, ロット番号 AS txtロット番号, ロット枝 AS cmbロット枝, 依頼理由_1 AS cmb1依頼理由, 依頼理由_2 AS cmb2依頼理由, 依頼理由_3 AS cmb3依頼理由, 巻き長さ AS txt巻き長さ, 詳細補足説明 AS txt詳細補足説明, T_依頼詳細"
Set rs = CurrentDb.OpenRecordset(strSQL) '←ここでエラー
Dim i As Long
For i = 1 To 10
If Not IsNull(Me("cmb1依頼理由" & i).Value) Then
rs.AddNew
For Each fld In rs.Fields
If Not ",依頼ID,最終更新日," Like "*," & fld.Name & ",*" Then
fld.Value = Me(fld.Name & i).Value
End If
Next
'//レコード共通項目や計算結果を入れるものは個別に処理
rs!依頼ID.Value = Me!txt依頼ID.Value
rs!最終更新日.Value = Now
rs.Update
End If
Next i
rs.Close
MsgBox "追加しました", vbInformation, "完了"
End Sub
Private Sub btn追加_Click()
If IsNull(Me.依頼者.Value) Or IsNull(Me.希望処置.Value) _
Or IsNull(Me.W_No.Value) Then
MsgBox "必要項目が入力されていません", vbInformation, "確認"
Exit Sub
End If
Dim rs As DAO.Recordset, fld As DAO.Field
Set rs = CurrentDb.OpenRecordset("T_依頼")
rs.AddNew
rs("依頼ID").Value = Me.依頼ID.Value
rs("依頼日").Value = Me.依頼日.Value
rs("依頼者").Value = Me.依頼者.Value
rs("W_No").Value = Me.W_No.Value 'コンボボックスの連結列をフィールドのデータと合うものにしておく
rs("W_Noロット").Value = Me.W_Noロット.Value
rs("品名").Value = Me.品名.Value
rs("希望処置").Value = Me.希望処置.Value
rs("補足説明").Value = Me.補足説明.Value
rs.Update
rs.Close
Set rs = CurrentDb.OpenRecordset("T_依頼詳細")
Dim i As Long
For i = 1 To 10
If Not IsNull(Me("依頼理由_1" & i).Value) Then
rs.AddNew
For Each fld In rs.Fields
fld.Value = Me("詳細ID" & i).Value '←ここでエラー
fld.Value = Me("ロット番号" & i).Value
fld.Value = Me("ロット枝" & i).Value
fld.Value = Me("依頼理由_1" & i).Column(1)
fld.Value = Me("依頼理由_2" & i).Column(1)
fld.Value = Me("依頼理由_3" & i).Column(1)
fld.Value = Me("巻き長さ" & i).Value
fld.Value = Me("詳細補足説明" & i).Value
fld.Value = Now
Next
rs.Update
End If
Next i
rs.Close
MsgBox "追加しました", vbInformation, "完了"
End Sub
Private Sub btn追加_Click()
Dim rs As DAO.Recordset, fld As DAO.Field '//この行が不足
Dim strSQL As String
strSQL = "SELECT 依頼ID AS txt依頼ID, 依頼日 AS txt依頼日, 依頼者 AS cmb依頼者, 作業長承認 AS cmb作業長承認, W_No AS txtW_No, W_Noロット AS txtW_Noロット, 品名 AS txt品名, 希望処置 AS cmb希望処置, 補足説明 AS txt補足説明 FROM T_依頼;"
Set rs = CurrentDb.OpenRecordset(strSQL)
rs.AddNew
For Each fld In rs.Fields
fld.Value = Me(fld.Name).Value
Next
rs.Update
' Dim strSQL As String '//すでに宣言しているので不要
strSQL = "SELECT 依頼ID, ロット番号 AS txtロット番号, ロット枝 AS cmbロット枝, 依頼理由_1 AS cmb1依頼理由, 依頼理由_2 AS cmb2依頼理由, 依頼理由_3 AS cmb3依頼理由, 巻き長さ AS txt巻き長さ, 詳細補足説明 AS txt詳細補足説明 FROM T_依頼詳細"
Set rs = CurrentDb.OpenRecordset(strSQL)
Dim i As Long
For i = 1 To 10
If Not IsNull(Me("cmb1依頼理由" & i).Value) Then
rs.AddNew
For Each fld In rs.Fields
If Not ",依頼ID,更新日時," Like "*," & fld.Name & ",*" Then
fld.Value = Me(fld.Name & i).Value
End If
Next
'レコード共通項目や計算結果を入れるものは個別に処理
rs!依頼ID.Value = Me!依頼ID.Value
rs.Update
End If
Next i
rs.Close
MsgBox "追加しました", vbInformation, "完了"
End Sub
Private Sub btn追加_Click()
Dim strSQL As String
strSQL = "SELECT 依頼ID AS txt依頼ID, 依頼日 AS txt依頼日, 依頼者 AS cmb依頼者, 作業長承認 AS cmb作業長承認, W_No AS txtW_No, W_Noロット AS txtW_Noロット, 品名 AS txt品名, 希望処置 AS cmb希望処置, 補足説明 AS txt補足説明 FROM T_依頼;"
Set rs = CurrentDb.OpenRecordset(strSQL) '← rs = が反転されます。
rs.AddNew
For Each fld In rs.Fields
fld.Value = Me(fld.Name).Value
Next
rs.Update
Dim strSQL As String
strSQL = "SELECT 依頼ID, ロット番号 AS txtロット番号, ロット枝 AS cmbロット枝, 依頼理由_1 AS cmb1依頼理由, 依頼理由_2 AS cmb2依頼理由, 依頼理由_3 AS cmb3依頼理由, 巻き長さ AS txt巻き長さ, 詳細補足説明 AS txt詳細補足説明, 更新日時 FROM T_依頼詳細"
Set rs = CurrentDb.OpenRecordset(strSQL)
Dim i As Long
For i = 1 To 10
If Not IsNull(Me("cmb1依頼理由" & i).Value) Then
rs.AddNew
For Each fld In rs.Fields
If Not ",依頼ID,更新日時," Like "*," & fld.Name & ",*" Then
fld.Value = Me(fld.Name & i).Value
End If
Next
'//レコード共通項目や計算結果を入れるものは個別に処理
rs!依頼ID.Value = Me!依頼ID.Value
rs!更新日時.Value = Now
rs.Update
End If
Next i
rs.Close
MsgBox "追加しました", vbInformation, "完了"
End Sub
Private Sub btn追加_Click()
If IsNull(Me.依頼者.Value) Or IsNull(Me.希望処置.Value) _
Or IsNull(Me.W_No.Value) Then
MsgBox "必要項目が入力されていません", vbInformation, "確認"
Exit Sub
End If
Dim rs As DAO.Recordset, fld As DAO.Field
Set rs = CurrentDb.OpenRecordset("T_依頼")
rs.AddNew
rs("依頼ID").Value = Me.依頼ID.Value
rs("依頼日").Value = Me.依頼日.Value
rs("依頼者").Value = Me.依頼者.Value
rs("W_No").Value = Me.W_No.Value 'コンボボックスの連結列をフィールドのデータと合うものにしておく
rs("W_Noロット").Value = Me.W_Noロット.Value
rs("品名").Value = Me.品名.Value
rs("希望処置").Value = Me.希望処置.Value
rs("補足説明").Value = Me.補足説明.Value
rs.Update
rs.Close
Set rs = CurrentDb.OpenRecordset("T_依頼詳細")
Dim i As Long
For i = 1 To 10
If Not IsNull(Me("依頼理由_1" & i).Value) Then
rs.AddNew
For Each fld In rs.Fields
fld.Value = Me("詳細ID" & i).Value
fld.Value = Me("ロット番号" & i).Value
fld.Value = Me("ロット枝" & i).Value
fld.Value = Me("依頼理由_1" & i).Column(1)
fld.Value = Me("依頼理由_2" & i).Column(1)
fld.Value = Me("依頼理由_3" & i).Column(1)
fld.Value = Me("巻き長さ" & i).Value
fld.Value = Me("詳細補足説明" & i).Value
fld.Value = Now
Next
rs.Update
End If
Next i
rs.Close
MsgBox "追加しました", vbInformation, "完了"
End Sub
strSQL = "SELECT 依頼ID, 依頼日, 依頼者, W_No, W_Noロット, 品名, 希望処置, 補足説明 FROM T_依頼;"
Set rs = CurrentDb.OpenRecordset(strSQL)
rs.AddNew
For Each fld In rs.Fields
fld.Value = Me(fld.Name).Value
Next
rs.Update
strSQL = "SELECT 依頼ID AS txt依頼ID, 依頼日 AS txt依頼日, 依頼者 AS cmb依頼者, W_No AS txtW_No, W_Noロット AS txtW_Noロット, 品名 AS txt品名, 希望処置 AS cmb希望処置, 補足説明 AS txt補足説明 FROM T_依頼;"
Dim strSQL As String
strSQL = "SELECT 依頼ID, ロット番号 AS txtロット番号, ロット枝 AS cmbロット枝, 依頼理由_1 AS cmb1依頼理由, 依頼理由_2 AS cmb2依頼理由, 依頼理由_3 AS cmb3依頼理由, 巻き長さ AS txt巻き長さ, 詳細補足説明 AS txt詳細補足説明, 更新日時 FROM T_依頼詳細"
Set rs = CurrentDb.OpenRecordset(strSQL)
Dim i As Long
For i = 1 To 10
If Not IsNull(Me("依頼理由" & i).Value) Then
rs.AddNew
For Each fld In rs.Fields
If Not ",依頼ID,更新日時," Like "*," & fld.Name & ",*" Then
fld.Value = Me(fld.Name & i).Value
End If
Next
'//レコード共通項目や計算結果を入れるものは個別に処理
rs!依頼ID.Value = Me!依頼ID.Value
rs!更新日時.Value = Now
rs.Update
End If
Next i
rs.Close
Dim rs As DAO.Recordset, fld As DAO.Field
Set rs = CurrentDb.OpenRecordset("T_依頼")
rs.AddNew
For Each fld In rs.Fields
If Not "フィールド1,フィールド2" Like "*" & fld.Name & "*" Then
fld.Value = Me(fld.Name).Value
End If
Next
rs.Update
rs.Close
Dim rs As DAO.Recordset, fld As DAO.Field
Set rs = CurrentDb.OpenRecordset("T_売上")
rs.AddNew
For Each fld In rs.Fields
fld.Value = Me(fld.Name).Value
Next
rs.Update
rs.Close
2つめのSQL文は下記のようになります。
テキストボックス名は、
フィールド名の後に1~10の数字を付加したものにしておいて、
Set rs = CurrentDb.OpenRecordset("T_依頼詳細")
Dim i As Long
For i = 1 To 10
If Not IsNull(Me("依頼理由" & i).Value) Then
rs.AddNew
For Each fld In rs.Fields
fld.Value = Me(fld.Name & i).Value
Next
rs.Update
End If
Next i
rs.Close
Functionさんさん tryExecute(sqlList As Collection) As String
On Error GoTo ErrorHandler
Dim daoDb As DAO.Database
Set daoDb = CurrentDb
Dim strSQL As Variant
For Each strSQL In sqlList
daoDb.Execute strSQL
Next strSQL
tryExecute = ""
GoTo Finally
ErrorHandler:
tryExecute = "Error #: " & Err.Number & vbNewLine & vbNewLine & Err.Description
Finally:
If Not daoDb Is Nothing Then
daoDb.Close
Set daoDb = Nothing
End If
End Function
りんごさん・hatenaさんありがとうございました。色々試しまして Shell A & " " & B & C で上手く動作しました。私の方でコード内でのダブルクオーテーションの使い方が理解出来ていなかったのが原因ですね。いつもこれの使い方で混乱してしまいます。
よく調べるとOfficeのバージョンが2種インストールされていました。これも気がついていませんでした。
もっと勉強が必要ですね・・・
最初のクエリをレコードソースとするレポートを作成して、グループ化/集計 の機能でグループフッターを表示させて、そこに集計テキストボックスを配置すれば簡単に実現できますが、それではだめですか。
Accessのレポートでグループごとに金額の合計を印刷する方法 | できるネット
クエリで実現するとなると2つのクエリをユニオンクエリで一つにまとめることになります。その場合は下記が参考になるでしょう。
クエリで小計行、合計行を表示する - hatena chips
レポートなら、下記のようなテキストボックスを配置すればいいでしょう。
コントロールソース
=[電気]+[ガス]+[水道料金]
クエリなら、下記のような演算フィールドを作成すればいいでしょう。
水道光熱費: [電気]+[ガス]+[水道料金]
この方法だと1クリックにつき1レコードですが、
もし、複数のレコードを選択して、まとめて印刷したいというときは、hirotonさんが提案されたテーブルに「Yes/No型」フィールドを追加する方法を使うといいでしょう。
フォームの方にも「Yes/No型」フィールドを追加するとチェックボックスになりますので、印刷したいレコードにチェックをいれて、1クリックでまとめて印刷することも可能です。
その場合は、埋め込みマクロのWhere条件式の欄に下記の式を設定しておきます。
それでは、続きです。
まず、テーブルの主キーフィールド名を、「顧客ID」と仮定します。
フォーム名は、「F_封筒印刷」と仮定します。
フォームをデザインビューで開いて、「封筒プレビュー」コマンドボタンを選択して、プロパティシートで[イベント]タブの[クリック時]に[埋め込みマクロ]となっていると思いますので、その右端のビルドボタン(...)をクリックします。
マクロ画面が開きますので、
「レポートを開く」を選択して、Where条件式の欄に下記の式を入力します。
マクロ画面を閉ます。
これで完成です。
フォームを開いて、印刷したいレコードを選択してコマンドボタンをクリックすると、そのレコードがプレビューされます。
hatena 様
お世話になります。
お教えいただいた作業までは上手く順調に進みました。
その後をお教えください。よろしくお願いいたします。
作成したテーブルの名前(テーブル名)とレポートの名前(レポート名)はそれぞれなんですか?
回答者と齟齬が起きないように必要な情報として記載するようにしてください
テーブルに「印刷する」フィールドを「Yes/No型」で作成します
レポートをデザインビューで開き、プロパティシートのデータタブで
と変更します
テーブルで「印刷する」フィールドにチェックを入れてからレポートを開けば、チェックを入れたレコードのみが印刷できるようになります(特殊な状況による例外あり)
提示した方法は、ACCESSの基本機能すら使いこなす前の、原理や理論に近い部分の手法です。実際の運用にあたっては、オリジナルのユーザーインターフェースが必要になることでしょう。たとえばhatenaさん提示のような方法で、フォームの作成をしていくことになります
では、テーブルを選択しておいて、[作成]→[フォームウィザード]をクリックします。
表示したいフィールドを選択して[次へ] [表形式]を選択して[次へ]
フォーム名をお好みで設定して、[完了]
以上で帳票フォームが作成できます。これを開くとテーブルのデータが表形式で表示できます。
このフォームをデザインビューにして、フォームヘッダーにコマンドボタンを配置します。
ウィザードが開くので、そこで[レポートの操作]→[レポートのプレビュー]を選択して[次へ]
レポートを選択して[次へ]
文字列を選択して、「封筒プレビュー」と入力して[次へ]
名前を「封筒プレビュー」とてし[完了]
これでフォームを開いて、「封筒プレビュー」をクリックするとレポートがプレビューされるのを確認してください。
このままでは、全レコードが出力されますので、選択していくレコードのみにする必要がありますが、
とりあえりず、ここまで作業してみてください。
うまくいったら、次の作業を回答します。
hatena 様
ありがとうごいます。
現状の雛型では、テーブルの全レコードが出力される状態でしょうか。
⇒そのようになります
「任意のレコードを選んで」は、どのようなユーザーインターフェイスで選ぶ予定でしょうか。
帳票フォームで選択しているレコードを印刷するとか、リストボックスに表示させてそれで選択するとか、
いろいろ考えられますが。
⇒複数の選択肢があることすらわかりませんでした。一番簡単な方法でお願いします。
VBAを使うことは可能ですか。
⇒不可能です。まだまだそこまで追いついていません。
よろしくお願いいたします。
最低限の保証を確認しておかないと危険です。これまでのチグハグな様子を見ていると、このシステムは最初から全部壊れている可能性が高いと、容易に予想出来ます。立ち止まって、再考するのはどうでしょう?努力と時間はもっと大切に。
現状の雛型では、テーブルの全レコードが出力される状態でしょうか。
「任意のレコードを選んで」は、どのようなユーザーインターフェイスで選ぶ予定でしょうか。
帳票フォームで選択しているレコードを印刷するとか、リストボックスに表示させてそれで選択するとか、
いろいろ考えられますが。
VBAを使うことは可能ですか。
hatenaさん、
ありがとうございました!
上手くいきました👍
hirotonさん、
ありがとうございます!
りんごさん、
ご指摘ありがとうございます!
今後はリレーションなど、詳細も提示しつつ
質問するようにします。
今回は仕事の都合、時間もないので
hatenaさんのご提案のやり方で進めてみます。
皆さま、ご協力有り難うございました。
SQLはいまの私には難易度高いですね💦
勉強します!
まったく別の質問になりますので、
今回の質問が解決したのなら、新規に質問しなおしてください。
hatena様
ありがとうございました。
別件でお教えください。
"レポート"で封筒のひな形を作りました。そのひな形にテーブルにある何百のレコードから
任意のレコードを選んで、封筒に印刷するのはどのようにすればいいのですか。
最近まで「桐」を使用していたので、「ACCESS」は難しいです。
上記のコード、私が前に指摘した、
一つずつ、フィールドに対応するテキストボックスの値を代入する方法と、
フィールド名とテキストボックスを同じにしておいて、いちいち指定せずにループで代入しておく方法、
が、ごちゃまぜになってます。
一つずつ、フィールドに対応するテキストボックスの値を代入する方法に書き換えましょう。
後者の方法はまだちょっと敷居が高いようです。
そのうえでエラーが出たら、エラーメッセージとどの行でエラーが出たか提示してください。
パラメーターエラーは、念の為、SQL文の不備から見直してみるのはどうでしょう?
Null値代入エラーは、取り敢えず、For Each〜Nextを使わないコードに戻してみるのはどうでしょう?
これで解決しない、もしくは、新しいエラーが出た場合は、For i = 1 To 10 〜Nextを使わないコードに戻してみるのはどうでしょう?
それでも駄目なら、兎にも角にも、まずは、繰り返し処理を使わないコードを泥臭く書かないと色々難しいでしょう。
最後に、今回のシステムに関して質問を続ける場合や別のシステムに関して質問をする場合、リレーションシップの画面をスクリーンショットして提示して下さい。リレーションシップが設定されていない場合、質問する意味がありませんので、これが大事です。
りんごさん、ありがとうございます。
ベンダーへの依頼も視野に入れていますが、何分まだ予算もつかない状態なので、調査研究中という段階です。
関連して目についた「Pleasanter」というツールを、今評価してみたところですが。
現在考えているAccessでのデータ構造で、フォームの構成を実現できるか検証できませんでした。(1時間では)
データ中心の発想を変えないと、ローコードでの開発は難しいような気がします。
30分で設計して、1時間でWeb画面展開(仮)出来ますか?出来ないならば、信頼出来るローコード開発ベンダーを見つけて相談しましょう。
hirotonさん、ありがとうございます。
再度挑戦しました。
すると「パラメーターが少なすぎます。9を指定してください。」です。
hatenaさん、ありがとうございます。
実行時エラー’3022’は、同じ主キーで一生懸命、登録を試みてました😅
スミマセン😅😅
で、再度挑戦しました。
すると「バリアント型ではない変数にNull値を代入しようとしました」です。
親テーブル「T_依頼」
子テーブル「T_依頼詳細」
今のところ想定しているのは、10名程度の同時使用かと思います。それよりも大規模になる時は、構成し直しになると思います。環境よりも、アプリの操作性を重視したいのですが、今から作成するのであればWebっぽい画面展開にしたいなぁ、などと考えております。勿論、応答速度とセキュリティは外せないのですが。
kintoneも一ヶ月ほど試してみたのですが、馴染めませんでした。
Accessも、一般的な機能(クエリとかマクロ)は限界があるので、Accessでやるとしたら、バリバリVBAを使うことになると思います。
イメージとしては、
1.セキュリティ・応答性 が大丈夫な、クラウドのデータベース
2.Access程度の、パソコンソフト開発のツール
3.まだ良くわかりませんが、スマホでのアプリ開発ツール
を併せて提供してほしいという感じです。
さすがに、Accessで作ったソフトをスマホでそのまま動かしてくれ・・・
とは言えないでしょうが・・・。
勝手なことばかり言って、申し訳ありません。
もし、Microsoft以外の環境についてもご存知でしたら、また教えてください。
FileMakerに少し興味があるのですが、システムのことばかりやっているわけでもないので、なかなか時間が取れません。
コンパイルエラーなのでコンパイルをしてみましょう
エラーの場所が反転してわかると思います
回答はコード案の一部を記載したものなので、前後の処理や必要な変数宣言は別途記述する必要があります。変数の使いまわしもしてるので記述を整理する必要もあるでしょう
プロシージャをすべて記述するなら
「更新日時」フィールドは例示のための記述なので削除しました
下記が参考になりそうです。
レポートウィザードを使って表形式のレポートを作成 | Access 2016 | 初心者のためのOffice講座
とりあえず、
出力したいテーブルを選択した状態で、作成→レポートウィザードで指示に従って進めていき、レイアウトで「表形式」を選択して、完了を押してみてください。
T_依頼 の主キーフィールドはなんでしょうか。
エラーメッセージのとおりだと思いますので、主キーフィールドの値が重複していないか、確認してみてください。
hirotonさん
ご提案の文を使わせて頂きました。
“コンパイルエラー 変数が定義されていません。”
初歩的な質問で、大変恐縮ですが
間違えを指摘していただけますか?
お二方、ありがとうございます!
まずは、hatenaさん。
ご提案の文を使わせていただいたところ、T_依頼にはレコードが入りますが、
子レコード側を入力したのち、追加ボタンを押すと
実行時エラー’3022’インデックス、主キー、またはリレーションで重複する値が、、、
が表示され、下記がエラーとなりました。
よろしくお願いします!
すっきりして見やすいですねぇなんて思いながら見てましたが、
OpenRecordset
にはSQL文も指定できるのでハイブリッドでやるのもいいかなぁと思いました不要な分を弾く処理よりは必要分を記述していくほうが分かりやすいかと
単純なSELECT文なので間違いも起きにくいですし
それから、エイリアス使ってひねってやるとフィールド名とコントロール名が別でも良かったりしますね
フォームに配置できないフィールド名(詳細)とかはこの手法で
質問だと後半のINSERTは「依頼ID」が共通で最大10レコード登録な処理ですかね(追記内容だと「依頼ID」にも
i
がついているので真実は不明)これの時は、別入力処理も使っていくことになりそうです
更新日時のような計算で求めるものも外に出して個別に処理ですかねぇ
Like
判定は誤動作しそうで怖い。完全一致で判定(Select Case
で列挙するとか)したくなります後者の方法なら、下記のコードになります。
入力しないフィールドがある場合 "フィールド1,フィールド2" とカンマ区切りで指定してください。
全てのフィールドに入力するならIf文は不要です。
下記の部分でエラーということですね。
前回の回答で、
一つずつ、フィールドに対応するテキストボックスの値を代入する方法と、
フィールド名とテキストボックスを同じにしておいて、いちいち指定せずにループで代入しておく方法、
の2つを提案したのですが、それを混ぜ和せてしまっては正常に動きません。
前者の方法でいくなら、上記のコードは、下記のようになります。(フィールド名とテキストボックス名は同じにしてあるという前提です)
fld.Value = Now は無視してください。
hatenaさん
ご丁寧な解説、本当に助かります!
前回相談にのって頂いたdbも、最初このSQLで躓き
別の本に載っていた「recordset.AddNew」で試したところ、
上手くいったので、もしや?と思っておりましたが
その“もしや”をご提案いただき、やっぱり!となりました。
さて、早速実践してみましたが、エラーです。
実行時エラー’2465’:
指定した式で参照されている’L0000002'フィールドが見つかりません。
下の文がデバックで黄色になります。
fld.Value = Me(依頼ID).Value
間違っていますね・・・😅
今現在、下記内容になっております
将来的に同時使用する人数はどのくらいでしょうか?もしかするとデータベースをクラウドに持つにしてもSharePointよりAzureを最初から選択しておいた方が良いかもしれません。
テスト開発、小規模ならSharePointでも良いと思いますが使用規模が思っているよりも大きいとデータの応答速度に使用者が耐えれなくなるかもしれません。
PowerAppsですが、Accessのフォームをイメージして貰えると良いと思いますが試用版はどの程度まで出来るのでしょうか?
Accessは慣れているということなので、販売管理・製造管理をAccessで設計する際にここはクセがありそうだな、という部分をPowerAppsで実現できるかがキモになりそうです。
ものすごく複雑なリレーションシップやAccessの標準機能ではフォロー出来ない、VBAに頼るようなものが既に想定されているとなると、実現可否は私の知識ではわかりません…。
私も大手が出しているパッケージ製品の基幹システムが実務に噛み合わないために色々と試行錯誤をしている身です。YoutubeにもPowerAppsとSharePointを組み合わせた解説動画も多数ありますので、それらの作例からヒントを得てみてはいかがでしょう?あわせてPowerAutomateも知れると思います。
VBA内でのSQL文、めんどくさいですよね。
& でつなげなければいけない
データ型によって、
#
や'
で囲まなければならない未入力だったばあい Null に変換したりする必要がある
など・・・
最初のSQLの場合は、1件のレコードを追加するだけですので、自分なら、
recordset.AddNew
を使いますね。そうすると下記のようなコードですみます。
どうでしょうか。こちらの方がはるかにシンプルで読みやすいと思いませんか。
さらに、テキストボックス名をフィールド名と同じにしておけば、下記のようにいちいちフィールド名やテキストボックス名を記述する必要もなくなります。
2つめのSQL文は下記のようになります。
テキストボックス名は、
フィールド名の後に1~10の数字を付加したものにしておいて、
hirotonさん、
ありがとうございます!
後半のSQL文、最後の2項目
確かに間違っていました。
まずはSQL文自体を理解していないと
今回の間違いは見つけられないと
思います。発見まで暫く時間帯が
掛かりそうです😅
hatenaさん、
コメントアウトしたら、見事に
ハイライトされました。
先程も書きましたが
やはりSQL文を勉強をしないと
お二人から折角アドバイスを受けても
噛み砕けないままになってしまい
そうです。
もう少し勉強したのち、
今回のものを見直してみます!
ありがとうございました!
「ほり」さま。
早々のご回答ありがとうございます。
ほぼおっしゃるとおりだと思います。
現在の企業規模的には、大したシステムを必須とするわけではないのですが、将来的にクラウドとスマホアプリが必須になると思って、勉強中です。
販売管理と製造管理については、今のところ年商1億円くらいのレベルで構築したいのですが、既製品をいくつか覗いてみましたが、やはり実情に合わない部分が多く、できれば自作したいとの思いからとりあえず、「Microsoft 365 Business」を導入してみようかというところです。
パソコンソフトとスマホアプリを同等のレベルで開発するというのは、やはり今のところ無理なのでしょうかね。
Accessには慣れているので、データのクラウド化ができれば、そこそこ業務システムは展開できると思うのですが「PowerApps」がAccess以上にコーディングフルなように見えて、悩んでいます。
Microsoft 以外の環境も調査中ですが、私自身が Microsoft に浸ってきているので、余計に解りにくくて困っています。
On Error GoTo ErrorHandler
でエラー処理しているので、エラー場所はわからなくなります。
デバッグするときは、この行はコメントアウトしてから、実行するとエラー箇所がハイライトされるはずです。
おそらく、
daoDb.Execute strSQL
がハイライトされるはずです。
ここで、strSQLに格納されているSQL文が間違っているのではと推測できます。
あとは、hirotonさんのご指摘を確認してみてください。
SQL実行時のエラーメッセージなので実際に実行されるSQL文を確認しましょう
Excel VBA 入門講座 - イミディエイトウィンドウ(pc-users.netさん)
ありがちなのは入力チェック漏れでNULLが指定されてて
VALUES(1234,,'ABC')
みたいな文になってるとかですね後半のSQL文ですが
'
特に最後の2項目、間違っていませんか?
ついでにエラーについて
このコードではプログラムが中断されるようなエラーは発生していません。記述通りに動作して、
MsgBox errMsg, vbCritical, "エラー"
の文が実行されメッセージボックスが表示されているだけです。当然「デバッグ」ボタンも表示されませんし、ハイライト表示もできません「そのようにプログラミングされている」ことを理解する必要があるでしょう
hatenaさん、お世話になります。
ハイライトされなくて困っております。
下記がtryExecuteになります。
よろしくお願いします。
そのエラーが出たとき、デバッグボタンを押すと、どの行がハイライトされますか。
あと、tryExecute という関数はないので、ユーザー定義関数と思いますが、そのコードも提示してください。
りんごさん・hatenaさんありがとうございました。色々試しまして Shell A & " " & B & C で上手く動作しました。私の方でコード内でのダブルクオーテーションの使い方が理解出来ていなかったのが原因ですね。いつもこれの使い方で混乱してしまいます。
よく調べるとOfficeのバージョンが2種インストールされていました。これも気がついていませんでした。
もっと勉強が必要ですね・・・
以前、同じようなシチュエーションでAccessとSharePoint、PowerAppsで何ができるのかを勉強がてら触ったことがあります。ただ、私はその手のプロではないのでご了承ください…。
まずパソコンとスマホでそれぞれ何をしたいのかを明確にされたほうが良いと思います。両方とも同じレベルの操作ができないといけないのか、スマホはデータの照会や簡易的な入力などで良いのか…
もしかしたらデータの照会や簡易的な入力程度であればSharePointをアプリに落とすだけで事足りてしまうかもしれませんし、Accessで細かくイベントを設定するようなことがしたい場合はPowerAppsで実現できたとしても使い勝手が良いかはわかりません。
私の場合はスマホはデータの照会やスマホ側で入力変更できる機能はかなり限定的にしました。プルダウンやチェックボックスで選択させ、あとは保存する程度にしました。最初は色々盛り込んだのですが、結局パソコンでいいや、となってしまったので。
あとは販売管理と製造管理の具体的な内容を記載したほうが良いと思います。販売管理ですから金銭の話になるかと思いますが、受注/発注/売掛/買掛/入金/支払…製造管理ですとやはり材料の入荷管理や製造時の材料払出、いわゆる在庫管理ですね。
Accessでは実現可能だと思いますが、これらの全てをPowerAppsでスマホからも…となると素人眼では少しキツイのかな?という印象を持ちました。
あとは有識者の方を待ちましょう😅
お礼が遅くなりすみません、いろいろな方法があるのですね!
勉強になります。いろいろと試してみます。またよろしくお願い致します。