회계 회계 분개 항목을 회계 원장에 전기하는 작업을 자동화하고 새 행을 추가 한 후 오프셋 작업에 어려움을 겪고 있습니다. 내 통합 문서에는 Journal 및 Ledger라는 두 개의 시트가 있으며 저의 목표는 각 저널 항목을 읽고 새 행을 추가하여 원장의 올바른 T- 계정에 항목을 추가하는 것입니다. 대부분의 복사 항목이 작동하지만 옵셋이 변경되면 매크로가 문제가됩니다. 다른 T- 계정은 이전 계정이 얼마나 많은지에 따라 서로 다른 오프셋 값이 필요하기 때문에 더 나은 옵션으로 .Find
을 사용하는 것을 고려하고있었습니다. 이 오프셋 행 문제를 어떻게 해결할 수 있습니까?Excel VBA에서 대안 상쇄
여기는 Excel File에 대한 링크이며, 아래는 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
EDIT. Range.Find
솔루션을 찾으려면 어떻게이 범위/셀 결과에 액세스 할 수 있습니까? 지금은 "런타임 오류 '91': 개체 변수 또는 With 블록 변수가 설정되지 않았습니다". 편집 된 질문에
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 '는 계정을 서로 아래에 두어야하는 경우 좋은 생각입니다. '.End (xlDown)'메소드를 살펴보십시오. 첫 번째 행을 찾으면 계정의 마지막 행을 찾는 데 도움이됩니다. – arcadeprecinct
'.End (xlDown)'이 그 아래의 다음 계정으로 계속 연결되지 않게하려면 어떻게해야합니까? – cpage
계정간에 빈 행이 하나 이상 있다고 가정합니다. '.End (xlDown)'은 비어 있지 않은 셀에 적용되면 멈 춥니 다. 그래서 열의 맨 마지막 줄을 찾는 데 사용해서는 안됩니다. – arcadeprecinct