Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Public Function Fehler Zirkelbezug

Public Function Fehler Zirkelbezug
29.12.2022 09:26:19
Dennis
Hallo zusammen,
ich wollte meine Liste soweit vereinfachen, dass zu jedem Mitarbeiter und Material die Rechnungsnummer anhand der Kostenstelle vergeben wird. Es gibt auch Kostenstellen mit mehreren Rechnungsnummern. Ist die Summe der 1. Rechnungsnummer aufgebraucht soll die nächste Rechnungsnummer angezogen werden. Zudem soll bei einer Schlussrechnung alle Mitarbeiter und Material dieser Schlussrechnung zugeordnet werden, die noch keine Rechnungsnummer haben.
Mein Problem liegt darin, dass bei Kostenstellen, wozu mehrere Rechnungsnummern vorliegen, bisher immer nur die 1. genommen wurde. Ich habe versucht meinen Code umzuschreiben aber dann liegt ein Zirkelbezug vor. Ich habe mal eine Bespieldatei angehangen. Dort habe ich zwar keinen Zirkelbezug mehr aber trotzdem funktioniert es nicht.
https://www.herber.de/bbs/user/156993.xlsm

Public Function GetTest(varPos As Variant) As Variant
Dim x As Long
Dim y As Long
If IsNull(varPos) Then
GetTest = " - / -"
Exit Function
End If
If IsEmpty(varPos) Then
GetTest = " - / -"
Exit Function
End If
x = 2
Do While Worksheets("abgerechnet").Cells(x, 1).Value  ""
If CVar(Worksheets("abgerechnet").Cells(x, 1).Value) = varPos Then
y = 2
Do While CVar(Worksheets("abgerechnet").Cells(x, 6).Value) 

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Public Function Fehler Zirkelbezug
29.12.2022 10:20:03
ChrisL
Hi Dennis
Ohne konkrete Lösung, nur eine erste Rückfrage. Gibt es auch einen Split von Einzelbeträgen z.B. 200 zu verbuchen, davon 100 auf Kostenstelle1 (verfügbarer Restbetrag) und weitere 100 auf die nächste Kostenstelle2? Oder soll in einem solchen Fall alles auf Kostenstelle2 gebucht werden und der Restbetrag bleibt offen?
Allenfalls müsstest du die Vorlage noch einmal anpassen d.h. Spalte1 = KS1, Spalte2 = Betrag1, Spalte2 = KS2, Spalte3 = Betrag2.
(und was wenn ein grosser Betrag anfällt, welcher auf diverse KS verteilt werden müsste)
Brauchst du am Schluss vom Tag die Einzelbuchungen je KS oder würde auch direkt die konsolidierte Ansicht in Blatt "abgerechnet" reichen?
cu
Chris
Anzeige
AW: Public Function Fehler Zirkelbezug
29.12.2022 12:50:18
Dennis
Hi Chris,
die Beträge sollen nicht aufgeteilt. Wenn der der Wert "x" den Betrag der 1. Rechnungsnummern übersteigen, dann soll die nächste Rechnungsnr. genommen werden. Der Restbetrag bleibt somit offen. Man könntevielleicht noch überlegen ob der Betrag der Rechnungsnummer sich prozentual übersteigen darf.
Die Ansicht in Blatt "abgerechnet" reicht mir erst einmal.
Gruß
Dennis
AW: Public Function Fehler Zirkelbezug
29.12.2022 13:19:16
ChrisL
Hi Dennis
In meiner Rückfrage habe ich übrigens KS und RG-Nr. vermischt. War vielleicht etwas verwirrend.
Um zu sehen, ob es in die richtige Richtung geht. Blatt "abgerechnet"
Zelle F2:

=MIN(SUMMEWENN(Aufwand!A:A;A2;Aufwand!E:E)-SUMMEWENN(A$1:A1;A2;F$1:F1);D2)
Zelle G2:

=WENN(E2="Schlussrechnung";SUMMEWENN(Aufwand!A:A;A2;Aufwand!E:E)-SUMMEWENN(A:A;A2;F:F);"")
Spalte F wäre die Verteilung/Auffüllen und Spalte G wäre der Überschuss.
Falls dies in etwa dem gewünschten End-Resultat entspricht, dann müsste ich mir noch etwas einfallen lassen, damit Einzelbeträge nicht auf zwei RG-Nr. gesplittet werden müssen. Wieso habe ich nur nachgefragt ;)
cu
Chris
Anzeige
AW: Public Function Fehler Zirkelbezug
29.12.2022 13:29:24
Yal
Hallo Dennis,
UDF (User Defined Function) sind nur sinnvoll, wenn die Lösung nicht mit konventionelle Formelnkombinationen zu haben ist, oder die Formelkombination zu komplex ist.
Tipp:
_ ein UDF sollte alle Parametern bei dem Aufruf bekommen. Es darf nicht innerhalb des Codings auf einem Bereich festgelegt sein. Oder hat man spass bei neuer Datei, ständig den Code anzupassen?
_ anstatt alle Zeilen durchzulaufen, lieber "Find" verwenden
_ "Do While" ist zickige Genossen und sollte, so weit es geht, vermieden werden. Im UDF mag es dazu führen, dass Du keine Antwort bekommst, aber in anderen VBA wirst Du Excel öfter neustarten, bevor Du "VBA gut" schreiben kannst.
Deine erste Function "GetRE" könnte daher so aussehen:

 Public Function GetRE(ByVal Kostenstelle, ByVal SuchBereich) As String
GetRE = " - / -" 'default-Rückgabewert. Bleibt. solang nicht überschrieben
If IsNull(Kostenstelle.Value) Then Exit Function
If IsEmpty(Kostenstelle.Value) Then Exit Function
GetRE = "?" 'neue Default-Value nach varPos-Gültigkeitsprüfung
Set F = SuchBereich.Find(CStr(Kostenstelle.Value)) 'Gesucht wird in Spalte 1 ("A")
If Not F Is Nothing Then GetRE = F.Offset(0, 2).Value 'Ergebnis 2 Spalten nach links: 1+2 = 3 = "C"
End Function
und wird so gerufen:
=GetRE(A2;abgerechnet!$A$2:$A$14)
Aber es ist nichts anderes als einen SVerweis:
=WENNFEHLER(SVERWEIS(A2;abgerechnet!$A$2:$C$14;3;FALSCH); " - / -")
also hier keine UDF notwendig.
Für GetTest ist es nicht viel komplizierter. Es ist im Grund genommen auch mit einem SVerweis abzubugeln, aber der gesuchte Bereich muss dementsprechend sortiert sein. Und der 4te Paramater "Wahr" anstatt "Falsch". Details im Online-Hilfe.
Mit diesen Infos solltest Du in der Lage sein, zu probieren und die Lösung zu finden.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige