AW: Du baust eine UDF; wo willst du sie ...
31.07.2013 16:46:00
JACKD
Hallo Luc
Wo will ich sie einsetzen ..
Um kurz die Idee zu erläutern
Ich will eine Art einfache UST voranmeldung machen.
Dazu muss ich die Werte von verschiedenen Zeitfenstern betrachten, als auch mit verschiedenen Steuermerkmalen.
Also dachte ich mir (damit ich die einzelnen Makros übersichtlich halte, ich schick das mit parametern rüber in ne UDF)
Im derzeitigen Ergebnis sieht das so aus
Private Sub CMDBAuswertung_Click()
Dim selJahr As Integer
Dim selQuart, selMon As Integer
Dim selType As String
Dim Einnahmen, Ausgaben
Dim lzeile, iSum As Long
Dim SumUST, SumVST, SumMWSTZahlLast, Sum7VST, Sum19VST, Sum7UST, Sum19UST As Double
Dim Last As Boolean
With Me
selJahr = .CBZeitJahr
selQuart = .CBZeitQuartal
selMon = .CBZeitMonat.ListIndex + 1
Select Case True
Case .CBAuswertungArt = "Einkommensteuer"
'' Auswertung Einkommensteuer!''
MsgBox .CBAuswertungArt & selJahr
Exit Sub
Case .CBAuswertungArt = "Umsatzsteuer"
''Auswertung Umsatzsteuer"
Select Case True
Case .OPAuswertungJahr = True
selType = "Jahr"
Case .OPAuswertungQuartal = True
selType = "Quartal"
Case .OPAuswertungMonat = True
selType = "Monat"
End Select
Einnahmen = EinnahmenArray(selJahr, selMon, selQuart, selType) 'Hier Übergabe an _
UDFEinnahmen
Ausgaben = Ausgabenarray(selJahr, selMon, selQuart, selType)
End Select
End With
''Summe Einnahmen
For iSum = LBound(Einnahmen) To UBound(Einnahmen)
SumUST = SumUST + Einnahmen(iSum, 6)
Next iSum
For iSum = LBound(Ausgaben) To UBound(Ausgaben)
SumVST = SumVST + Ausgaben(iSum, 6)
Next iSum
SumMWSTZahlLast = SumUST - SumVST
'''7% Vorsteuer
For iSum = LBound(Ausgaben) To UBound(Ausgaben)
If WorksheetFunction.Round(Ausgaben(iSum, 4), 2) = "0,07" Then
Sum7VST = Sum7VST + Ausgaben(iSum, 6)
End If
Next iSum
'''19% Vorsteuer
For iSum = LBound(Ausgaben) To UBound(Ausgaben)
If WorksheetFunction.Round(Ausgaben(iSum, 4), 2) = "0,19" Then
Sum19VST = Sum19VST + Ausgaben(iSum, 6)
End If
Next iSum
'''7% Umsatzsteuer
For iSum = LBound(Einnahmen) To UBound(Einnahmen)
If WorksheetFunction.Round(Einnahmen(iSum, 4), 2) = "0,07" Then
Sum7UST = Sum7UST + Einnahmen(iSum, 6)
End If
Next iSum
'''19% Umsatzsteuer
For iSum = LBound(Einnahmen) To UBound(Einnahmen)
If WorksheetFunction.Round(Einnahmen(iSum, 4), 2) = "0,19" Then
Sum19UST = Sum19UST + Einnahmen(iSum, 6)
End If
Next iSum
'''Eintragen nur zum Prfen
''Fehler (Keine Daten in dem Jahr""
With Sheets("Auswertung")
.Cells.Clear 'Blatt leeren
If SumUST - SumVST
Dies kommt aus einer UF und geht dann in die UDF
Public Function EinnahmenArray(ByVal selJahr As Integer, ByVal selMonat As Integer, ByVal _
selQuart As Integer, ByVal selType As String)
Dim arrTmp, i, s As Integer, objDaten As Object
Dim arrDaten(), arrKeys
Dim LNEEinnahmenlZeile As Long
''Letzte Zeile
LNEEinnahmenlZeile = Worksheets("Einnahmen").Cells(Rows.Count, 4).End(xlUp).Row
Set objDaten = CreateObject("scripting.dictionary")
'Tabelle in Array
arrTmp = Sheets("Einnahmen").Range("A1:H" & LNEEinnahmenlZeile)
'Zeilennummern sammeln
''Jahr/Quartal/Monat
Select Case selType
Case Is = "Jahr"
For i = 2 To UBound(arrTmp)
If Year(arrTmp(i, 2)) = selJahr Then
objDaten(i) = 0
End If
Next i
Case Is = "Monat"
For i = 2 To UBound(arrTmp)
If Month(arrTmp(i, 2)) = selMonat And Year(arrTmp(i, 2)) = selJahr Then
objDaten(i) = 0
End If
Next i
Case Is = "Quartal"
For i = 2 To UBound(arrTmp)
If Format(DateSerial(Year(arrTmp(i, 2)), Month(arrTmp(i, 2)) + (3 * 4), Day( _
arrTmp(i, 2))), "q") = selQuart And Year(arrTmp(i, 2)) = selJahr Then
objDaten(i) = 0
End If
Next i
End Select
'Array fr Fundstellen
If objDaten.Count Then
ReDim arrDaten(1 To objDaten.Count, 1 To 8)
arrKeys = objDaten.keys
For i = 0 To UBound(arrKeys)
For s = 1 To UBound(arrTmp, 2)
arrDaten(i + 1, s) = arrTmp(arrKeys(i), s)
Next s
Next
EinnahmenArray = arrDaten
Else
''Wenn keine Werte vorhanden
ReDim arrDaten(1 To 2, 1 To 8)
For i = 0 To 1
For s = 1 To 8
arrDaten(i + 1, s) = "0"
Next s
Next
EinnahmenArray = arrDaten
End If
End Function
Die UDF für die Ausgaben ist dann analog
Und zu dem Array Typen..
Das hab ich gestern schon gelesen. Und gefragt ob du mir dabei helfend unter die arme greifen kannst.
Ich bekomm es einfach nicht auf den Tacho das von dir vorgeschlagene umzusetzen. Wahrscheinlich fehlt mir dazu der Horizont.
Vielleicht kannst du es mir auch mit einfachen Worten versuchen nochmal nahe zu bringen... ?
Grüße und Vielen dank für deine Anteilnahme =)