返回列表 上一主題 發帖

[發問] 如何大量建立COMBOBOX 表單方式

[發問] 如何大量建立COMBOBOX 表單方式

大家好
    小弟最近想使用VBA建立自己畫面的下拉式表單功能,但因為相關選單實在太多,有什麼比較快的方式作宣告嗎??
例如以下:光一個COMBOBOX1就有32個需要宣告
而COMBOBOX又有20個需要做一樣的宣告
這樣我就必須寫32*20=640個
雖然可以做,但實在是太佔版面,所以有什麼好建議嗎??


ComboBox1.AddItem "aiSV4"     '----------------1
ComboBox1.AddItem "aiSV20"     '----------------2
ComboBox1.AddItem "aiSV40"     '----------------3
ComboBox1.AddItem "aiSV80"    '----------------4
ComboBox1.AddItem "aiSV160"    '----------------5
ComboBox1.AddItem "aiSV360"    '----------------6
ComboBox1.AddItem "aiSV4/4"    '----------------7
ComboBox1.AddItem "aiSV4/20"    '----------------8
ComboBox1.AddItem "aiSV20/20"    '----------------9
ComboBox1.AddItem "aiSV20/40"   '----------------10
ComboBox1.AddItem "aiSV40/40"   '----------------11
ComboBox1.AddItem "aiSV40/80"   '----------------12
ComboBox1.AddItem "aiSV80/80"   '----------------13
ComboBox1.AddItem "aiSV80/160"   '----------------14
ComboBox1.AddItem "aiSV160/160"  '----------------15
ComboBox1.AddItem "aiSV4/4/4"   '----------------16
ComboBox1.AddItem "aiSV20/20/20" '----------------17
ComboBox1.AddItem "aiSV20/20/40" '----------------18
ComboBox1.AddItem "aiSV40/40/40" '----------------19
ComboBox1.AddItem " "            '----------------20
ComboBox1.AddItem "aiSV10 HV"   '----------------21
ComboBox1.AddItem "aiSV20 HV"  '----------------22
ComboBox1.AddItem "aiSV40 HV"  '----------------23
ComboBox1.AddItem "aiSV80 HV"  '----------------24
ComboBox1.AddItem "aiSV180 HV" '----------------25
ComboBox1.AddItem "aiSV360 HV" '----------------26
ComboBox1.AddItem "aiSV10/10 HV" '----------------27
ComboBox1.AddItem "aiSV20/20 HV" '----------------28
ComboBox1.AddItem "aiSV20/40 HV" '----------------29
ComboBox1.AddItem "aiSV40/40 HV" '----------------30
ComboBox1.AddItem "aiSV40/80 HV" '----------------31
ComboBox1.AddItem "aiSV80/80 HV" '----------------32

把可以規則化的部分拆開來用 For 取代

ex
ComboBox1.AddItem "aiSV20/20"    '----------------9
ComboBox1.AddItem "aiSV20/40"   '----------------10
ComboBox1.AddItem "aiSV40/40"   '----------------11
ComboBox1.AddItem "aiSV40/80"   '----------------12
ComboBox1.AddItem "aiSV80/80"   '----------------13
ComboBox1.AddItem "aiSV80/160"   '----------------14
ComboBox1.AddItem "aiSV160/160"  '----------------15

for w = 20  to 140 Step 20
ComboBox1.AddItem "aiSV" &  w &  "/"  & w   
ComboBox1.AddItem "aiSV" &  w &  "/"  & (w  *2  )
next

TOP

回復 1# lichang
  1.     Dim ar
  2.     '有幾個填幾個
  3.     ar = Array("aiSV4", _
  4.                 "aiSV20", _
  5.                 "aiSV40", _
  6.                 "aiSV80", _
  7.                 "aiSV160")
  8.                     
  9.     'combobox1 to combobox20
  10.     For i = 1 To 20
  11.         Controls("ComboBox" & i).List = ar
  12.     Next
