質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

453閲覧

テーブルにフィルターを設定して変数に抽出されたレコードを代入したい

aaiiuueeooaiai

総合スコア10

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2022/01/22 11:43

初めましてお世話になります。

現在送り状作成アクセスを作成しております。
その中にある伝票番号テーブルの送付フラグコード=1のレコードの9番目のフィールドであるアドレスフィールドのレコードを変数の中にレコードの分だけ追加していきたいと考えております。

例えば変数をSTR(string型)とします。
送付フラグコード=1のレコードが伝票番号テーブルの中に3レコードありアドレスフィールドがすべてのレコードに記載されている場合、
STR=アドレス1アドレス2アドレス3
という形で格納したいと考えております。
このSTRの中に入っている文字列を利用して後々outlookの宛先であるTOに代入してメールを作成したいという目的があります。

vbaのコードとしては

1.Private Sub mailbtn_Click()
2.Dim RS As ADODB.Recordset
3.Dim CN As ADODB.Connection
4.Dim STR As String

5.Set CN = CurrentProject.Connection
6.Set RS = New ADODB.Recordset
7.Set RS = CN.Execute("伝票番号テーブル")
8.RS.Filter = "送付フラグコード=1"

9.Do Until RS.EOF
10. STR = RS.Fields(9)
11. RS.MoveNext
12. STR = STR+STR
13.Loop

14.RS.Close: CN.Close
15.Set RS = Nothing
16.Set CN = Nothing

17.End Sub
と最初に書いたのですが12行目が間違っており送付フラグコードが1の最後のレコードのアドレスが2回連続して代入されいているだけでした。
例えるなら"AA”のようにA+Aという感じになるだけでした。

do until ~Loopの使用例としてdebug.printを活用しているものが多いのですがそれだとイミディエイトウィンドウに
A
B
C
と記載されるだけで目的が果たせません。
私が理想とするのは
STR=ABC
という結果なのです。
12行目を削除するとSTR=Cと最終レコードのアドレスフィールドの文字にしかなりません・・・。

どなたか理想的な文字を取得する方法ご存じありませんでしょうか?

大変お手数ですがご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決済みのようですが、、、

現状

vba

1Do Until RS.EOF 2 STR = RS.Fields(9) 'フィールドの値をSTRに代入、例えば"A"とする 3 RS.MoveNext 4 STR = STR+STR ' "A"+"A"つまり"AA"がSTRに代入される 5Loop

ご希望の動作

vba

1Do Until RS.EOF 2 STR = STR & RS.Fields(9) 'STRの後にフィールドの値を付加してSTRに代入 3 'すでにSTRに"AB"が代入されていてフィールドの値が"C"なら"ABC"が代入される 4 RS.MoveNext 5Loop

ステップ実行で動作確認(デバッグ)する方法を習得するといいでしょう。

VBA デバッグの仕方

別案

GetStringメソッドを使えばループせずに一気に取得できます。

vba

1Private Sub mailbtn_Click() 2 Dim RS As ADODB.Recordset 3 Dim CN As ADODB.Connection 4 Dim STR As String 5 Set CN = CurrentProject.Connection 6 Set RS = New ADODB.Recordset 7 Set RS = CN.Execute("SELECT アドレス FROM 伝票番号テーブル WHERE 送付フラグコード=1") 8 STR = RS.GetString(adClipString, , "", " ") 9 RS.Close: CN.Close 10 Set RS = Nothing 11 Set CN = Nothing 12 13 Debug.Print STR '結果確認 14End Sub

投稿2022/01/23 01:47

編集2022/01/23 02:06
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

解決しました。
これが正しいのかは分かりませんがリストボックスに一度値を移した後に再度テキストボックスに値を代入しその値を変数に代入し文字列を取得しました。

投稿2022/01/22 15:14

aaiiuueeooaiai

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問