Microsoft Access 掲示板

views
4 フォロー
5,901 件中 401 から 440 までを表示しています。
5
Anonymous 2024/02/13 (火) 13:19:47 23e8e@44ebd

R_印刷のヘッダーにテキストボックスを配置し、コントロールソースを=[pages]としたところ、無事に入るようになりました!ありがとうございました。

4

レポートを開いているなら、取得できます。

レポート上のテキストボックスのコントロールソースの式に[Pages]がありますか。
コントロールソースで[Pages]を参照していないと、0 になります。

9
ぽん 2024/02/13 (火) 12:39:35 2d148@1925b

数値を昇順にした場合、ID全体が昇順または降順で連番になっているかどうかをチェック。←まさに、やりたいことです!
途中から昇順、降順が変わることはない。←IDは必ず、昇順か降順で飛び番号はありません

連番になっていないIDは、イミディエイトウィンドウに出力。
↑ではなく、テーブルに昇順×とや、降順で×とか表示したいです。できるのならば、フィールドは作成します
お願いいたします

3
Anonymous 2024/02/13 (火) 11:03:15 23e8e@44ebd >> 2
Private Sub btn_印刷_Click()

Dim rpt As Report
Dim PageCount As Integer

DoCmd.OpenReport "R_印刷", acViewPreview

Set rpt = Reports("R_印刷")
PageCount = rpt.Pages

Me.txb_総ページ数.Value = PageCount

End Sub

こんな漢字で書いてみましたが、レポートは25ページあるにも関わらずtxb_総ページ数には0が表示されます。

2
Anonymous 2024/02/13 (火) 10:57:24 23e8e@44ebd >> 1

「F_読み取り」内に配置した「btn_印刷」というコマンドボタンのクリック時イベントで「R_印刷」を開き、そのタイミングで「txb_総ページ数」というテキストボックスにページ数が表示されるようにしたいです。
このような場合でもレポートを閉じる処理をしなければならないのでしょうか?

1

レポートをプレビューで表示してない状態で取得したいということでしょうか。

だとしたらそれはできないので、プレビューを非表示で開いて総ページ数を取得して、プレビューを閉じるという処理が必要になります。

下記のページでちょうどその関数を紹介していますので、ご参考に。

レポートで印刷する前にページ数を取得する関数 - hatena chips

6

変数に値が入らないです。新規登録に進めません。

これについては、前回の投稿でも回答してますが、
標準モジュールの変数と同名のフォームのモジュールの変数を削除すれば変数に値が入るようになります。
それで、ステップ実行で動作を確認するといいでしょう。

それがうまくできたら、Functionでデータを引き渡したり、結果を戻す方法にトライするといいでしょう。

3
wazawaza 2024/02/10 (土) 18:15:42

hatenaさん、
お騒がせしました。
アレコレ考えず、素直に試したところ
ご提示して頂いた方法で、希望のカタチに
なりました。ありがとうございました!
値集合ソースからSQLを入力するのが
初めてだったので、?となってしまいました。
また一つ勉強になりました。

5
rinrin 2024/02/10 (土) 17:37:14 b4dc9@c7f00

ごめんなさい
ソースコードが長すぎて掲載することができません

Functionコードのご指導ありがとうございます^^

4
rinrin 2024/02/10 (土) 16:29:03 b4dc9@c7f00

行き違いになり申し訳ございません。未熟な私が端折ったソースコードを提示し、ご指導を受けることは 先生方に失礼に当たると思い、きちんと現状でのすべてのソースコードを書いたうえで、ご指導を仰ぐつもりでおりました。
hatenaさんのご指導感謝いたします。勉強に励みます。
改めて ソースコードを掲載させていただきます。

あらためてきちんと全てのソースコードを書き直して再投稿させていただきます。今現在の状況です。ステップ実行で流れを確認しているのですが、MyVariable1に進めないです。変数に値が入らないです。新規登録に進めません。ご指導いただければ幸いです。最終的にはメインフォームに各地域を並べ、サブフォームにも一覧表にチェックボックスを並べ、一覧で閲覧および回数が把握できるようなものを作りたいと思っております。
ご指導 何卒宜しくお願い致します。

