• ベストアンサー

Msgboxのループ

Do Until k > 12 If lbl_TenNm2(k).Caption <> "" Then Result = MsgBox("☆☆☆本日の品は☆☆☆" & vbCrLf & _ "『" & ラベル店名(0).Caption & "』" & "の" & vbCrLf & _ ラベル(k) & "を" & テキスト(k).Text & "個" & vbCrLf & _ "でよろしいですか?", vbYesNo, "確認") End If k = k + 1 Loop メッセージボックスで配列のラベルに入ったものを一度に表示したい場合どのような方法をとればよいのかまったく分かりません。もし、何か良い方法がおわかりの方がいましたら、教えてください。 お願いします。 上記の方法だと、メッセージボックスがその配列の数だけ出てきてしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • mataro
  • ベストアンサー率32% (18/55)
回答No.2

こんにちは、Mataroといいます。 質問の件ですが、MsgBoxをループ内に入れているのが問題です。先に表示する文字列を結合してからMsgBoxを使用すれば問題ありません。以下にあなたのプログラムを改造した例を載せます。 ちなみにmojiは表示する文字列です。 ----------------------- dim moji as string moji = "☆☆☆本日の品は☆☆☆" & vbCrLf & _ "『" & ラベル店名(0).Caption & "』"& _ "の" & vbCrLf Do Until k > 12 If lbl_TenNm2(k).Caption <> "" Then moji = moji & ラベル(k) & "を" & テキスト(k).Text & "個" & vbCrLf End If k = k + 1 Loop moji = moji & "でよろしいですか?", Result = MsgBox(moji, vbYesNo, "確認") ------------------------ これで動くと思います。 (ちなみにこのプログラムだと毎回12回ループすることになるのでDo ~ Loopの条件を見直せば処理効率も上がりますよ。 では、頑張ってください。

yuana
質問者

お礼

やはり、Msgboxをループ内に入れてるのが問題でしたよね。。。 Redimで格納領域を作ってみたりと色々やっては見たんですが。。。 そのような方法で格納できるのは勉強になりました。 教えていただいたとおりに実行してみましたところ、無事解決させて頂きました。 本当にありがとうございます。 これからもっと勉強していきたいと思いますのでアドバイスよろしくお願いします。

その他の回答 (2)

  • kagep
  • ベストアンサー率23% (171/721)
回答No.3

具体的なソースは他の方が完璧に答えていらっしゃるので、 考え方だけ述べますね。 まず 1、配列の中身を表示したい形でバッファ(メモリ領域のこと)に格納する。  #2の方のソースの下記部分です。   Do Until k > 12   If lbl_TenNm2(k).Caption <> "" Then   moji = moji & ラベル(k) & "を" & テキスト(k).Text & "個" & vbCrLf   End If   k = k + 1   Loop 2、配列の中身を全て取得したら、処理の結果としてメッセージボックスを出す。  #2の方のソースの下記部分です。   Result = MsgBox(moji, vbYesNo, "確認") つまり、メッセージボックスは全ての処理の最後の結果であって、 それまでにメッセージとして出す文字列を加工する必要がある、ということですね。 このように論理的に考えることが一番重要です。 がんばって!

yuana
質問者

お礼

方法がまったく見当がつかない状態だったので、説明して頂いてなるほど。。。と理解できました。 自分のやりたい事はハッキリとしてはいるのですが、論理的に考えるといったことがいつもできず、行き詰まってしまいます。 アドバイスありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

ラベルの例でなくテキストボックスの例ですが コントロール配列の例ではないですが 下記は参考になりませんか。 テキストボックス3つ、コマンドボタン1つ 配置して、実行。テキストに文字を入れ コマンドボタンをクリック。 Private Sub Command1_Click() Dim s As String s = "" s = s & Text1.Text & vbCrLf s = s & Text2.Text & vbCrLf s = s & Text3.Text MsgBox s End Sub

yuana
質問者

お礼

回答ありがとうございます。 imogasiさんのアドバイスはこれからの参考にしていきたいと思います。 またよろしくお願いします。

関連するQ&A