advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 978 for チェックボックス (0.008 sec.)
[[20100407140308]]
#score: 5499
@digest: ecb014ce590301115b121245ac8e34bd
@id: 48744
@mdate: 2010-04-13T05:29:14Z
@size: 27664
@type: text/plain
#keywords: boxcount1 (101754), boxcount2 (65413), colm (55766), dicmax (54494), 用pr (52948), dibmax (52723), dictio (50119), dib (44793), 示コ (42061), combobox (41670), ボボ (36605), skey (35830), combobox6 (35584), 肢に (30956), combo1 (30937), update (30749), ス9 (26519), ス6 (26482), ンボ (25696), combobox5 (24956), 択肢 (19872), プ用 (18557), combobox3 (13824), 用di (12770), ボッ (9675), combobox2 (9507), コン (9326), private (8700), userform2 (7906), vbtab (7825), dictionary (7793), クス (7768)
『コンボボックスの連携と複数シートからの参照』(T_T)
はじめまして。 見よう見まねでマクロを使用しております。 同一ユーザーフォーム上にコンボボックス1〜9があり、 シート「@」には A B C D E F ・・・ 都道府県 市区町村 会社名 業種 資本金 設立年月 ←1・2行目は項目行です 東京都 千代田区 A社 化学品製造 1千万 大阪府 北区 C社 貿易商社 2億 東京都 荒川区 B社 通信 1億 東京都 千代田区 D社 加工業 1千万 ・ ・ シート「A」には A B C D E F ・・・ 都道府県 市区町村 会社名 部署名 担当者名 携帯番号 ←1・2行目は項目行です 東京都 千代田区 A社 営業部 あ氏 *** 東京都 荒川区 B社 製造部 い氏 ▼▼▼ 東京都 荒川区 B社 営業部 う氏 ○○○ 大阪府 北区 C社 購買部 え氏 ××× ・ ・ というリストがあります。 コンボボックス1に「@」シートのA列を選択肢として表示し コンボボックス1の選択肢によってコンボボックス2に「@」シートのB列を表示 コンボボックス2の選択肢によってコンボボックス3に「@」シートのC列を表示 コンボボックス3の選択肢によってコンボボックス4に「@」シートのD列を表示 というように連携させたグループ1のコンボボックス郡があります。そして、 コンボボックス5に「A」シートのA列を選択肢として表示 (東京都 コンボボックス5の選択肢によってコンボボックス6に「A」シートのB列を表示 コンボボックス6の選択肢によってコンボボックス7に「A」シートのC列を表示 コンボボックス7の選択肢によってコンボボックス8に「A」シートのD列を表示 コンボボックス8の選択肢によってコンボボックス9に「A」シートのE列を表示 ***以下は質問には直接関係ないかと思いますが、コードに影響するかもしれない!?ので・・・ コンボボックス9の選択肢によってラベル1に「A」シートのF列を表示 コンボボックス9の選択肢によってラベル2に「A」シートのG列を表示 コンボボックス9の選択肢によってラベル3に「A」シートのH列を表示 コンボボックス9の選択肢によってラベル4に「A」シートのI列を表示 コンボボックス9の選択肢によってラベル5に「A」シートのJ列を表示 コンボボックス9の選択肢によってラベル6に「A」シートのK列を表示 ****** というように連携させたグループ2のコンボボックス郡があります。 いずれのコンボボックスも重複は削除してリストを表示し、フォームを開いたときには何も選択されていない状態で表示されます。 これを、シート「@」のA列〜C列とシート「A」のA列〜C列は同じ内容なので、コンボボックス4〜6を省きたいと思っています。 つまり、 コンボボックス1に「@」シートのA列を選択肢として表示し コンボボックス1の選択肢によってコンボボックス2に「@」シートのB列を表示 コンボボックス2の選択肢によってコンボボックス3に「@」シートのC列を表示 コンボボックス3の選択肢によってコンボボックス4に「@」シートのD列を表示 *ここまでは同じ コンボボックス3の選択肢によってコンボボックス5に「A」シートのD列を表示 *シート「A」のA〜C列の絞込みは、コンボボックス1〜3のシート「@」のA〜C列絞込みで行われたことにする コンボボックス5の選択肢によってコンボボックス6に「A」シートのE列を表示 ***以下は質問には直接関係ないかと思いますが、コードに影響するかもしれない!?ので・・・ コンボボックス6の選択肢によってラベル1に「A」シートのF列を表示 コンボボックス6の選択肢によってラベル2に「A」シートのG列を表示 コンボボックス6の選択肢によってラベル3に「A」シートのH列を表示 コンボボックス6の選択肢によってラベル4に「A」シートのI列を表示 コンボボックス6の選択肢によってラベル5に「A」シートのJ列を表示 コンボボックス6の選択肢によってラベル6に「A」シートのK列を表示 ****** 要するに「都道府県・市区町村・会社名」の絞込みを1度ですませたいのです(シートを1つにまとめることは難しいです)。 こういったことは可能なのでしょうか? ご教授宜しくお願い致します。 ---- なんだかよく分かりませんが コードもどうなっているのかよく分かりませんし。。。 でも、ご説明だけを見ると > コンボボックス7の選択肢によってコンボボックス8に「A」シートのD列を表示 いま、「A」シートのD列を表示する為のコードを実行するきっかけが コンボボックス7の選択 に成っている様ですが それを コンボボックス3の選択で行えば良いのではないでしょうか。。。? コンボボックス6・7に表示する為のコードから順番に必要なら 表示以外の部分(絞り込みの部分)だけを コンボボックス2・3の選択で行うように変更する。 ・・・全然外してたら済みません。 (HANA) ---- 今現在はどのようにコードを組まれていますか? 重複を絞っていると言う事はDictionaryオブジェクトを使っているのでしょうかね? DictionaryであればKeyに対するItemをコンボボックスによって シート1の内容にしたりシート2の内容にしたり切り替えれば出来そうですね。 (momo) ---- わかりにくい質問で申し訳ありません。 現在のコードはだいたいこんな感じです。 (PCの不具合でファイルが開けなくなってしまいました。 以下のコードは少し前のもので、この後多少手直ししてあります。 質問しておきながら曖昧で大変申し訳ありません。 過去ログ[[20090924220534]]『同一フォーム上に2組の連携するコンボボックスを作成』(SJC)を ほとんどそのまま参考にさせて頂いています) (T_T) '*Microsoft Scripting Runtime への参照設定要 [ツール] → [参照設定] →[Microsoft Scripting Runtime] チェック ボックスをオンにする Option Explicit Private dic() As Scripting.Dictionary '第1グループ用 Private dicMax As Long '第1グループ用 Private Const BOXCOUNT1 = 4 '第1グループ用 Private dib() As Scripting.Dictionary '第2グループ用 Private dibMax As Long '第2グループ用 Private Const BOXCOUNT2 = 5 '第2グループ用 Private Sub ComboBox_Update(ByVal Combo1 As MSForms.ComboBox, _ ByVal Combo2 As MSForms.ComboBox, _ dictio() As Dictionary) Dim idx As Long Dim n As Long, i As Long Dim v idx = Combo1.ListIndex If idx < 0 Then Exit Sub n = Combo1.List(idx, 1) With Combo2 i = 0 .Clear For Each v In dictio(n).Keys .AddItem v .List(i, 1) = dictio(n).Item(v) i = i + 1 Next End With End Sub Private Sub UserForm_Initialize() Dim v, sKey As String Dim i As Long, colm As Long, k As Long, n As Long With Worksheets("@") v = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)). _ Resize(, BOXCOUNT1).Value End With dicMax = UBound(v) * BOXCOUNT1 '程度 ReDim dic(1 To dicMax) Set dic(1) = New Scripting.Dictionary k = 1 For i = 1 To UBound(v) n = 1 For colm = 1 To BOXCOUNT1 - 1 If Not IsEmpty(v(i, colm)) Then sKey = v(i, colm) If Not dic(n).Exists(sKey) Then k = k + 1 dic(n)(sKey) = k Set dic(k) = New Scripting.Dictionary n = k Else n = dic(n)(sKey) End If Next dic(n).Item(v(i, colm)) = Empty Next dicMax = k With ComboBox1 .List = Application.Transpose(Array(dic(1).Keys, dic(1).Items)) End With With Worksheets("A") v = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)). _ Resize(, 11).Value 'K列まで End With dibMax = UBound(v) * BOXCOUNT2 '程度 ReDim dib(1 To dibMax) Set dib(1) = New Scripting.Dictionary k = 1 For i = 1 To UBound(v) n = 1 For colm = 1 To BOXCOUNT2 - 1 If Not IsEmpty(v(i, colm)) Then sKey = v(i, colm) If Not dib(n).Exists(sKey) Then k = k + 1 dib(n)(sKey) = k Set dib(k) = New Scripting.Dictionary n = k Else n = dib(n)(sKey) End If Next dib(n).Item(v(i, colm)) = v(i, 8) & vbTab & v(i, 5) & vbTab & v(i, 6) Next dibMax = k With ComboBox5 .List = Application.Transpose(Array(dib(1).Keys, dib(1).Items)) End With End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Dim i As Long For i = dicMax To 1 Step -1 Set dic(i) = Nothing Next For i = dibMax To 1 Step -1 Set dib(i) = Nothing Next End Sub Private Sub ComboBox1_Change() ComboBox_Update ComboBox1, ComboBox2, dic() End Sub Private Sub ComboBox2_Change() ComboBox_Update ComboBox2, ComboBox3, dic() End Sub Private Sub ComboBox3_Change() ComboBox_Update ComboBox3, ComboBox4, dic() End Sub Private Sub ComboBox5_Change() ComboBox_Update ComboBox5, ComboBox6, dib() End Sub Private Sub ComboBox6_Change() ComboBox_Update ComboBox6, ComboBox7, dib() End Sub Private Sub ComboBox7_Change() ComboBox_Update ComboBox7, ComboBox8, dib() End Sub Private Sub ComboBox8_Change() ComboBox_Update ComboBox8, ComboBox9, dib() End Sub ---- 細かくは見ていませんが、参考にしてここまで作れるのであれば、逆転の発想で 最初のリストが1つになっていれば作れるんじゃないかな? と思うので 例えば Dim v(), buf, i As Long, j As Long With Worksheets("Sheet1") buf = .Range("A2").CurrentRegion.Columns("A:D").Value End With v = buf ReDim Preserve v(1 To UBound(buf), 1 To UBound(buf, 2) + 8) With Worksheets("Sheet2") buf = .Range("A2").CurrentRegion.Columns("D:K").Value End With For i = 1 To UBound(buf) For j = 1 To UBound(buf, 2) v(i, j + 4) = buf(i, j) Next j Next i Erase buf こんな感じでSheet1とSheet2のリストをくっつけた配列を作っておけば 複雑な事を回避して1組のDictionaryの制御で出来るのではないでしょうか? 丸付き数字はNetでは使えないのでSheet1、Sheet2と表記していますので変更してみてください。 (momo) ---- (momo)様 アドバイス有り難う御座います。 Sheet1とSheet2のリストをくっつけたリストを作ったことにして動かす・・・ ということでよいのでしょうか?(不勉強で申し訳ありません) 以前のコードも、過去ログの意味は理解できないままに 雰囲気でいじってみたら とりあえず上手く動いたので良しとした・・・というのが実際の所でして・・・。 教えて頂いたサンプルを拝見しつつ、またもや雰囲気でいじってみたのですが やはりちゃんと理解していないのでうまくいきません。 コンボボックス1にSheet1のA列3行目以下を重複削除で表示したいのですが Sheet2のA列項目名(=A1)、D列項目名(D1)、A列(=A3以下、重複削除)が表示されます。 このA列(=A3以下、重複削除)だけ表示させたいのですが)・・・。 コンボボックス1の表示リストがうまくいかないので、以下のコンボボックスも当然うまくいきません。 本当に申し訳ありませんがご指導頂ければ幸いです。 (T_T) >丸付き数字はNetでは使えないのでSheet1、Sheet2と表記しています・・・ 失礼致しました。 以下のコードsheet1、sheet2に修正致しました。 ‘*Microsoft Scripting Runtime への参照設定要 [ツール] → [参照設定] →[Microsoft Scripting Runtime] チェック ボックスをオンにする ‘<前提> Option Explicit Private dic() As Scripting.Dictionary Private dicMax As Long Private Const BOXCOUNT1 = 6 ◆ComboBoxの数 Private Sub ComboBox_Update(ByVal Combo1 As MSForms.ComboBox, _ ByVal Combo2 As MSForms.ComboBox, _ dictio() As Dictionary) '第3引数に 使用dictionaryオブジェクト名を入れる Dim idx As Long Dim n As Long, i As Long Dim v idx = Combo1.ListIndex If idx < 0 Then Exit Sub n = Combo1.List(idx, 1) With Combo2 i = 0 .Clear For Each v In dictio(n).Keys .AddItem v .List(i, 1) = dictio(n).Item(v) i = i + 1 Next End With End Sub Private Sub UserForm_Initialize() Dim sKey As String Dim colm As Long, k As Long, n As Long Dim v(), buf, i As Long, j As Long With Worksheets("sheet1") buf = .Range("A3").CurrentRegion.Columns("A:D").Value End With v = buf ReDim Preserve v(1 To UBound(buf), 1 To UBound(buf, 2) + 8) With Worksheets("sheet2") buf = .Range("A3").CurrentRegion.Columns("D:K").Value End With For i = 1 To UBound(buf) For j = 1 To UBound(buf, 2) v(i, j + 4) = buf(i, j) Next j Next i Erase buf dicMax = UBound(v) * BOXCOUNT1 '程度 ReDim dic(1 To dicMax) Set dic(1) = New Scripting.Dictionary k = 1 For i = 1 To UBound(v) n = 1 For colm = 1 To BOXCOUNT1 - 1 If Not IsEmpty(v(i, colm)) Then sKey = v(i, colm) If Not dic(n).Exists(sKey) Then k = k + 1 dic(n)(sKey) = k '★下位のComboBox用dic番号 Set dic(k) = New Scripting.Dictionary n = k Else n = dic(n)(sKey) End If Next dic(n).Item(v(i, colm)) = v(i, 6) & vbTab & v(i, 7) & vbTab & v(i, 8) & vbTab & v(i, 9) & vbTab & v(i, 10) & vbTab & v(i, 11) '---- 最後のComboBox6には F〜K列の値を連動させる Next dicMax = k With ComboBox1 '先頭レベルComboBox1の リストをセットする .List = Application.Transpose(Array(dic(1).Keys, dic(1).Items)) End With End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Dim i As Long For i = dicMax To 1 Step -1 Set dic(i) = Nothing Next End Sub Private Sub ComboBox1_Change() ComboBox_Update ComboBox1, ComboBox2, dic() End Sub Private Sub ComboBox2_Change() ComboBox_Update ComboBox2, ComboBox3, dic() End Sub Private Sub ComboBox3_Change() ComboBox_Update ComboBox3, ComboBox4, dic() End Sub Private Sub ComboBox5_Change() ComboBox_Update ComboBox5, ComboBox6, dic() End Sub Private Sub ComboBox6_Change() Dim ss As String Dim idx As Long Dim v As Variant With ComboBox6 idx = .ListIndex If idx < 0 Then Exit Sub v = Split(.List(idx, 1), vbTab) 'TABで結合された文字列をわける label1.caption = v(0) Label2.caption = v(1) Label3.caption = v(2) Label4.caption = v(3) Label5.caption = v(4) Label6.caption = v(5) End With End Sub *PC復活しました。 現在のコードは以下の通りです。 ‘*Microsoft Scripting Runtime への参照設定要 [ツール] → [参照設定] →[Microsoft Scripting Runtime] チェック ボックスをオンにする ‘<前提> Option Explicit Private dic() As Scripting.Dictionary 'sheet1用 Private dicMax As Long 'sheet1用 Private Const BOXCOUNT1 = 4 ‘sheet1用 ◆ComboBoxの数 Private dib() As Scripting.Dictionary 'sheet2用 Private dibMax As Long 'sheet2用 Private Const BOXCOUNT2 =5 'sheet2用 ◆ComboBoxの数 Private Sub ComboBox_Update(ByVal Combo1 As MSForms.ComboBox, _ ByVal Combo2 As MSForms.ComboBox, _ dictio() As Dictionary) '第3引数に 使用dictionaryオブジェクト名を入れる Dim idx As Long Dim n As Long, i As Long Dim v idx = Combo1.ListIndex If idx < 0 Then Exit Sub n = Combo1.List(idx, 1) With Combo2 i = 0 .Clear For Each v In dictio(n).Keys .AddItem v .List(i, 1) = dictio(n).Item(v) i = i + 1 Next End With End Sub ‘<sheet1を参照するコンボボックス> Private Sub UserForm_Initialize() Dim v, sKey As String Dim i As Long, colm As Long, k As Long, n As Long With Worksheets("sheet1") '------- sheet1のTree 作成 v = .Range("A3", .Cells(.Rows.Count, 1).End(xlUp)). _ Resize(, BOXCOUNT1).Value End With dicMax = UBound(v) * BOXCOUNT1 '程度 ReDim dic(1 To dicMax) Set dic(1) = New Scripting.Dictionary k = 1 For i = 1 To UBound(v) n = 1 For colm = 1 To BOXCOUNT1 - 1 If Not IsEmpty(v(i, colm)) Then sKey = v(i, colm) If Not dic(n).Exists(sKey) Then k = k + 1 dic(n)(sKey) = k '★下位のComboBox用dic番号 Set dic(k) = New Scripting.Dictionary n = k Else n = dic(n)(sKey) End If Next dic(n).Item(v(i, colm)) = Empty Next dicMax = k With ComboBox1 '先頭レベルComboBox1の リストをセットする .List = Application.Transpose(Array(dic(1).Keys, dic(1).Items)) End With ‘<Sheet2を参照するコンボボックス> With Worksheets("sheet2") ' ------- sheet2のTree 作成 v = .Range("A3", .Cells(.Rows.Count, 1).End(xlUp)). _ Resize(, 11).Value 'K列まで End With dibMax = UBound(v) * BOXCOUNT2 '程度 ReDim dib(1 To dibMax) Set dib(1) = New Scripting.Dictionary k = 1 For i = 1 To UBound(v) n = 1 For colm = 1 To BOXCOUNT2 - 1 If Not IsEmpty(v(i, colm)) Then sKey = v(i, colm) If Not dib(n).Exists(sKey) Then k = k + 1 dib(n)(sKey) = k '★下位のComboBox用dic番号 Set dib(k) = New Scripting.Dictionary n = k Else n = dib(n)(sKey) End If Next dib(n).Item(v(i, colm)) = v(i, 6) & vbTab & v(i, 7) & vbTab & v(i, 8) & vbTab & v(i, 9) & vbTab & v(i, 10) & vbTab & v(i, 11) '---- 最後のComboBox9には K列の値を連動させる Next dibMax = k With ComboBox5 '先頭のComboBox5 に リスト dib(1) をセット .List = Application.Transpose(Array(dib(1).Keys, dib(1).Items)) End With End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Dim i As Long For i = dicMax To 1 Step -1 Set dic(i) = Nothing Next For i = dibMax To 1 Step -1 Set dib(i) = Nothing Next End Sub ‘<Sheet1を参照するコンボボックス> Private Sub ComboBox1_Change() ComboBox_Update ComboBox1, ComboBox2, dic() '第3引数に 使用dictionaryオブジェクト名を入れる End Sub Private Sub ComboBox2_Change() ComboBox_Update ComboBox2, ComboBox3, dic() End Sub Private Sub ComboBox3_Change() ComboBox_Update ComboBox3, ComboBox4, dic() End Sub ‘<Sheet2を参照するコンボボックス> Private Sub ComboBox5_Change() ComboBox_Update ComboBox5, ComboBox6, dib() '第3引数に 使用dictionaryオブジェクト名を入れる End Sub Private Sub ComboBox6_Change() ComboBox_Update ComboBox6, ComboBox7, dib() End Sub Private Sub ComboBox7_Change() ComboBox_Update ComboBox7, ComboBox8, dib() End Sub Private Sub ComboBox8_Change() ComboBox_Update ComboBox8, ComboBox9, dib() End Sub Private Sub ComboBox9_Change() Dim ss As String Dim idx As Long Dim v As Variant With ComboBox9 idx = .ListIndex If idx < 0 Then Exit Sub v = Split(.List(idx, 1), vbTab) 'TABで結合された文字列をわける label1.caption = v(0) Label2.caption = v(1) Label3.caption = v(2) Label4.caption = v(3) Label5.caption = v(4) Label6.caption = v(5) End With End Sub ---- 今更気づきましたがSheet1とSheet2はA〜C列の行方向並びが同じではないんですね・・・ 行が違うだけで、必ず同じものが同じ行数だけあるんでしょうか? 同じなら、同じ並び順にすれば簡単なのですが(まぁこれはソートを掛ければ簡単ですが) 同じデータが無い場合はどう連携させていくのでしょう? 同じじゃないとすると・・・少しロジックに行き詰りました。(頭が回ってません><) (momo) ---- 一応動きました。。。 '------ Private dic As Object Private Const BoxCount1 = 4 '第1グループ用 Private Const BoxCount2 = 5 '第2グループ用 Private Const BoxCom = 3 '共通個数 '====== '====== Private Sub UserForm_Initialize() Dim tbl1 As Variant, tbl2 As Variant Dim i As Long, ii As Long Dim ky As String, kyi As Long Dim itm As String, itmi As Long Dim sdic As Object, sky As String Set dic = CreateObject("scripting.dictionary") Set sdic = CreateObject("scripting.dictionary") With Sheets("Sheet1") tbl1 = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row, BoxCount1).Value End With With Sheets("Sheet2") tbl2 = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row, 11).Value End With For i = 0 To BoxCount1 - 1 For ii = 3 To UBound(tbl1, 1) If i = 0 Then ky = "_T" Else ky = "" For kyi = 1 To i ky = ky & "_" & tbl1(ii, kyi) Next If i = BoxCom Then ky = ky & "_G" End If End If sky = ky & "_" & tbl1(ii, i + 1) If Not dic.exists(ky) Then dic(ky) = tbl1(ii, i + 1) Else If Not sdic.exists(sky) Then dic(ky) = dic(ky) & "_" & tbl1(ii, i + 1) End If End If sdic(sky) = Empty Next Next For i = 0 To BoxCount2 For ii = 3 To UBound(tbl2, 1) If i = 0 Then ky = "_T" Else ky = "" For kyi = 1 To i ky = ky & "_" & tbl2(ii, kyi) Next If i = BoxCom Then ky = ky & "_B" End If End If If i < BoxCount2 Then sky = ky & "_" & tbl2(ii, i + 1) If Not dic.exists(ky) Then dic(ky) = tbl2(ii, i + 1) Else If Not sdic.exists(sky) Then dic(ky) = dic(ky) & "_" & tbl2(ii, i + 1) End If End If sdic(sky) = Empty Else itm = "" For itmi = 1 To 6 itm = itm & "_" & tbl2(ii, itmi + 5) Next dic(ky) = itm End If Next Next With ComboBox1 Label_Clear ComboBox_Update "_T", ComboBox1 End With Set sdic = Nothing End Sub '====== '====== Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Set dic = Nothing End Sub '====== '====== Private Sub ComboBox_Update(ByVal stkm As String, ByVal Combo2 As MSForms.ComboBox) If Not dic.exists(stkm) Then Exit Sub With Combo2 .List = Split(dic(stkm), "_") If .ListCount = 1 Then .ListIndex = 0 End If End With End Sub '====== '====== Private Sub ComboBox_Clear(ByVal bxi As String) Dim num As Variant For Each num In Split(bxi, " ") Controls("ComboBox" & num).Clear Next End Sub '====== Private Sub Label_Clear() Dim i As Long For i = 1 To 6 Controls("Label" & i).Caption = "" Next End Sub '====== '====== Private Function ky_made(ByVal bxi As String) Dim num As Variant For Each num In Split(bxi, " ") ky_made = ky_made & "_" & Controls("ComboBox" & num).Text Next End Function '====== '====== Private Sub ComboBox1_Change() ComboBox_Clear "2 3 4 5 6" Label_Clear ComboBox_Update ky_made("1"), ComboBox2 End Sub '====== Private Sub ComboBox2_Change() ComboBox_Clear "3 4 5 6" Label_Clear ComboBox_Update ky_made("1 2"), ComboBox3 End Sub '====== Private Sub ComboBox3_Change() ComboBox_Clear "4 5 6" Label_Clear ComboBox_Update ky_made("1 2 3") & "_G", ComboBox4 ComboBox_Update ky_made("1 2 3") & "_B", ComboBox5 End Sub '====== Private Sub ComboBox5_Change() ComboBox_Clear "6" Label_Clear ComboBox_Update ky_made("1 2 3 5"), ComboBox6 End Sub '====== Private Sub ComboBox6_Change() Dim i As Long Dim ky As String Dim y As Variant ky = ky_made("1 2 3 5 6") If Not dic.exists(ky) Then Label_Clear Exit Sub End If y = Split(dic(ky), "_") For i = 1 To 6 Controls("Label" & i).Caption = y(i) Next End Sub '------ (HANA) 早速間違えてたので修正しました。2010/04/11 0:35 もう少し(笑)修正しました。 2010/04/12 13:55 ---- (HANA)様 有り難う御座います。 Sheet3にコマンドボタン2があり、それを押すとユーザーフォーム2が開き、 そのユーザーフォーム2に質問させて頂いたコードを含むマクロを書いています。 早速教えて頂いたコードを試してみようとしたところ、Sheet3に書いてある '---------------------------------- Private Sub CommandButton2_Click() UserForm2.Show End Sub '---------------------------------- が、「アプリケーション定義又はオブジェクト定義のエラーです」となってしまいます・・・。 原因が分かれば教えて頂けますか? 不勉強で申し訳ありません。宜しくお願い致します。 (T_T) ---- 念のためにお伺いしてみますが。。。。 Private Sub UserForm_Initialize() ↓ Private Sub UserForm2_Initialize() なんてやってませんよね? あとは。。。そのメッセージが出てデバッグボタンを押すと [UserForm2.Show]が黄色く成りますか? その後、[F8]キーを押して一行ずつコードを実行させてみて下さい。 それから、最初に書いておきますが ユーザーフォームはあまり分からないので 変なことをするかもしれません。 その時は、許して下さい。 (HANA) ---- >Private Sub UserForm2_Initialize() なんてやってませんよね? →はい。やっていないはずです。 (「Private Sub UserForm2_Initialize()」はNGってことで大丈夫ですよね・・・?) >[F8]キーを押して一行ずつコードを実行させてみて下さい →[UserForm2.Show]が黄色くなったまま動きません・・・。 >ユーザーフォームはあまり分からないので変なことをするかもしれません。 →こちらこそ何もわからずわがままばかりで・・・。 丁寧に教えて頂き感謝しています。 ありがとうございます。 きっと他の部分で組んだコードで何かおかしなことをしてしまっているのでしょうね。 少しやり直してみたいと思います。 アドバイスを色々と本当にありがとうございます。 (T_T) ---- >(「Private Sub UserForm2_Initialize()」はNGってことで大丈夫ですよね・・・?) はい、変更したらNGって事です。 UserFormの名前が変わったからと その部分まで変更して仕舞う方が過去に幾人か居られまして。。。 取り敢えず、 UserForm2.Show を実行するのではなく VBEの方から[ F5 ]で実行してみて貰うとどうでしょう? >少しやり直してみたいと思います。 でしたら、新しいブックを用意して ご提示のデータを使って(1・2行目が見出し。データは3行目から。 シート名は Sheet1,Sheet2) Sheet2はK列までデータを用意して貰って ユーザーフォームに コンボボックス1〜6 リスト1〜6を作成し、コードを貼り付け。 [F5]で実行 してみてもらえると良いのですが。 (HANA) ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/201004/20100407140308.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97004 documents and 608067 words.

訪問者:カウンタValid HTML 4.01 Transitional