マイクロソフト アクセス365でメインフォームに都道府県をチェックぼっくで並べ、サブフォームにも都道府県チェックボックスを47都道府県ごとに一覧表を並べ、メインフォームから入力できるフォームを作りたいと思っています。未熟者で思うようにいかず苦しんでおります。

3
hatena 2024/02/10 (土) 14:50:37 修正

コンパイルエラーの部分は無視して、

ステップ実行で流れを確認しているのですが、MyVariable1に進めないです。変数に値が入らないです。

これについて共通変数についての理解をもう一度確認してください。

'共通変数   標準モジュール
Public MyVariable1 As Variant
Public MyVariable2 As Variant
Public MyVariable3 As Variant

メインフォーム

'共通変数
    Dim MyVriable1 As Variant
    Dim MyVriable2 As Variant
    Dim MyVriable3 As Variant

標準モジュールとメインフォームで同じ名前の変数を宣言していますが、
これによって格納されている値を共有できると勘違いしてませんか。
名前が同じでもこの変数は全く別物ですので値を共有しているわけではありません。

メインフォームで MyVriable1 に1を代入しても、メインフォーム内の変数 MyVriable1 に代入されるだけで、標準モジュールの MyVariable1 には何の変化もありません。

メインフォームの方の変数を削除してください。
そうすれば、標準モジュールの変数は Public で宣言しているので、メインフォームの方から参照可能になり、MyVariable1 に代入できるようになります。

Public宣言してない変数は、そのモジュール内でしか参照できません。

「VBA 変数 スコープ」をキーワードにWEB検索して解説ページで学習してください。


共通変数はいつでも、どこでも、だれでも使用できるので便利ではありますが、その分、コードが読みづらくなりますし、バグの原因になりやすいので、できれば避けたいです。

共通変数以外で、別モジュール間でデータをやりとりする方法は、
引数でデータを渡す、戻り値で結果を受け取る、という方法があります。
こちらの方法も学習して理解されることをお勧めします。

この方法の簡単なサンプルを提示しておきます。

'標準モジュール
Option Compare Database
Option Explicit

Public Function MyFunction(MyVariable1 As Variant) As Variant

    MsgBox MyVariable1 & "を受け取りました。"
    MyFunction = 2

End Function 

'フォームモジュール
Private Sub Cmd新規登録_Click()
   Dim 結果 As Variant

   結果 = MyFunction(1)

   MsgBox "結果は" & 結果 & "です"

End Sub

これで共通変数なしでデータのやり取りができます。
データがどのように移動しているか読みやすいし、知らない間に変数の中身が変更されというような不安もなくなります。

「VBA 引数 戻り値」などをキーワードにWEB検索して学習されることをお勧めします。

2
rinrin 2024/02/10 (土) 12:10:55 b4dc9@c7f00

会社の決まりでUSBでソースコードの持ち出しは禁止です。会社ではステップ実行まで他とりつき、コンパイルエラー 実行時エラーの類は出ませんが、変数に値が入りません。

私としてもソースコードを外部に持ち出したいのですが、厳禁なもので。。。;;

なにはともあれ早急なご対応ありがとうございます
お礼もせずに失礼な子だとは思われたくないので 一言感謝言葉を伝えたくメール書かせていただきました
ありがとうございました

1

提示のコードは実際のコードをコピーして貼り付けたものですか。
そのコードではステップ実行以前に、構文エラーで実行すらできないですが。
実際のコードを貼り付けてもらわないと回答のしようがありません。


なお、コードはMarkDown記法のコードブロック内にいれてください。
質問は、管理者権限で修正しておきました。

この掲示板の使い方の詳細は下記を参照してください。

Microsoft Access 掲示板 の使い方 Microsoft Access 掲示板 - zawazawa

8
hatena 2024/02/10 (土) 10:00:48 修正

下記のような仕様だと仮定して。

  • 数値を昇順にした場合、ID全体が昇順または降順で連番になっているかどうかをチェック。
  • 途中から昇順、降順が変わることはない。
  • 必ずIDは連番になっていて抜けがない。
  • 連番になっていないIDはイミディエイトウィンドウに出力。
  • テーブル名は T1
