这是我在这个网站上的第一个查询,我只是偶尔的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
可以看出,除了单元格引用之外,代码是完全相同的,所以我无法理解出了什么问题。如果需要更多信息来帮我解决这个问题,请告诉我。
答案 0 :(得分:0)
你忘了指定工作表,因为你在计算每个行.Range(...& rows.count)
将其更改为.range(...& .rows.count)
基本上,在每个rows.count之前添加一个点。