[[20160929132157]] 『ComboBoxの空白を詰めるには』(俊) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ComboBoxの空白を詰めるには』(俊)

UserForm1UserForm2とあり
UserForm1
商品名   個数   
ComboBox1 ComboBox11
ComboBox2 ComboBox12

ComboBox9 ComboBox19
とあり

UserForm2
リストはRowSourceです
text 個数
リンゴ ComboBox1
バナナ ComboBox2
イチゴ ComboBox3
メロン ComboBox4

すいか ComboBox99
CommandButton1
とあります
CommandButton1を押したら
リンゴ 空白
バナナ ComboBox2=4
イチゴ 空白
メロン ComboBox4=2
の時に
UserForm1
商品名   個数   
ComboBox1=バナナ ComboBox11=4
ComboBox2=メロン ComboBox12=2
と詰めて入力がしたいです。
よろしくお願い致します

< 使用 Excel:Excel2007、使用 OS:Windows8 >


アイテムだけ羅列されても、さっぱり意味が判りません。

とりあえず、どうやってComboBoxに値をセットしていますか? その際、空欄だったらセットしないようなIf文を追加してはどうでしょうか?
(???) 2016/09/29(木) 15:50


 どうもよくわからないので 整理させてください。

 1.まず、実行環境としては UserForm1 と UserForm2 が ともに表示されていて
  UserFOrm2 での選択結果を UserFOrm1 に反映させる。この理解はあっていますか?

 2.という理解の上で説明を読んだ時に、何か不思議なというか、不自然な感じがするんです。
  私の理解が間違っていて、ごくごく自然な流れなのかもしれませんが。

 3.非常に数多くのComboBoxを配置していますが、ComboBoxというものは、その中にリストがあって
  そのリストの中から何かを選ぶためのものですよね。選ぶべきものが、こんなにたくさんあるのですか?
  UserForm1 には 商品用に 9 つもComboBoxがあり、かつ、その名前用にも 9 つもComboBoxがある。
  この 18個のCOmboBox は、何をするためのものなのか? 理解に苦しんでいます。
  もしかしたら、これらは 18個のTextBox(値の変更がないのならLabel) でいいのかな? さらには 1個のListBox でいいのかなと思ったりするんですが・・・

 4.UserForm2 の 説明ですけど

  リンゴ 空白 って、どこの何がリンゴ で どこの何が 空白 なんですか?
  また、バナナ ComboBox2=4  って、何が バナナで 何が 4 なんですか?

 ★どうも、ComboBoxというものを根本的に勘違いしておられるような気がしてなりません。

(β) 2016/09/29(木) 15:57


 1.理解はあっています
UserForm1は請求書でして

リストはRowSourceです
UserForm1で商品名と個数を選びbookに反映させてます
ComboBox1〜ComboBox9には商品名
ComboBox11〜ComboBox19には個数が
ComboBox1の商品の個数がComboBox11です

新たにUserForm2を作成して
商品名一覧TextBoxの横にComboBoxで個数を入力して
商品を選択する手間を省こうと考えてます
Label1〜Label99の横にComboBox1〜ComboBox99があります

Label1 ComboBox1
Label2 ComboBox2

Label99 ComboBox99
Label1の個数がComboBox1です

よろしくお願いいたします

(俊) 2016/09/29(木) 16:51


 >>リストはRowSourceです 

 わざわざ、こうレスしておられるその意図がわかりませんが(RowSOurceで規定してあろうがなかろうが、本件とは関係ありませんし、また質問もしていません)
 もしかしたら、すべてのCombBox のリストには同じものをセットしてあるといいたかった?

 いずれにしても、私の 1. についてのみ返事をいただいたわけですね。

 2.〜4. と ★ についてはいかがですか?

 やりたいことって、商品をいくつか選択し、その個数も指定して、それを
 どこかのブックのどこかのシートに選択されたものだけを転記したい。

 そういうことではないのですか?

 もし、そうであれば、現在のユーザーフォームの構え、構造自体が 不自然だなぁと
 (いいかえると、その目的達成のために 俊さんが考えられた仕様がおかしい?)

 もっと、簡単にすっきり制御できそうだなぁと とう思っているんです。

(β) 2016/09/29(木) 17:22


 あぁ、もしかしたら・・・

 すでに、請求書データを選択し請求書を作るための UserForm1 があって、それはそれで動いている。
 でも、どうも、その選択が面倒な仕組み。

 なので、別途、UserForm2 をつくり、そこで、「より簡単に」選択させ、それを、従来の UserForm1 に転記する。

 そのあとは UserForm1 で 請求書作成処理を行いたい。

 こんなことなんでしょうか?

 それなら、わからないこともないですが、βなら

 1.扱いにくい UserForm1 そのものを修正する。
 2.UserForm1 のことは忘れて、新たに、別ブックで、最初から 簡単に選べて、簡単に請求書が発行できるマクロを作る。

 いずれかでやりますねぇ。

(β) 2016/09/29(木) 17:27


 コメントしたように、あまり感心しない方法だと思いますが、それはさておき。

 USerForm2 では 99種類の選択が可能ですよね。
 一方で UserForm1 で受け入れ可能な数は 9 種類までですね。

 UserFOrm2 で 10種類以上の選択があったら、どうしますか?

 それと、UserForm1 側の各COmboBoxにイベントプロシジャは書かれているということはありますか?

(β) 2016/09/29(木) 18:00


 まぁ、とりあえず、想像ベースで。
 UserFOrm2側のComboBoxのRowSOurceはComboBox1側と同じものが設定されているとして
 LabelのCaptionもUserFOrm1側の商品用ComboBoxのリストの値と同じものが設定されているという前提です。

 でも・・・・
 99種類の名前をさがして、その場所のComboBoxで数字を選ぶんですよねぇ・・・
 かえって、入力しづらいことになりそうな・・・

 Private Sub CommandButton1_Click()
    Dim i As Long
    Dim x As Long

    With UserForm1
        For i = 1 To 9
            .Controls("ComboBox" & i).Value = ""
            .Controls("ComboBox1" & i).Value = ""
        Next

        For i = 1 To 99
            If Me.Controls("ComboBox" & i).Value <> "" Then
                x = x + 1
                If x > 9 Then
                    MsgBox "選択されたデータが多すぎるのですべてを転記できません"
                    Exit For
                Else
                    .Controls("ComboBox" & x).Value = Me.Controls("Label" & i).Caption
                    .Controls("ComboBox1" & x).Value = Me.Controls("ComboBox" & i).Value
                End If
            End If
        Next
    End With

 End Sub

(β) 2016/09/29(木) 19:10


βさん
ありがとうございました
別途、UserForm2 をつくり、そこで、「より簡単に」選択させ、それを、従来の UserForm1 に転記する。
そのあとは UserForm1 で 請求書作成処理を行いたかったのです
この度は本当にありがとうございました
(俊) 2016/09/30(金) 08:34

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.