Public Sub SequenceCheck()
    Dim MinId As Long, MaxID As Long
    MinId = DMin("ID", "T1"): MaxID = DMax("ID", "T1")
    
    Dim StepNum As Long, SeqNum As Long
    If DLookup("数値", "T1", "ID=" & MinId) < DLookup("数値", "T1", "ID=" & MaxID) Then
        StepNum = 1   '昇順
        SeqNum = MinId
    Else
        StepNum = -1  '降順
        SeqNum = MaxID
    End If

    
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM T1 ORDER BY 数値;")
    Do Until rs.EOF
        If rs!ID <> SeqNum Then
            Debug.Print rs!ID
        End If
        SeqNum = SeqNum + StepNum
        rs.MoveNext
    Loop

    rs.Close
    Set rs = Nothing
End Sub
7
りんご 2024/02/09 (金) 17:48:22 935bc@0e907

新しいフィールドを追加して、並び順を登録すればいいんじゃない?
繰返構文、変数値、インクリメント。

6

IDが連番になっていれば降順でも昇順でも構わないんです。

全体が昇順または降順ということですか。
それとも途中から昇順、降順が入れ替わることはありますか。
例えば、最初は昇順だったが、途中から降順に変わるとか。

また、昇順か降順かの判断基準はありますか。

もう少しデータ数の多いサンプルデータを提示してもらえますか。また、降順の場合のサンプルデータと昇順の場合のサンプルデータも提示してもらえますか。

5
ぽん 2024/02/09 (金) 15:52:07 2d148@1925b

「数値を昇順」で「ID」は降順 ではなくて、「数値を昇順」で並べたときに、IDが連番になっていれば降順でも昇順でも構わないんです。

4
ぽん 2024/02/09 (金) 15:50:32 2d148@1925b

並び替え前のテーブルと、並び替えたクエリを数値フィールドで繋ぐってことでしょうか?

3

「数値を昇順」で「ID」は降順になっていてほしいということですか?

1
hatena 2024/02/08 (木) 18:42:00 修正

口座番号の選択時を狙って、更新前処理で下記を設定したところ、重複関係なく全ての口座番号でエラーメッセージ
が出力されてしまいました。

VBA内でDCount関数を使用するときは、参照するコントロールは文字列の外にだす必要があります。""内にいれたら単なる文字列ですのでコントロールを参照できません。下記のようにしてください。

DCount("口座番号", "T_機械設定", "[口座番号]='" & Me.cmb_口座番号 & "'")=0

作業者が、現在作業中の機械設定を登録しようとした時、設定が既に登録されていた場合を想定して
重複エラーのメッセージを入力工程の ”なる早" で出したいと思い、

ご希望のことは、
「F_機械設定入力」の「cmb_口座番号」には、「T_機械設定」にすでに存在している口座番号は入力できないようにしたい。
ということですよね。

ならば、メッセージを出すより、最初から「cmb_口座番号」のドロップダウンリストからすでに存在している口座番号を除いておいて選択できないようにするのがいいでしょう。

「cmb_口座番号」の値集合ソースに下記のSQLを設定。

SELECT T_ORDER.* 
FROM T_ORDER LEFT JOIN T_機械設定
 ON T_ORDER.口座番号 = T_機械設定.口座番号
WHERE T_機械設定.口座番号 Is Null;

「cmb_口座番号」のフォーカス取得時のイベントプロシージャを下記のように記述。

Private Sub cmb_口座番号_Enter()
    Me.cmb_口座番号.Requery
End Sub

これで「T_機械設定」に既に存在する口座番号はリストに表示されないので選択できません。

リストから選択せずにテキストボックス部に直接入力した場合に備えて、
「cmb_口座番号」の「入力チェック」プロパティを「はい」に設定して、
リスト外入力時のイベントプロシージャを下記のように記述します。

Private Sub コンボ7_NotInList(NewData As String, Response As Integer)
    MsgBox NewData & "は既に存在するために入力できません。"
    Response = acDataErrContinue '既定のメッセージをユーザーに表示しない
End Sub
2
hiroton 2024/02/08 (木) 17:10:57 34d4e@f966d

