Ich versuche zu automatisieren Buchung Buchungsjournaleinträge zu einem Hauptbuch, und habe Probleme mit dem Offset, nachdem ich neue Zeilen hinzufügen. Meine Arbeitsmappe hat zwei Blätter, Journal und Ledger, und mein Ziel ist es, jeden Journaleintrag zu lesen und den Eintrag dem richtigen T-Account im Journal hinzuzufügen, indem ich eine neue Zeile hinzufüge. Die meisten der kopierten Einträge funktionieren, aber das Makro führt zu Problemen, sobald sich die Verschiebung ändert. Ich habe erwogen, .Find
als eine bessere Option zu verwenden, da verschiedene T-Konten unterschiedliche Verrechnungswerte benötigen, je nachdem wie viele vorherige Konten über ihnen liegen. Wie kann ich dieses Offset-Zeilenproblem lösen?Offset-Problemumgehung in Excel VBA
Hier ist ein Link zu der Excel File, und unten ist mein Code in 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
BEARBEITEN. Wenn ich die Range.Find
Lösung verfolgen möchte, wie kann ich auf dieses Range/Zelle-Ergebnis zugreifen? Jetzt bekomme ich "Laufzeitfehler '91': Objektvariable oder Mit Blockvariable nicht gesetzt".
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' klingt wie eine gute Idee, wenn Sie die Konten unter einander haben müssen. Schauen Sie sich die '.End (xlDown)' Methode an. Es wird Ihnen helfen, die letzte Zeile eines Kontos zu finden, sobald Sie die erste Zeile gefunden haben. – arcadeprecinct
Wie würde ich verhindern, dass ".End (xlDown)" weiter zum nächsten darunter liegenden Konto geht? – cpage
Ich würde annehmen, dass Sie mindestens eine leere Zeile zwischen Konten haben. '.End (xlDown)' stoppt dort (wenn es auf eine nicht leere Zelle angewendet wird), deshalb sollte es nicht verwendet werden, um die allerletzte Zeile in einer Spalte zu finden. – arcadeprecinct