为什么此VBA代码会导致重复条目

时间:2014-02-26 09:37:26

标签: excel-vba vba excel

这是我在这个网站上的第一个查询,我只是偶尔的VBA用户。下面的代码可能不是很优雅,但它有效。

我有一个Excel工作簿,它是我自己设计的,实际上是一个会计工具。工作簿有一个“日记”表,我发布每笔交易。在运行VBA代码时,每个事务都会过帐到指定的帐户(或工作表)。一个子例程发布我称之为一般事务的信息,而另一个例子发布我称之为账户间转账的信息,即将一个账户中开始的交易转移到另一个账户 - 所以第一个账户的借方和第二个账户的贷方。 Inter Account Transfer例程在常规事务例程之后运行,因此帖子将始终显示在所有常规事务之后的行上。我还有一个例程,可以在其余例程运行之前清除所有Account工作表的内容。

我遇到的问题是“借记”账户间转账。当我第一次运行完整代码时,一切正常,并且账户间转账借记显示在应该的位置 - 在最后一次总交易之下。如果我再次运行它,尽管运行清除账户表上的所有内容,国际账户转账出现两次,如果我再次运行它会出现三次,等等。这只会发生,如果有更多的交易帐户的借方。此外,它在信用方面根本不会发生。

帐户表有六列 - A到F,定义如下:      A ='日期(Cr)',B ='描述/子类别(Cr)',C ='金额(Cr)',D ='日期(博士)',E =      '描述/子类别(博士)',F ='金额(博士)'。

我使用的代码如下所示 - 而不是全部显示,我刚刚显示了每个Credit和Debit方面的一个项目的例程。

'DESCRIPTION/SUB-CATEGORY (Cr)
With Sheets(strWSJournal)
    I = 1
    LASTROW = .Range("A" & Rows.Count).End(xlUp).Row
    Set MyRG = .Range("B2:B" & LASTROW)
        For Each F In MyRG
            strWSGoToSheet = F.Offset(0, 1)

             With Sheets(strWSGoToSheet)
                LASTROW2 = .Range("B" & Rows.Count).End(xlUp).Row
            End With


                If (F.Value = strInterAcTran) Then
                    Sheets(strWSGoToSheet).Cells(LASTROW2 + I, "B") = F.Offset(0, 2)
                End If
        Next F
End With



'DESCRIPTION/SUB-CATEGORY (Dr)
With Sheets(strWSJournal)
    I = 1
    LASTROW = .Range("K" & Rows.Count).End(xlUp).Row
    Set MyRG = .Range("L2:L" & LASTROW)
        For Each F In MyRG
            strWSGoToSheet = F.Offset(0, 1)

            With Sheets(strWSGoToSheet)
                LASTROW2 = .Range("E" & Rows.Count).End(xlUp).Row
            End With


                If (F.Value = strInterAcTran) Then
                    Sheets(strWSGoToSheet).Cells(LASTROW2 + I, "E") = F.Offset(0, 2)
                    'I = I + 1
                End If
        Next F
End With

可以看出,除了单元格引用之外,代码是完全相同的,所以我无法理解出了什么问题。如果需要更多信息来帮我解决这个问题,请告诉我。

1 个答案:

答案 0 :(得分:0)

你忘了指定工作表,因为你在计算每个行.Range(...& rows.count)

将其更改为.range(...& .rows.count)

基本上,在每个rows.count之前添加一个点。