レコードセット取得して前のレコードと今のレコードの値を比較したらいいんじゃないですかね?

1

数値フィールドで昇順に並べ替えたらIDの昇順連番は担保されません。

6
Happy87 2024/02/06 (火) 16:02:55

遅まきながら参加させてください(汗)。

hiroton さんがレスされていたように、時代は「クラウド」で「ノーコード」で「RPA」だ・・・とは思います。
自分は前任担当者が作りこんだRPAを使っている立場(エラーが出たら、そこだけ人力で解決する)ですが、
周りでVBA信者?みたいな人がいるので、困っています。

先日もインターネット上にアップロードするファイルのファイルサイズをチェック(1ファイルあたりの
上限が決まっている)するのに、「VBAで組んだらチェックできるし」と言われて目がテンになりました。

いやいや、そもそも「ファイル準備するときに担当者がファイルサイズ目視して確認すれば良くね?」って
思うんですよね。
RPAの処理のなかにアレコレ組み込みすぎると、その人がいなくなった時にメンテできなくなりますし、
困るじゃないですか。
(もともとRPAで参照しているDBがAccess DBなので、個人的にはRPAでも複雑な分岐処理を入れるのは
良くないと考えています。)

RPAだって万能ではないのに、VBA無敵?みたいな感じで「24時間、ノーチェック(要は無人でOK)で
処理できるから」と言い出して、他の担当者と「いや、それ無理ですよ」って伝えたのですが、
聞く耳持たず。。。

そもそもネットワーク遅延などの外的要因も関係するのに、「VBAサイコー!」とか「RPAは何でもOK!」
みたいな考えは(ご本人は自分のプログラミングスキルなどに自信があるのかもしれませんが)
キケンだと言いたいです。

 こっちは運用のこととか、業務のことなどを広い視野で見て&考えて意見を伝えているのですが、
「自分が正しい」とか逆ギレしそうなので(昨年、外に出すモノの品質に問題があったので
問題点を伝えたところ、「自分が確認しているんだから問題ない!」と強い口調で言い返されたので、
それ以降は「知らぬ存ぜぬ」で当人に伝えることを諦めました)、
マジで困っています(泣)。

 あ、愚痴みたいになってしまってスミマセン。。。

33
wazawaza 2024/02/06 (火) 10:58:06

hatenaさん
先程ご提示していただいた文で、問題解決出来ました!!
ありがとうございます!

ハイパーリンクを設定した非連結テキストボックスで、入力すると表示テキストのみになるのだと思われます。
つまりハイパーリンクアドレスは無し""という状態

ハイパーリンクの構造を理解していない上に、非連結を使って入力をした事で混乱を招いてしまったのですね...。
申し訳ございませんでした。

他にも型チェック、参照整合性チェックなど、考慮しなければならないことか多数あります。
複数ユーザーで共有する場合、排他処理なども必要になってきます。
これらのことをすべて実装するとなるとなまはんかのスキルでは無理です。
これらを実装できたとして、連結にくらべてどれほどのメリットがあるのかはなはだ疑問なので、
私自身は非連結はほとんど使いません。
複数ユーザーで共有する場合は、安定性を高めるために非連結にすべきという意見も散見しますが、
上記の点についての言及はほとんど見ません。

VBA関連の書籍のキャッチフレーズに「現場で即使える」と謳われるものが沢山ありますが
現場から要求されるリクエストは、書籍に載っていないものが圧倒的多いように感じますので
hatenaさんの仰る通り、全ての要求に応えられるにはハイレベルのスキルが求められますね。

今回はハイパーリンクについて、hatenaさん・skさんに沢山学ばせていただきました。
長々とお付き合いいただき、改めてお礼申し上げます!ありがとうございます!

まだまだ聞きたいことは沢山あるのですが、それはまた改めて聞きたいと思います。
ありがとうございました!!これからもよろしくお願いいたします!

32

非連結フォームの設計は、連結フォームならAccessが自動でいろいろしてくれていることをすべて自前で処理する必要がでてきます。
非連結で設計するということは、このAccessが裏でやっていてくれてることを理解、把握しておく必要があります。

ハイパーリンクは格納されているデータと表示されているテキストが一致していないというのが、難しくなる原因です。
他にも日付/時刻型もそうです。

他にも型チェック、参照整合性チェックなど、考慮しなければならないことか多数あります。
複数ユーザーで共有する場合、排他処理なども必要になってきます。

これらのことをすべて実装するとなるとなまはんかのスキルでは無理です。
これらを実装できたとして、連結にくらべてどれほどのメリットがあるのかはなはだ疑問なので、
私自身は非連結はほとんど使いません。

複数ユーザーで共有する場合は、安定性を高めるために非連結にすべきという意見も散見しますが、
上記の点についての言及はほとんど見ません。

複数ユーザーで共有することで不安定になるような規模のシステムなら、すでにAccessではなく他のRDBを検討すべきだと思います。
あくまで私見ですので参考程度に。

31

コンパイルエラーは解消されましたが、今度は直前にテキストボックスに入力したPC内のファイルパスが
更新ボタンをクリックしたと同時に消えてしまいます。

以下に関しては私の推測です。試してみたわけではありまん。

まず、skさんの回答にもありましたがハイパーリンクの内部的な書式は下記になります。

表示テキスト#ハイパーリンクアドレス#サブアドレス#ヒントテキスト

ハイパーリンクを設定した非連結テキストボックスで、入力すると表示テキストのみになるのだと思われます。
つまりハイパーリンクアドレスは無し""という状態

対応策としては、ハイパーリンクアドレスがあればその前後に"#"を付ける。
なければ、表示テキストの前後に"#"を付ける。

    Dim sAddress As String
    sAddress = HyperlinkPart(Me("txt_詳細リンク" & R).Value, acAddress)
    If sAddress <> "" Then
        sAddress = "#" & sAddress & "#"
    Else
        sAddress = HyperlinkPart(Me("txt_詳細リンク" & R).Value, acDisplayText)
        If sAddress <> "" Then sAddress = "#" & sAddress & "#"
    End If

このように状況、原因を調べて、対策を考えるという手順を踏みます。
あくまで、推測なのでこれでうまくいくとは限りません。

29
wazawaza 2024/02/05 (月) 14:56:28 修正

hatenaさん、長々とお付き合い頂いてありがとうございます。
skさんもありがとうございます!とても感謝しております!!
デバック方法については書籍を参考に試してみます。
特に急ぐようなことでは無いので、時間をかけて学習してみます。
ありがとうございました。

1

テーブル名 には実際にはどのような名前がはいってますか。
テーブル名に使用すべきでない文字が含まれているとそのようエラーになります。
そのような場合、名前の前後に"[" "]"を付けると回避できます。

下記のように変更したらどうでしょう。

rsM.Open "[" & テーブル名 & "]" , cn , adOpenStatic, adLockOptimistic

可能ならばこのような特殊文字は使わないテーブル名に変更することをお勧めします。

Access データベースで特殊文字を使用したエラー - Microsoft 365 Apps | Microsoft Learn

28

コンパイルエラーは解消されましたが、今度は直前にテキストボックスに入力したPC内のファイルパスが
更新ボタンをクリックしたと同時に消えてしまいます。

skさんの#12の回答のSQLでどのような状態で格納されているか確認して、表示されない原因と対策を考えましょう。

私が思うに非連結でいくなら、テキストボックスの「ハイパーリンクあり」は「いいえ」に設定しておいた方がいいように思います。


実際にサンプルを作成して動作確認しているわけではないので、推測で提案しています。

非連結フォームの設計はかなりのスキルが要求されます。
連結でできていたものを、勉強のために非連結に変更しているということなので、
このような不具合を自分で解決できるようなスキルアップが必要ということです。
そのためにはまずはデバッグ方法を学習しましょう。
これを使って原因の追究、解決を繰り返すことによってスキルがアップします。
「VBA デバッグ」をキーワードにググれはいろいろ解説ページが見つかるので、
そこでデバッグの方法の理解を深めることをお勧めします。

27
wazawaza 2024/02/03 (土) 23:54:21

