[[20160619223042]] 『ユーザーフォーム、セルの値をTextやListボックス』(ひなの) ページの最後に飛ぶ

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

 

『ユーザーフォーム、セルの値をTextやListボックスへ』(ひなの)

 またユーザーフォームについて教えていただけますとうれしいです。よろしくお願いします。

 Q.今回はユーザーフォームを開くとセルの値([A][B][C])をテキストやリストに表示させたいです。

 調べでは、下のコードで、できそうな気がするのですが、エラーばかりでどうにもなりません。
 何がいけないのでしょうか?

("Sheet1")

 	[A]	[B]	       [C]
 [1]	NO	品名	       容量
 [2]	A01	みかん   	1
 [3]	A02	りんご	        2
 [4]	A03	まんご  	3
 [5]	A04	グレープ	4
 [6]	A05	鉛筆    	5
 [7]	A06	消しゴム	6

 Private Sub UserForm2_Initialize()

 Dim lastRow As Long

        lastRow = Worksheets("Sheet1").Cells(.Rows.Count, 1).End(xlUp).Row + 1
         ME.List品名.List = Worksheets("Sheet1").Cells(lastRow, 1)

 End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


こうした定型的なことは、自分で発見するようなことではないので、
テキストなりWebなりをそのまままねるようにした方がよいと思います。
例えば、以下を参考にしてみてはどうですか?
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform03.html
(γ) 2016/06/19(日) 22:55

 是非、γさんの紹介されたページを参照しましょう。
 リストボックスへのセル範囲の登録のコード例Bに、今回の要件に偶然にも列数もドンピシャリのものが掲載されていますよ。

(β) 2016/06/20(月) 07:19


ありがとうございます( ✧Д✧)
あまり資料がなくて困ってたので、
しかもやりたいこと以上に乗ってる。
さっそく試してみます。
(ひなの) 2016/06/20(月) 10:19

 ありがとうございます。おかげさまで、

 エクセルの値をLISTBOXに取り込み
 LISTBOXの値をエクセルに書き出すまで、できちゃいました。

 Q1.しかし、標準モジュールで、
 「Sub myform1()」を「Sub 入力()」とかに変更するとエラーになります。
 普段なら何の名前でもOKなはずなので、何ででしょうか?
 変数か何かですか?

 Q2.「Private Sub UserForm_Initialize()」の箇所ですが、「UserForm」もそうです、普段はUserFormとNO入れるのにこの場合は入れないですね。複数UserForm使う場合は値迷子になりませんか?もしかして、一個しか使えないのかしら?

 Q3.よくばりが出てました、
 マルチページに設定するのにわかり易い資料ありましたら。うれしいです。

標準モジュール

Sub myform1()

    Load UserForm1
    UserForm1.Show vbModeles
End Sub

 Private Sub CommandButton1_Click()
 Dim lastRow As Long
 Dim i As Integer
'書き出すシート
    With Worksheets("Sheet4")
        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        For i = 1 To 3
            .Cells(lastRow, i).Value = ListBox1.List(ListBox1.ListIndex, i - 1)
        Next i
    End With
End Sub

Private Sub CommandButton2_Click()

    Unload Me
End Sub

Private Sub UserForm_Initialize()

    Dim lastRow As Long
    Dim myData
    '商品リストシート
        With Worksheets("Sheet1")
            myData = .Range(.Cells(1, 1), .Cells(Rows.Count, 3).End(xlUp)).Value
        End With
        'リストボックス内の列の大きさ
        With ListBox1
        '列の数
            .ColumnCount = 3
            '3列の大きさ
            .ColumnWidths = "40;100;50"
            .List = myData
        End With
End Sub

(ひなの) 2016/06/20(月) 12:40


 >>標準モジュールで、 「Sub myform1()」を「Sub 入力()」とかに変更するとエラーになります。

 ふつうはエラーになりません。どういうエラーですか? エラーメッセージを教えてください。

 >>.「Private Sub UserForm_Initialize()」
 >>複数UserForm使う場合は値迷子になりませんか?
 >>もしかして、一個しか使えないのかしら?

 迷子にはなりません。あくまでユーザーフォームモジュールは、それが書かれている特定のユーザーフォームに属しています。
 ですから、メモリーにLoad された時点で ユーザーフォームを制御するロジックは
 そのユーザーフォームのユーザーフォームモジュールに書かれた UserForm_Initialize という名前のプロシジャを動かします。
 なので、はい、1つのユーザーフォームモジュールには1つしか書けません。

 ときどき Private Sub UserForm1_Initialize() と書いている人を見受けます。
 これは ユーザーフォーム制御ロジックから見れば、【見知らぬ名前のプロシジャ】、Sub 花子() と同じです。
 ですから、永久に実行されません。でも、コンパイルエラーにはならないので、おかしいおかしいという質問を目にすることも
 ありますね。

 >>マルチページ

 参考にされたページ、リストボックスの説明セクションですが、このページの一番上のバナーで 目次をクリックすると
 22.ユーザーフォームを利用する というところにそのほかのコントロールの説明もありますが、残念ながら、マルチページの
 説明は含まれていません。

 【ユーザーフォーム マルチページ】といったものでネット検索してみてください。
 説明ページがたくさんヒットします。その中で、ひなのさんがわかりやすそうなものを選んで勉強されてはいかがでしょう。

http://excel-vba-links.com/%E6%9C%AA%E5%88%86%E9%A1%9E/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9A%E3%83%BC%E3%82%B8.html

 ↑は、マルチページ関連のページのリンク集です。

(β) 2016/06/20(月) 13:36


≫標準モジュールで、 「Sub myform1()」を「Sub 入力()」とかに変更するとエラーになります。

マクロが見つかりません。というエラーメッセージです。
でもそれはあたりまえです。

「Sub myform1()」でマクロ登録しているのに
「Sub 入力()」に変更した場合は再度マクロ登録しないといけないのに、
私してなかったので、エラーが発生したのです。 σ(馬゚д゚鹿)

 >>.「Private Sub UserForm_Initialize()」
 >>複数UserForm使う場合は値迷子になりませんか?

あっそっか UserForm1 には UserForm1のモジュールがあって
UserForm2にはUserForm2のモジュールがあるので迷子にはならないですね。

マルチページはチャレンジしてみます。

ありがとうございます。理解できました。

(ひなの) 2016/06/20(月) 18:20


コメント返信:

[ 一覧(最新更新順) ]


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