两个不同的Private Sub语句相同的代码

时间:2014-11-06 14:37:24

标签: vba access-vba

我在VBA中收到了Access 2010的代码,并且有两个单独的子语句包含相同的代码,如下所示:

Private Sub Test_Type_AfterUpdate()
    If Not IsNull(Me.Test_Type.Value) Then
        Me.TestNameID.Value = frmTestNameIDSmallToBigUpdate
        Me.Test.Value = frmTestSmallToMedUpdate
    End If
End Sub

Private Sub Test_Type_Change()
    If Not IsNull(Me.Test_Type.Value) Then
        Me.TestNameID.Value = frmTestNameIDSmallToBigUpdate
        Me.Test.Value = frmTestSmallToMedUpdate
    End If
End Sub

其他Private Sub语句也包含相同的编码,但在If Not IsNull之后包含不同的变量。我是VBA的新手,但有使用Python和C#编程的经验,有没有办法将这些语句组合成一个语句。

由于

2 个答案:

答案 0 :(得分:3)

是。创建第三个私有子以处理Test_Type个事件。

Private Sub HandleTestTypeEvent(object)
    If Not IsNull(object.Value) Then
        Me.TestNameID.Value = frmTestNameIDSmallToBigUpdate
        Me.Test.Value = frmTestSmallToMedUpdate
    End If
End Sub

并从现有的活动程序中调用它。

Private Sub Test_Type_AfterUpdate()
    HandleTestTypeEvent Me.TestType
End Sub

Private Sub Test_Type_Change()
    HandleTestTypeEvent Me.TestType
End Sub

确保正确输入参数并为其指定一个有意义的名称。

如果你感觉真的蛙,你可以看看这个。 Overriding all Access form control AfterUpdate methods

答案 1 :(得分:0)

为了更好的可维护性,将代码重构为从两个事件子调用的单个子代码,如下所示:

Private Sub Set_Test_NameID_and_Value
    If Not IsNull(Me.Test_Type.Value) Then
        Me.TestNameID.Value = frmTestNameIDSmallToBigUpdate
        Me.Test.Value = frmTestSmallToMedUpdate
    End If
End Sub

Private Sub Test_Type_AfterUpdate()
    Call Set_Test_NameID_and_Value()
End Sub

Private Sub Test_Type_Change()
    Call Set_Test_NameID_and_Value()
End Sub