Probleme mit VBA
28.11.2015 20:09:42
Thorsten
ich bin neu hier und bin mit meinem Wissen am Ende ;)
Jedoch erhoffe ich mir hier richtig zu sein um die Experten im Forum zu befragen.
Ich habe auf meiner Arbeit ein Projekt zur Reaktivierung bekommen soweit so gut.
Zum Problem:
Hier hat mein Vorgänger eine VBA erstellt die ich nun mittlerweile auf Funktion getestet habe, funktioniert alles bis auf einen Punkt.
Es wurde eine VBA zur Lagerhaltung erstellt in denen Ein- und auch Ausgänge registriert werden, jedoch ist das Problem wenn man einen Artikel mehr als einmal ausbucht wird die Gesamtzahl falsch berechnet, das Problem konnte ich bereits einschränken so dass bei der erstellten Schleife das Problem liegt.
Hier der Auszug der VBA in der ich den Fehler vermute:
Sub Auslagern_Click()
'Auslagern_Click
'Ziel : Eine Auslagerung starten
'Autor : Michael Zipper, Januar 2015
'Anmerkungen : Wird über den Button Auslagern im Tabellenblatt
' Buchungen aktiviert
'Parameter
'Rückgabewert :
'Änderungen
'19Jan15 : Aktualisierung der Kommentare
Variablen.gsLagervorgang = "Auslagern"
UserFormVorgangsuebersicht.Show vbModeless
Call ListenFuellen.Lagern
End Sub
Sub Einlagern_Click()
'Einlagern_Click
'Ziel : Eine Einlagerung starten
'Autor : Michael Zipper, Januar 2015
'Anmerkungen : Wird über den Button Auslagern im Tabellenblatt
' Buchungen aktiviert
'Parameter
'Rückgabewert :
'Änderungen
'19Jan15 : Aktualisierung der Kommentare
Variablen.gsLagervorgang = "Einlagern"
UserFormVorgangsuebersicht.Show vbModeless
Call ListenFuellen.Lagern
End Sub
Sub NeueBuchung()
'NeueBuchung
'Ziel : Die Buchungen in der Vorgangsübersicht in das
' Tabellenblatt Buchungen schreiben
'Autor : Michael Zipper, Januar 2015
'Anmerkungen :
'Parameter
'Rückgabewert :
'Änderungen
'19Jan15 : Aktualisierung der Kommentare
Dim lNewLine As Long
Dim nCounter As Integer
Dim nListEnd As Integer
Dim sID As String
Dim lLineArticle As Long
Dim sArticle As String
Dim sArticlegroup As String
Dim nMenge As Integer
Dim nMengeGesamt As Integer
Dim cStueckkosten As Currency
Dim cGeldwert As Currency
Dim cGeldwertGesamt As Currency
Dim dDate As Date
Dim aResult() As Variant
Dim vTime As Variant
Dim sAuslagerungseinheit As String
lNewLine = fLastLine(Variablen.gwsBuchungen) + 1 'erste freie Zeile im Tabellenblatt Buchungen
nListEnd = UserFormVorgangsuebersicht.ListBoxVorgansuebersicht.ListCount - 1 'ListIndex des _
letzten Eintrags in der Listbox
For nCounter = 0 To nListEnd 'Schleife über alle Listeneinträge
With UserFormVorgangsuebersicht.ListBoxVorgansuebersicht
sID = .List(nCounter, 0) 'belegen der Variablen
sArticle = .List(nCounter, 1)
nMenge = .List(nCounter, 2)
If Variablen.gsLagervorgang = "Auslagern" Then 'bei einer Auslagerung wird die Menge _
negativ
nMenge = nMenge * (-1)
End If
sAuslagerungseinheit = .List(nCounter, 3)
dDate = Date
vTime = Time
End With
aResult = fBarcodeIDSearch(sID, Variablen.gwsDatenbank) 'Artikelgruppe und Stueckkosten _
werden aus dem Tabellenblatt Datenbank ermittelt
lLineArticle = aResult(0)
With Variablen.gwsDatenbank
sArticlegroup = .Cells(lLineArticle, 3)
cStueckkosten = .Cells(lLineArticle, 6)
End With
cGeldwert = cStueckkosten * nMenge 'Berechnung des Geldwertes
aResult = fBarcodeIDSearch(sID, Variablen.gwsPositivMengen) 'bestimmen der derzeitigen _
Gesamtmenge
lLineArticle = aResult(0)
nMengeGesamt = 0
If lLineArticle -1 Then 'lLineArticle ist -1 wenn die ID nicht geunden wurde
With Variablen.gwsPositivMengen
nMengeGesamt = .Cells(lLineArticle, 2)
End With
End If
nMengeGesamt = nMengeGesamt + nMenge 'neue Gesamtmenge wird ermittelt
cGeldwertGesamt = nMengeGesamt * cStueckkosten
With Variablen.gwsBuchungen 'die Zellen werden mit den Variablenwerten beschrieben
.Cells(lNewLine, 1) = sID
.Cells(lNewLine, 2) = sArticle
.Cells(lNewLine, 3) = sArticlegroup
.Cells(lNewLine, 4) = nMenge
.Cells(lNewLine, 5) = nMengeGesamt
.Cells(lNewLine, 6) = sAuslagerungseinheit
.Cells(lNewLine, 7) = dDate
.Cells(lNewLine, 8) = vTime
.Cells(lNewLine, 9) = cStueckkosten
.Cells(lNewLine, 10) = cGeldwert
.Cells(lNewLine, 11) = cGeldwertGesamt
If Variablen.gsLagervorgang = "Auslagern" Then 'Bei Auslagerung wird die Schrift rot gefä _
_
rbt
.Cells(lNewLine, 1).Font.Color = vbRed
.Cells(lNewLine, 2).Font.Color = vbRed
.Cells(lNewLine, 3).Font.Color = vbRed
.Cells(lNewLine, 4).Font.Color = vbRed
.Cells(lNewLine, 5).Font.Color = vbRed
.Cells(lNewLine, 6).Font.Color = vbRed
.Cells(lNewLine, 7).Font.Color = vbRed
.Cells(lNewLine, 8).Font.Color = vbRed
.Cells(lNewLine, 9).Font.Color = vbRed
.Cells(lNewLine, 10).Font.Color = vbRed
.Cells(lNewLine, 11).Font.Color = vbRed
End If
End With
lNewLine = lNewLine + 1
Next nCounter
End Sub
Für Antworten / Anregungen zur Lösung des Problems bin ich sehr dankbar.
Gruß
Thorsten