hatenaさん
コンパイルエラーは解消されましたが、今度は直前にテキストボックスに入力したPC内のファイルパスが
更新ボタンをクリックしたと同時に消えてしまいます。私の書き方に問題ありますか?

 Private Sub btn_更新_Click()
  Dim sqlList As Collection
  Set sqlList = New Collection  'コレクションを作成
  
  〜省略〜

  Dim R As Long
  For R = 1 To 10
  
  If Nz(Me("txt_特記ID" & R).Value, "") <> "" Then  '「txt_特記ID」が空でなければ

    Dim sAddress As String
    sAddress = HyperlinkPart(Me("txt_詳細リンク" & R).Value, acAddress)
    If sAddress <> "" Then sAddress = "#" & sAddress & "#"
  
    '実行
     strSQL = _
      "UPDATE T_特記事項 " & _
      "SET " & _
        "口座番号 = '" & Me.txt_口座番号.Value & "', " & _
        "特記事項 = '" & Me("txt_特記事項" & R).Value & "', " & _
        "特記事項詳細 = '" & sAddress & "' " & _
      "WHERE ID = " & Me("txt_特記ID" & R).Value & ";"
      sqlList.Add strSQL
  ElseIf Not IsNull(Me("txt_特記事項" & R).Value) Then '「txt_特記事項」が空でなければ
    strSQL = _
      "INSERT INTO T_特記事項 (口座番号, 特記事項, 特記事項詳細) " & _
      "VALUES" & _
        "('" & Me.txt_口座番号.Value & "', " & _
        "'" & Me("txt_特記事項" & R).Value & "', " & _
        "'" & Me("txt_詳細リンク" & R).Value & "');"
      sqlList.Add strSQL
    End If
  Next R
  
'「T_クレーム履歴」のデータを更新する
   
  Dim Z As Long
  For Z = 1 To 10
  
  If Nz(Me("txt_クレームID" & Z).Value, "") <> "" Then  '「txt_クレームID」が空でなければ
  
    sAddress = HyperlinkPart(Me("txt_クレーム詳細リンク" & Z).Value, acAddress)
    If sAddress <> "" Then sAddress = "#" & sAddress & "#"
  
    '実行
    strSQL = _
      "UPDATE T_クレーム履歴 " & _
      "SET " & _
        "口座番号 = '" & Me.txt_口座番号.Value & "', " & _
        "発生年月 = '" & Me("txt_発生年月" & Z).Value & "', " & _
        "クレーム内容 = '" & Me("txt_クレーム内容" & Z).Value & "', " & _
        "是正処置 = '" & Me("txt_是正処置" & Z).Value & "', " & _
        "クレーム詳細 = '" & sAddress & "' " & _
      "WHERE ID = " & Me("txt_クレームID" & Z).Value & ";"
      sqlList.Add strSQL
  ElseIf Not IsNull(Me("txt_クレーム内容" & Z).Value) Then '「txt_クレーム内容」が空でなければ
    strSQL = _
      "INSERT INTO T_クレーム履歴 (口座番号, 発生年月, クレーム内容, 是正処置, クレーム詳細) " & _
      "VALUES" & _
        "('" & Me.txt_口座番号.Value & "', " & _
        "#" & Me("txt_発生年月" & Z).Value & "#, " & _
        "'" & Me("txt_クレーム内容" & Z).Value & "', " & _
        "'" & Me("txt_是正処置" & Z).Value & "', " & _
        "'" & Me("txt_クレーム詳細リンク" & Z).Value & "');"
      sqlList.Add strSQL
    End If
  Next Z

26
If sAddress <> "" Then sAddress = "#" & sAddress & "#"
25
wazawaza 2024/02/03 (土) 13:57:11

何度もスミマセン。
今度は下記で「コンパイルエラー 変数が定義されていません」となりました。
If sAddress <> "" Then s = "#" & sAddress & "#"

24

「コンパイルエラー 変数が定義されていません」となり
If sAddress <> "" Then s = "#" & Address & "#"
となりました。

あっ、すみません。タイプミスです。下記に修正してください。
If sAddress <> "" Then s = "#" & sAddress & "#"

HyperlinkPartという関数、初め見たかもしれません。

私の 6 の回答でリンクを置いてます。

