2017-06-19 58 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

这真的很整洁!谢谢。 –