返回列表 上一主題 發帖

[發問] 大量複選表單的程式碼如何簡潔的操作?

[發問] 大量複選表單的程式碼如何簡潔的操作?

請問這種該如何可以較簡潔呢?
我原本的寫法是 要輸出的資料寫在程式碼裡面
但因品項上百種,變成一種寫一次 程式碼很長.....






複選表單.rar (21.44 KB)

本帖最後由 starry1314 於 2016-12-21 17:40 編輯

回復 2# Hsieh


完美.......
竟然有可以依條件自動建立核取方塊....
比我原本一個一個建立的好多了

另想再問一下,目前選完之後在點選第二次可以將上次勾選的項目顯示已勾選嗎?

舊有方式 是開啟在讀取一次
CheckBox1.Value = IIf(.Range("C100") = "牛、", True, False)

TOP

回復 4# Hsieh


    抱歉,說明的不夠詳細
流程是一筆訂單 填入選項之後
會做二度甚至三度更改,故須讓之前所選過的選項顯示已勾選,
才能讓修改人的確認之前選過什麼或是針對其中一項做取消,
填入的資料就都以最後一次點選的欄位,就不陸續新增了

TOP

回復 6# c_c_lai


    感謝幫助,因為要讓使用者方便操作,都是以最快速為主~
改為開啟即自動按下比對,更方便使用者了

TOP

回復 7# Hsieh

感謝版大的幫忙~~~完美解決!!
:victory:

TOP

回復 7# Hsieh


    版大,
請問這表單該如何可以修改成依照[類型不同]分去對應表單的分頁呢?
如3個類型就會有三個分頁這樣
目前是分不同欄位 輸出兩次一樣程式碼
可以變成一隻程式碼搞定嗎?
  1. Private Sub UserForm_Initialize()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. Set e = CreateObject("Scripting.Dictionary")
  4. Set f = CreateObject("Scripting.Dictionary")

  5. With Sheets("資料庫")
  6.    For Each a In .Range(.[C2], .[C65536].End(xlUp))
  7.       d(a.Value) = Array(a.Offset(, -2).Value, a.Value, a.Offset(, 1).Value, a.Offset(, 2).Value)
  8.    Next
  9. End With
  10. For Each ky In d.keys
  11.    With Me.MultiPage1.Pages(0)
  12.    .Caption = "鮮炒時蔬"

  13.        With .Controls.Add("forms.checkbox.1")
  14.             .Top = s * 30
  15.             .Width = 100
  16.             .Height = 30
  17.             .Left = k * 100
  18.             .Caption = ky
  19.             .Value = Not Sheets("選用資料").Columns("B").Find(ky, lookat:=xlWhole) Is Nothing
  20.         End With
  21.    m = m + 1
  22.    s = (m) Mod 9
  23.    k = Int(m / 9)
  24.    End With
  25. Next
  26. '水果
  27. m = 0
  28. s = 0
  29. k = 0
  30. With Sheets("資料庫")
  31.    For Each a In .Range(.[E2], .[E65536].End(xlUp))
  32.       e(a.Value) = Array(a.Offset(, -2).Value, a.Value, a.Offset(, 1).Value, a.Offset(, 2).Value)
  33.    Next
  34. End With
  35. For Each ky In e.keys
  36.    With Me.MultiPage1.Pages(1)
  37.    .Caption = "水果"

  38.        With .Controls.Add("forms.checkbox.1")
  39.             .Top = s * 30
  40.             .Width = 100
  41.             .Height = 30
  42.             .Left = k * 100
  43.             .Caption = ky
  44.             .Value = Not Sheets("選用資料").Columns("B").Find(ky, lookat:=xlWhole) Is Nothing
  45.         End With
  46.    m = m + 1
  47.    s = (m) Mod 9
  48.    k = Int(m / 9)
  49.    End With
  50. Next
  51. End Sub
複製代碼

TOP

        靜思自在 : 多做多得。少做多失。
返回列表 上一主題