23
wazawaza 2024/02/02 (金) 15:46:27

hatenaさん
提示していただいた文に差し替えてみたところ
「コンパイルエラー 変数が定義されていません」となり
If sAddress <> "" Then s = "#" & Address & "#"
となりました。

HyperlinkPartという関数、初め見たかもしれません。
勉強になります!

6

今回の場合はどちらでもいいでしょう。

例えば、特定の条件の場合はフォーカスさせずに別のコントロールにフォーカスさせたいというような場合は、取得時でないとだめですね。ただ、このような設計はたいてい悪手ですね。

特定の条件を満たすまで使用不可にしておくとか、、、ほかの方法を検討した方かいいです。

22

こんな感じでどうでしょうか。

  If Nz(Me("txt_特記ID" & R).Value, "") <> "" Then '「txt_特記ID」が空でなければ
    Dim sAddress As String
    sAddress = HyperlinkPart(Me("txt_詳細リンク" & R).Value, acAddress)
    If sAddress <> "" Then s = "#" & Address & "#"
    strSQL = _
      "UPDATE T_特記事項 " & _
      "SET " & _
        "口座番号 = '" & Me.txt_口座番号.Value & "', " & _
        "特記事項 = '" & Me("txt_特記事項" & R).Value & "', " & _
        "特記事項詳細 = '" & sAddress  & "' " & _
      "WHERE ID = " & Me("txt_特記ID" & R).Value & ";"
      sqlList.Add strSQL
21
wazawaza 2024/02/02 (金) 10:40:27

下記の文ですと、パスの前後に"が付いた状態で書き込まれていました。

"特記事項詳細 = '" & Me("txt_詳細リンク" & R).Value & "'"
20
wazawaza 2024/02/02 (金) 10:37:49

そして、修正文ありがとうございます。
早速試してみました。

"特記事項詳細 = '#" & HyperlinkPart(Me("txt_詳細リンク" & R).Value, acAddress) & "#' "

上記の文に修正をして、更新してみたところ
アドレス(パス)を書き込むことが出来ました。
が、ブランクのレコードには「##」と書かれていました。
19
wazawaza 2024/02/02 (金) 10:33:27

遅くなりました。
まずは「T_特記事項」「T_クレーム履歴」に関するSELECT文です。

 strSQL = _
    "SELECT ID, 特記事項, 特記事項詳細 " & _
    "FROM T_特記事項 " & _
    "WHERE 口座番号 = '" & Me.txt_口座番号.Value & "';"
    
  Set daoRs = daoDb.OpenRecordset(strSQL)

  Dim R As Long: R = 1
  Do Until daoRs.EOF = True
    If R > 10 Then
      MsgBox "表示できないレコードが存在しています", vbExclamation, "エラー"
      Exit Do
    End If
  
  Me("txt_特記ID" & R).Value = daoRs!ID
  Me("txt_特記事項" & R).Value = daoRs!特記事項
  Me("txt_詳細リンク" & R).Value = daoRs!特記事項詳細
  
    daoRs.MoveNext
    R = R + 1
  Loop
  
  daoRs.Close
   
  strSQL = _
    "SELECT ID, 発生年月, クレーム内容, 是正処置, クレーム詳細 " & _
    "FROM T_クレーム履歴 " & _
    "WHERE 口座番号 = '" & Me.txt_口座番号.Value & "';"
      
  Set daoRs = daoDb.OpenRecordset(strSQL)

  Dim Z As Long: Z = 1
  Do Until daoRs.EOF = True
    If Z > 10 Then
      MsgBox "表示できないレコードが存在しています", vbExclamation, "エラー"
      Exit Do
    End If
  
  Me("txt_クレームID" & Z).Value = daoRs!ID
  Me("txt_発生年月" & Z).Value = daoRs!発生年月
  Me("txt_クレーム内容" & Z).Value = daoRs!クレーム内容
  Me("txt_是正処置" & Z).Value = daoRs!是正処置
  Me("txt_クレーム詳細リンク" & Z).Value = daoRs!クレーム詳細
  
    daoRs.MoveNext
    Z = Z + 1
  Loop

  daoRs.Close