這是我在這個網站上的第一個查詢,我只是偶爾的VBA用戶。下面的代碼可能不是很優雅,但它的工作。這個VBA代碼爲什麼會導致重複條目
我有一個Excel工作簿,這是我自己的設計,實質上是一個會計工具。工作簿有一個「日記」表,我發佈每筆交易。在運行VBA代碼時,每個事務都會發布到指定的帳戶(或工作表)。一個子例行公佈我所稱的一般交易,而另一個公佈我所謂的跨賬戶轉賬,即將在一個賬戶中開始的交易轉移到另一個賬戶 - 因此存在借記到第一個賬戶和貸記到第二個賬戶。 Inter Account Transfer例程在General Transaction例程之後運行,因此在所有常規事務之後立即顯示帖子。我還有一個例程,在其他例程運行之前清除所有Account工作表的內容。
我遇到的問題是'借記'Inter Account Transfers。當我第一次運行完整的代碼時,一切正常,並且Inter賬戶轉賬扣賬出現在它應該在的地方 - 低於最後一個一般交易。如果我再次運行它,儘管運行清除了賬戶表中的所有內容,但是Inter賬戶轉移出現了兩次,如果我再次運行它,它會出現三次,等等。只有當這些交易帳戶的借方。在信貸方面它也不會發生。 A ='日期(Cr)',B ='描述/子類別(Cr)',C ='數量(Cr)',以及其他數據。 D ='日期(Dr)',E = '描述/子類別(Dr)',F ='數量(Dr)'。
我使用的代碼如下所示 - 而不是全部顯示,我剛剛顯示了每個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
可以看出,代碼與單元格引用完全相同,所以我不明白髮生了什麼問題。如果需要更多信息來幫助我解決此問題,請讓我知道。
謝謝帕特里克,但不知道你的意思。我沒有通過聲明「使用表單(strWSGoToSheet)」指定表單嗎? – user3355073
只有在寫「.rows.count」而不是「rows.count」時,「with」才適用 –
再次感謝Patrick。對不起,在您的第一次回覆後如此模糊 - 沒有意識到您對''的評論。之前的「行」。不過,我已經嘗試過,但我仍然得到相同的結果。 – user3355073