Excel VBA中的偏移解决方法

我正试图自动将会计日记帐分录到分类帐,并且在添加新行后正在挣扎。 我的工作簿有两张表,“日记帐”和“分类帐”,我的目标是读取每个日记帐分录,并通过添加新行将分录添加到分类帐中正确的T帐户。 大多数复制条目都可以使用,但是一旦偏移发生变化,macros就会遇到问题。 我正在考虑使用。 .Find作为一个更好的select,因为不同的T帐户需要不同的抵消价值取决于之前有多less以前的帐户。 我怎样才能解决这个抵消行问题?

这里是Excel文件的链接,下面是我在VBA中的代码。

 Sub RowInsert() Dim offset As Integer offset = 0 Dim counter As Integer For counter = 0 To 1 Dim account As String account = Worksheets("Journal").Cells(counter + 2, 2) Dim a As Double If Worksheets("Journal").Cells(counter + 2, 2) = "Cash" Then Worksheets("Ledger").Rows(4 + offset).Insert Shift:=xlDown offset = offset + 1 Worksheets("Ledger").Cells(6 + offset, 1).Value = Worksheets("Journal").Cells(counter + 2, 1).Value If Worksheets("Journal").Cells(counter + 2, 3).Value = Null Then Worksheets("Ledger").Cells(6 + offset, 3).Value = Worksheets("Journal").Cells(counter + 2, 4).Value Else Worksheets("Ledger").Cells(6 + offset, 2).Value = Worksheets("Journal").Cells(counter + 2, 3).Value End If ElseIf Worksheets("Journal").Cells(counter + 2, 2) = "Equipment" Then Worksheets("Ledger").Rows(8 + offset).Insert Shift:=xlDown offset = offset + 1 Worksheets("Ledger").Cells(6 + offset, 1).Value = Worksheets("Journal").Cells(counter + 2, 1).Value If Worksheets("Journal").Cells(counter + 2, 3).Value = Null Then Worksheets("Ledger").Cells(6 + offset, 3).Value = Worksheets("Journal").Cells(counter + 2, 4).Value Else Worksheets("Ledger").Cells(6 + offset, 2).Value = Worksheets("Journal").Cells(counter + 2, 3).Value End If End If Next counter End Sub 

编辑。 如果我追求Range.Find解决scheme,我怎样才能访问这个范围/单元格的结果呢? 现在我得到“运行时错误'91':对象variables或块variables未设置”。

 Sub RowInsert() Dim counter As Integer For counter = 0 To 1 Dim account As String account = Worksheets("Journal").Cells(counter + 2, 2) Dim a As Double If Worksheets("Journal").Cells(counter + 2, 2) = "Cash" Then Dim entries As Integer entries = 0 Dim Header As Range Dim row As Long With Worksheets("Ledger").Range("a1:a100") Set Header = .Find("Cash") ` Error here when try to use the Range Header row = Header.row + entries Rows(row).Insert Shift:=xlDown Cells(row, 1) = Worksheets("Journal").Cells(counter + 2, 1).Value End With End If Next counter End Sub 

回答你编辑的问题:

您收到的错误是因为.Find没有find任何东西,并没有返回。 试图访问Nothing属性会给“对象variables或With块variables未设置”错误。

.Find不能很好地处理合并的单元格。 在你的情况下简单的解决scheme是扩大search范围,因此它包括整个合并单元格。

 Dim Header As Range Dim lastRow As Long With Worksheets("Ledger").Columns("A:C") Set Header = .Find("Cash") lastRow = Header.Row + entries 'I would prefer something like 'lastRow = Worksheets("Ledger").Cells(Header.Row, "B").End(xlDown).Row (not tested) Rows(lastRow).Insert Shift:=xlDown Worksheets("Ledger").Cells(lastRow, 1) = Worksheets("Journal").Cells(counter + 2, 1).Value End With 

我改变了行variables的名字,所以Row和你的variablesrow之间没有混淆。 你可以看到VBE已经混淆了,因为它将属性设置为小写。