将代码概括为包含动态流程的有效方法是什么?

时间:2016-08-09 19:16:52

标签: excel vba excel-vba

我创建了一个宏,它会自动化我们每天早上在Accounts / Receivables部门生成的每日报告。该报告将我们的会计记录(Great Plains)与我们逐项收到的银行对账单进行比较。

到目前为止(上个月),我一直在对此宏进行编码,以完全创建对帐报告,并通知用户帐户之间的所有差异(即,如果我们收到20.00美元但未记录,则$ 20.00是在UserForm's ListBox中向用户显示,包含按钮以删除金额,如果它只是一个错误,或反映报告摘要中的金额,如果它已被处理)。

在看到该过程后,我被要求格式化宏以生成其他3个帐户的报告。我已经通过代码的泛化和我的方法的参数化成功地格式化了数据的计算和处理。我的问题来自UserForm

UserForm使用的代码直接影响仅在生成Bank Wire报告时定义的特定变量,但由于它不再是唯一的报告,我不确定如何反映数据通过必要的变量。

以下是我在UserForm中提到的代码:

    Private Sub AddedtoGPButton_Click()
        Dim BWItem As Double

        For lItem = BWListBox.ListCount - 1 To 0 Step -1
            If BWListBox.Selected(lItem) Then
                BWItem = BWListBox.List(lItem, 0)
                BWListBox.RemoveItem lItem
                If BWAddedGPSum2 Is Nothing Then
                    Set BWAddedGPSum2 = Range(BWGPSum.Offset(1, -3), BWGPSum.Offset(1, 1))
                    BWAddedGPSum2.Insert shift:=xlDown
                    Set BWAddedGPSum2 = Range(BWGPSum.Offset(1, -3), BWGPSum.Offset(1, 1))
                    BWAddedGPSum2.Interior.ColorIndex = 0
                    BWAddedGPSum2.Insert shift:=xlDown
                    Set BWAddedGPSum2 = Range(BWGPSum.Offset(1, -3), BWGPSum.Offset(1, 1))
                    BWAddedGPSum2.Interior.ColorIndex = 0
                    Set BWAddedGPTitle2 = Range(BWGPSum.Offset(1, -2), BWGPSum.Offset(1, -1))
                    With BWAddedGPTitle2
                        .MergeCells = True
                        .HorizontalAlignment = xlRight
                        .VerticalAlignment = xlCenter
                    End With
                        BWAddedGPTitle2.Value = "Added to Deposit:"
                    Set BWAddedGPSum2 = BWGPSum.Offset(1, 0)
                        If BWAddedGPSum Is Nothing Then
                            BWAddedGPSum2.Borders(xlEdgeBottom).LineStyle = xlContinuous
                        End If
                    If BWGPSum.Offset(-1, 0).Text = "" Then
                        Set BWGPSubtotal = BWGPSum
                        Set BWGPSum = BWVariance.Offset(-2, 0)
                            Range(BWGPSum.Offset(0, -1), BWGPSum.Offset(0, -2)).MergeCells = True
                            BWGPSum.Offset(0, -1).HorizontalAlignment = xlRight
                            BWGPSum.Offset(0, -2).Value = "Total:"
                            BWGPSum.Interior.ColorIndex = 6
                    End If
                End If
                BWAddedGPSum2.Value = Format((BWAddedGPSum2.Value + BWItem), "$#,##0.00")
                BWGPSum.Value = Format(Application.WorksheetFunction.Sum(BWGPSum.Offset(-1, 0).End(xlUp), _
                                       BWGPSum.Offset(-1, 0)), "$#,##0.00")
                Call DetermineVariance(BWTitle, BWVariance, BWReconciled, BWttl, BWGPSum)
                If Me.BWListBox.MultiSelect = fmMultiSelectSingle Then
                    Exit For
                End If

            End If
        Next
    End Sub

...

UserForm中定义为对象(ListBoxTextBoxLabel等)的变量是:

BWItem为Double和BWListBox。

主模块中建立的变量是:

BWAddedGPSum2为Range,BWGPSum为Range,BWAddedGPTitle2为Range,DetermineVariance为方法。

...

以下是初始(预报告)UserForm的屏幕截图,可让您了解报告的数据来源,以及显示相关UserForm的第二个屏幕截图({{ 1}}包含差异):

Initial <code>UserForm</code>

Problematic <code>UserForm</code>

...

我的主要问题是当我尝试突出显示该项并选择UserForm时,它正在尝试将事件应用于上面代码块中列出的变量。正如我之前提到的,它对于银行电汇报告来说非常有效,但是现在我正在试图推广它,这引起了巨大的痛苦,我甚至不确定如何去做。什么是一种有效且有效的方法来推广代码以获得相同的结果?

正如您在上面的屏幕截图中所看到的,已经生成了银行电汇的报告。当您突出显示某个项目并按添加到GP按钮时,会出现标题为“添加到存款:”的行。当您尝试对信用卡报告执行相同操作时,它无法找到信用卡的变量,因为正如您所看到的,它的格式为电线。

0 个答案:

没有答案