ich arbeite derzeit eine eine Massengenerierung von manuellen Rechnungsdokumenten anhand einer tabellarischen Aufstellung. Bis hierhin auch soweit ganz gut.
Jetzt arbeite ich derzeit an eine automatischen Generierung von Rechnungsnummern für die jeweiligen Dokumente, das klappt auch. Jedoch möchte ich, wenn der Buchungskreis in Spalte "intColBUKRS" wechselt, dass der Zähler auch wieder von 1 beginnt. Bisher werden mit fortlaufende Nummer (ungeachtet vom Buchungskreis) erstellt. Ich habe jetzt schon Einiges durch experimentiert, aber ohne Erfolg. Hat jemand eine Idee wie ich es besser machen kann. Für Eure Hilfe bin ich Euch sehr dankbar.
Option Explicit
Private intColBUKRS As Integer
Private intColInvPos As Integer
Private intColXBLNR As Integer
Private lo As ListObject
Private Sub InvNo()
Dim ws As Worksheet
Dim intRowNo As Integer
Dim intInvNo As Integer
Dim intYear As Integer
Dim intCC As Integer
Set ws = shAufstellung
Set lo = ws.ListObjects("tblSource")
intColBUKRS = GetHeaderColumn("Company Code")
intColInvPos = GetHeaderColumn("Invoice position")
intColXBLNR = GetHeaderColumn("Reference")
intYear = ActiveWorkbook.BuiltinDocumentProperties(6)
intInvNo = ActiveWorkbook.BuiltinDocumentProperties(5)
Application.ScreenUpdating = False
On Error Resume Next
If intYear Year(Date) Then
intInvNo = 0
intYear = Year(Date)
ActiveWorkbook.BuiltinDocumentProperties(6) = intYear
End If
For intRowNo = 1 To lo.DataBodyRange.Rows.Count
intCC = lo.DataBodyRange(intRowNo, intColBUKRS)
If lo.DataBodyRange(intRowNo, 2).Text "No" _
And lo.DataBodyRange(intRowNo, intColInvPos).Value = 1 _
Then
intInvNo = intInvNo + 1
ActiveWorkbook.BuiltinDocumentProperties(5) = intInvNo
lo.DataBodyRange(intRowNo, intColXBLNR) = intCC & intYear & Format(intInvNo, "0000")
Else:
If lo.DataBodyRange(intRowNo, 2).Text "No" _
And lo.DataBodyRange(intRowNo, intColInvPos).Value 1 _
And lo.DataBodyRange(intRowNo, intColXBLNR).Value = "" _
Then
lo.DataBodyRange(intRowNo, intColXBLNR).Value = lo.DataBodyRange(intRowNo - 1, intColXBLNR).Value
End If
End If
Next intRowNo
Err.Clear
Application.ScreenUpdating = True
End Sub
'get header column
Private Function GetHeaderColumn(ByVal strHeader As String)
Dim i As Integer
Set lo = shAufstellung.ListObjects("tblSource")
For i = 1 To lo.ListColumns.Count
If UCase(lo.HeaderRowRange.Columns(i)) = UCase(strHeader) Then
GetHeaderColumn = lo.HeaderRowRange.Columns(i).Column
Exit Function
End If
Next i
'not found, return 0, leads to an error
GetHeaderColumn = 0
End Function