
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
メッセージボックスで配列のラベルに入ったものを一度に表示したい場合どのような方法をとればよいのかまったく分かりません。もし、何か良い方法がおわかりの方がいましたら、教えてください。
お願いします。
上記の方法だと、メッセージボックスがその配列の数だけ出てきてしまいます。
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の条件を見直せば処理効率も上がりますよ。
では、頑張ってください。
やはり、Msgboxをループ内に入れてるのが問題でしたよね。。。
Redimで格納領域を作ってみたりと色々やっては見たんですが。。。
そのような方法で格納できるのは勉強になりました。
教えていただいたとおりに実行してみましたところ、無事解決させて頂きました。
本当にありがとうございます。
これからもっと勉強していきたいと思いますのでアドバイスよろしくお願いします。
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, "確認")
つまり、メッセージボックスは全ての処理の最後の結果であって、
それまでにメッセージとして出す文字列を加工する必要がある、ということですね。
このように論理的に考えることが一番重要です。
がんばって!
方法がまったく見当がつかない状態だったので、説明して頂いてなるほど。。。と理解できました。
自分のやりたい事はハッキリとしてはいるのですが、論理的に考えるといったことがいつもできず、行き詰まってしまいます。
アドバイスありがとうございました。
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
回答ありがとうございます。
imogasiさんのアドバイスはこれからの参考にしていきたいと思います。
またよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBA初心者です。 2 2022/10/10 11:52
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/03/28 14:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
構造体配列の特定のメンバーをF...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
レコードセットの中身を配列に...
-
配列のペースト出力結果の書式...
-
POSTリクエストの投げ方
-
VBAで配列引数を値渡しできない...
-
定数配列の書き方
-
VBAのワークシート関数で配列の...
-
配列からのCSVファイルの作...
-
大量の変数を定義するにはどう...
-
CheckBoxの配列化
-
COBOLの基本的な事なので...
-
EXCELを使って、アクセスログを...
-
デバイスマネージャーの一覧取得
-
複数のtextboxの処理を一括で行...
-
エクセル(VBA)の空白配列の削除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列の中の最大値とそのインデ...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
配列のペースト出力結果の書式...
-
COBOLの基本的な事なので...
-
複数のtextboxの処理を一括で行...
-
構造体配列の特定のメンバーをF...
-
大量の変数を定義するにはどう...
-
CheckBoxの配列化
-
Excelのメモリ(配列)の上限は2G...
-
VB6のメモリ解放に関して
-
ReDim PreserveよりもReDimが遅い
-
Excel2010のinputboxで複数デー...
-
定数配列の書き方
-
コンボボックスのインデックス...
-
EXCELを使って、アクセスログを...
-
レコードセットの中身を配列に...
おすすめ情報