複製代碼
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

回復 3# stillfish00

超強,謝謝您的解惑!!
測試ok!!

TOP

本帖最後由 mark15jill 於 2015-3-30 23:30 編輯

回復 3# stillfish00

留幾個伏筆讓你練習...
以下程式碼為動態創 8*4 個combobox   每個combobox 自動加入 32筆資料(範例檔  資料我是丟在E欄位)
置於 動態新增的combobox 變更時,就要妳自己去設定想要的功能+變數了~


  1. Dim  thecombobox() As New Class1 '動態陣列 宣告為新的Class1物件類別物件

  2. Private Sub ComboBox1_Change()

  3. End Sub

  4. Private Sub CommandButton1_Click()
  5.      Dim mycombobox1 As MSForms.ComboBox

  6.     Dim Sh As Worksheet
  7.      Set Sh = ActiveSheet

  8.     kk = 1

  9.     For sjy = 1 To 400 Step 100

  10.         For sja = 1 To 800 Step 100

  11.             With Frame1.Controls.Add("forms.combobox.1")
  12.                 Sh.Cells(kk, 3) = .Name
  13.                 .Left = 10 + sja
  14.                 .Top = 10 + sjy
  15.                 .Width = 90
  16.                 .Height = 20

  17.                 .TextAlign = fmTextAlignCenter

  18.                 .BackColor = &HFFFFC0

  19.                 '.a = Sh.Cells(kk, 1)
  20.                  ReDim Preserve thecombobox(0 To kk - 1)              '重新配置 動態陣列
  21.                 Set thecombobox(kk - 1).xlcombobox = Controls(.Name)
  22.                 '動態陣列的元素 指定到物件模組內的物件
  23.             For ewk = 1 To 32
  24.                  eee = Cells(ewk, 5)
  25.                 thecombobox(kk - 1).xlcombobox.AddItem (eee)
  26.             Next
  27.             End With

  28.             kk = kk + 1

  29.         Next

  30.     Next

  31. End Sub

  32. Private Sub UserForm_Click()

  33. End Sub
複製代碼
自創checkbox核選 完成版5 下拉測試.rar (26.84 KB) 自創checkbox核選 完成版5 下拉測試.rar (26.84 KB)

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

回復 3# stillfish00

那請問一下喔!!那我的COMBOBOX_CLICK 有辦法一樣的方式處理嗎??

TOP

回復 6# lichang
如果要共用 Click 的觸發行為(就是共用click event)
就要像 #5樓這樣 , 改用物件類別模組喔~
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

回復 6# lichang
下面是一簡單例子
form1.JPG
UserForm1 程式碼
  1. Private Temp() As Class1

  2. Private Sub UserForm_Initialize()
  3.     Dim i As Long
  4.     For i = 1 To 4
  5.         ReDim Preserve Temp(i)
  6.         Set Temp(i) = New Class1
  7.         Temp(i).InitialControl Controls("ComboBox" & i)
  8.     Next
  9. End Sub
複製代碼
新增物件類別模組 Class1
  1. Public WithEvents ComboBox As MSForms.ComboBox

  2. Private Sub ComboBox_Change()
  3.     MsgBox ComboBox.Value    'change 動作
  4. End Sub

  5. Public Sub InitialControl(ByRef oControl As MSForms.ComboBox)
  6.     Set ComboBox = oControl
  7.     ComboBox.List = Array("test1", "test2", "test3", "test4")
  8. End Sub
複製代碼
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

好的,我試看看,謝謝指教!!

TOP

回復 8# stillfish00

你好,請問一下,我現在測試,確實有變動了,但是我想按造不同格數建立選擇表單
例如:第一選單,建立在a1
           第二選單,建立在a2
請問該如何使用呢??
(i好像沒辦法直接帶過來change使用)

TOP

        靜思自在 : 君子為目標,小人為目的。
返回列表 上一主題