Microsoft Access 掲示板

フォーム内容の転記について / 13

14 コメント
views
4 フォロー
13
hiroton 2023/05/08 (月) 11:39:39 8b032@f966d

ループ処理はループ内のコードをそのまま繰り返します

hatenaさんも指摘していることですが、ループの最後で上書きするような処理はループ内に含める必要は薄いです。質問のコードも

For i = 1 To 5

Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i)

Next i

Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 5)

Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 5)

と何ら変わらないので意味のない(≒ダメな)コードです。hirotonの伝わらない回答もそんな感じのことを言っていました


ループ処理を使うときは「イニシャル部」「メイン部」「エンド部」(前処理、メイン処理、後処理)を考えるようにすると良いです
「最終的にやりたいこと」と「ループ処理させたら楽そうな部分」を明確にすることですね

以下、いくつか同様のことを成すコードを記述してみます

Forms![F_test2]![txtテキスト_1] = Me.txt子テキスト_1 & vbNewLine & Me.txt子テキスト_2 & vbNewLine & Me.txt子テキスト_3 & vbNewLine & Me.txt子テキスト_4 & vbNewLine & Me.txt子テキスト_5 & vbNewLine &
Forms![F_test2]![txtテキスト_1] = Me.txt子テキスト_1 & vbNewLine
Forms![F_test2]![txtテキスト_1] = Forms![F_test2]![txtテキスト_1] & Me.txt子テキスト_2 & vbNewLine
Forms![F_test2]![txtテキスト_1] = Forms![F_test2]![txtテキスト_1] & Me.txt子テキスト_3 & vbNewLine
Forms![F_test2]![txtテキスト_1] = Forms![F_test2]![txtテキスト_1] & Me.txt子テキスト_4 & vbNewLine
Forms![F_test2]![txtテキスト_1] = Forms![F_test2]![txtテキスト_1] & Me.txt子テキスト_5 & vbNewLine &
Dim memo As String
memo = Me.txt子テキスト_1 & vbNewLine
memo = memo & Me.txt子テキスト_2 & vbNewLine
memo = memo & Me.txt子テキスト_3 & vbNewLine
memo = memo & Me.txt子テキスト_4 & vbNewLine
memo = memo & Me.txt子テキスト_5 & vbNewLine
Forms![F_test2]![txtテキスト_1] = memo
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

「目的が達成されない」や「エラーが出る」などの不正解は簡単な話ですが、善し悪しを語るのはなかなかに難しい話ですね

通報 ...