Board logo

標題: [發問] 大量複選表單的程式碼如何簡潔的操作? [打印本頁]

作者: starry1314    時間: 2016-12-20 16:27     標題: 大量複選表單的程式碼如何簡潔的操作?

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





[attach]26124[/attach]
[attach]26125[/attach]
作者: Hsieh    時間: 2016-12-21 15:51

回復 1# starry1314

試試看是這樣的意思嗎?
[attach]26130[/attach]
作者: starry1314    時間: 2016-12-21 17:20

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

回復 2# Hsieh


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

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

舊有方式 是開啟在讀取一次
CheckBox1.Value = IIf(.Range("C100") = "牛、", True, False)
作者: Hsieh    時間: 2016-12-22 08:45

回復 3# starry1314
原設計在按下確定後輸入資料前會將原寫入資料清除然後填入目前勾選項目
至於您所提到第二次勾選的重複問題,不確定你的工作流程想法
現以檢查勾選項目是否存在於工作表內作判斷,提出重複勾選警告
由輸入者自行決定是否重複輸入,資料將繼續增加
請參考附件


    [attach]26162[/attach]
作者: starry1314    時間: 2016-12-22 18:32

回復 4# Hsieh


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

本帖最後由 c_c_lai 於 2016-12-23 07:11 編輯

回復 3# starry1314
#2 資料不變,只需再增加一個按鈕就行了:
[attach]26167[/attach]
  1. Private Sub CommandButton3_Click()      '  比對選用資料
  2.     Dim ct As Variant
  3.    
  4.     With MultiPage1.Pages(0)
  5.         For Each ct In .Controls
  6.             If Sheets("選用資料").Columns("B:B").Find(ct.Caption, lookat:=xlWhole) Is Nothing Then
  7.                 ct.Object.Value = False
  8.             Else
  9.                 ct.Object.Value = True
  10.             End If
  11.         Next
  12.     End With
  13. End Sub
複製代碼

作者: Hsieh    時間: 2016-12-23 16:12

回復 5# starry1314
選用資料工作表只儲存1張訂單?
將程序改為開啟表單時同時讀取材料是否已經選用,自動將已存在選用資料工作表的項目勾選顯示

    [attach]26175[/attach]
作者: starry1314    時間: 2016-12-25 09:35

回復 6# c_c_lai


    感謝幫助,因為要讓使用者方便操作,都是以最快速為主~
改為開啟即自動按下比對,更方便使用者了
作者: starry1314    時間: 2016-12-25 09:35

回復 7# Hsieh

感謝版大的幫忙~~~完美解決!!
:victory:
作者: starry1314    時間: 2018-9-17 15:56

回復 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
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)