【发布时间】:2014-02-26 09:37:26
【问题描述】:
这是我在这个网站上的第一个查询,我只是偶尔使用 VBA。下面的代码可能不是很优雅,但确实有效。
我有一个 Excel 工作簿,它是我自己设计的,本质上是一个会计工具。该工作簿有一个“日志”表,我将每笔交易都发布到该表中。在运行 VBA 代码时,每笔交易都会过帐到指定的帐户(或工作表)。一个子例程发布我称之为“一般交易”的内容,而另一个发布我称之为“账户间转账”的内容,即将从一个账户开始的交易转移到另一个账户——因此第一个账户有借方,第二个账户有贷方.账户间转账例程在一般事务例程之后运行,因此过帐总是会在所有一般事务之后立即出现在行上。我还有一个例程可以在其余例程运行之前清除所有帐户工作表的内容。
我遇到的问题是“借记”账户间转账。当我第一次运行完整代码时,一切正常,账户间转账借记出现在它应该出现的位置 - 在最后一次一般交易下方。如果我再次运行它,尽管该运行清除了 Account 表上的所有内容,但 Inter Account Transfer 会出现两次,如果我再次运行它会出现 3 次,等等。但是,如果有更多交易在帐户的借方。在信用方面也根本不会发生这种情况。
帐户表有六列 - A 到 F,定义如下: A = '日期 (Cr)', B = '描述/子类别 (Cr)', C = '金额 (Cr)', D = '日期 (Dr)', E = '描述/子类别(博士)',F = '金额(博士)'。
我使用的代码如下所示 - 而不是全部显示,我只是展示了来自贷方和借方每一方的一个项目的例程。
'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
可以看出,除了单元格引用之外,代码是相同的,所以我不明白出了什么问题。如果需要更多信息来帮助我解决此问题,请告诉我。
【问题讨论】: