2017-06-19 56 views
0

這個SELECT CASE的情況正在爲我工​​作,但我認爲代碼可以更友好...任何建議都會非常有幫助。指導,VBA - SELECT CASE清理

Select Case True 'select case where worker name and action is true then in each case RSworkhours.addnew 

    Case Me.Worker1.Value <> "" And Me.fw1a1 = 1 
     With RsWorkHours 
      .AddNew 
      !WorkerID = Me.Worker1 
      !Date = Me.TxtDate 
      !StandardTime = Me.w1a1s 
      !Overtime = Me.w1a1o 
      !Doubletime = Me.w1a1d 
      !ScaffoldID = Me.cboScaffnum 
      .Update 
     End With 
     Me.fw1a1 = 0 
     GoTo WorkerHours 
    Case Me.Worker1.Value <> "" And Me.fw1a2 = 1 
     With RsWorkHours 
      .AddNew 
      !WorkerID = Me.Worker1 
      !Date = Me.TxtDate 
      !StandardTime = Me.w1a2s 
      !Overtime = Me.w1a2o 
      !Doubletime = Me.w1a2d 
      !ScaffoldID = Me.cboScaffnum 
      .Update 
     End With 
     Me.fw1a2 = 0 
     GoTo WorkerHours 

通過這個Select Case 80倍的代碼循環,如果有16名工人,每個有5個動作。

我想也許有一個循環,像修改參數中的數字:

for each x to 16 
    for each y to 5 
     If Me.worker & x & .Value <> "" And Me.fw & x & a & y Then 
      With Recordset 
       .AddNew 
       'insert stuff 
       .Update 
      End With 
     End If 
    Next y 
Next x 

有沒有人有任何見解? 預先感謝您。

-Matt ATTACHED IS AN IMAGE OF THE FORM JUST TO GET AN UNDERSTANDING OF WHAT THE CODE IS DOING.

+0

您確定這是您用例的最佳UI嗎? – Tomalak

+0

繼@Tomalak說過的話,如果「工人1」有第六次行動會發生什麼? – FreeMan

+0

在這種情況下,是的,這只是設計視圖中窗體的一半......這是每個組合框的一個'_Click'事件,它根據需要擴展窗體,並且此窗體僅適用於一組將僅限於在一天中最多有5個動作.... 這就是說,我總是在如何精簡我的表格和程序的建議。 –

回答

2

您可以通過他們的名字從Controls collection訪問所有控件。

只要傳遞一個控件的名稱,你就會得到該控件 - 名稱是一個字符串,當然可以是動態的。

Dim x As Long, y As Long 
Dim WorkerX As Control, wXaYs As Control, wXaYo As Control, wXaYd As Control 

For x = 1 To 16 
    For y = 1 To 5 
     Set WorkerX = Me.Controls("Worker" & x) 
     Set wXaYs = Me.Controls("w" & x & "a" & y & "s") 
     Set wXaYo = Me.Controls("w" & x & "a" & y & "o") 
     Set wXaYd = Me.Controls("w" & x & "a" & y & "d") 
     If WorkerX.Value > "" And wXaYs.Value > "" Then 
      With Recordset 
       .AddNew 
       !WorkerID = WorkerX.Value 
       !Date = Me.TxtDate 
       !StandardTime = wXaYs.Value 
       !Overtime = wXaYo.Value 
       !Doubletime = wXaYd.Value 
       !ScaffoldID = Me.cboScaffnum 
       .Update 
      End With 
     End If 
    Next y 
Next x 
+0

這真的很整潔!謝謝。 –