エクセルのマクロ(データベースの登録フォーム)について 削除
Message#3 2014年12月16日(火)14時07分 From: マスタージョイン |
ご質問の内容は やりたい事が解りやすく整理されていて 質問者の素養が感じられて好印象をえました! そこで、どうせなら1から始めましょう 1)とりあえず1言 産地コード、産地-->産地マスタ シートを作成して置く 種別コード、種別-->種別マスタ シートを作成して置く --都道府県コード(JIS規格) 産地マスタ--- A列 、 B列 産地コード、産地名 1 北海道 2 青森県 3 4 5 6 : : : : 47 沖縄県 ----------------------------- 2)TextBox3~TextBox8はやめて ComboBox1~ComboBox6に変更しましょう。理由は いちいち都道府県をテキスト入力するのは効率が悪いしタイプミスもあり得るので次に説明する方法でComboBoxにセットしておきましょう。 ///////コンボ設定方法////// VBAエディターで左ペインのUserForm1を右クリック->コード表示を左クリック 右ペインの左上▼でUserform を選択 右上の▼でInitialize を選択すると以下のような空っぽのイベントサブプロシージャができます。 これは、ユーザーフォームがShow ()やLoadで メモリに最初に読み込まれた時に1回だけ発生するイベントです。 HideのあとのShowでは発生しません。 ちなみにUserForm_Activate()イベントはアクティブになるたびに呼び出されるイベントです。どのタイミングでマスタを読むのか? たとえば商品マスタなどは稼働中に追加変更される場合を考えてUserForm_Activate()やWorkSheet_Change()イベントなどでComboBoxを再設定します。 ここでは都道府県なので、フォーム表示中の変更は無いはずなのでInitialize()で良いと思います。 [動作条件] Sheets("産地マスタ")に上記説明の都道府県データが有ること。 UserForm1.Show (vbModeless)でテストしてみてください。 ■以下をUserForm1のコード域へコピペしてください■ Private Sub ComboBox1_Change() TextBox9 = ComboBox1.Value End Sub Private Sub ComboBox2_Change() TextBox10 = ComboBox2.Value End Sub Private Sub ComboBox3_Change() TextBox11 = ComboBox3.Value End Sub Private Sub ComboBox4_Change() TextBox12 = ComboBox4.Value End Sub Private Sub ComboBox5_Change() TextBox13 = ComboBox5.Value End Sub Private Sub ComboBox6_Change() TextBox14 = ComboBox6.Value End Sub Private Sub UserForm_Initialize() Dim Rmax As Long Dim i As Byte Dim c As Byte With Sheets("産地マスタ") '1行目が見出しの場合沖縄は48行目ですが '最終行を得る方法として 最下行からCTRL+↑で止まったセルの行を得る方法が一般的です '他にSpecialCells()でVBA内の既定の定数を利用して範囲指定する場合もあります 'xlCellTypeConstants 定数が含まれているセル 定数値= 2 'xlCellTypeFormulas 数式が含まれているセル 定数値= - 4123 'この場合以下の2行の結果Rmaxの値は同じですが 途中に空白行があると結果は異なります。 ' 別法 Rmax = .Columns(1).SpecialCells(xlCellTypeConstants).Rows.Count Rmax = .Cells(Cells.Rows.Count, "A").End(xlUp).Row For i = 2 To Rmax For c = 1 To 6 Controls("Combobox" & c).ColumnCount = 2 Controls("Combobox" & c).TextColumn = 2 Controls("Combobox" & c).BoundColumn = 1 Controls("Combobox" & c).ColumnWidths = "0.4 Cm;2 Cm" Controls("Combobox" & c).AddItem Controls("Combobox" & c).List(i - 2, 0) = .Cells(i, "A") '産地名code Controls("Combobox" & c).List(i - 2, 1) = .Cells(i, "B") '産地名 Next Next End With End Sub 今後私宛に質問くだされば、何度でも回答します。段階的に行きましょう! |
上のメッセージを削除します。
よければパスワードを入力し、削除ボタンをクリックしてください。