Probleme mit VBA

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm ListBox
Bild

Betrifft: Probleme mit VBA
von: Thorsten
Geschrieben am: 28.11.2015 20:09:42

Hallo Zusammen,
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

Bild

Betrifft: AW: Probleme mit VBA
von: Luschi
Geschrieben am: 29.11.2015 08:09:46
Hallo Thorsten,
ich würde als erstes mal prüfen welchen Wert nMenge an dieser Stelle ist. vielleicht ist der _ Wert schon negativ, do das er wieder positiv wird:


If Variablen.gsLagervorgang = "Auslagern" Then 'bei einer Auslagerung wird die Menge negativ
   'hier den Wert von nMenge prüfen
   Stop 
   nMenge = nMenge * (-1)
End If
Ansonsten würde ich die vorstehende If-Verzweigung so schreiben:

If Variablen.gsLagervorgang = "Auslagern" Then 'bei einer Auslagerung wird die Menge negativ
nMenge = Abs(nMenge) * (-1)
End If
Gruß von Luschi
aus klein-Paris

Bild

Betrifft: AW: Probleme mit VBA
von: Thorsten
Geschrieben am: 01.12.2015 10:15:16
Hallo Luschi,
vielen Dank für deine Hilfestellung, jedoch konnte ich das Problem bis jetzt immer noch nicht beheben.
Nachfolgende habe ich versucht mal einen Überblick zu erstellen um dies zu veranschaulichen.
https://www.herber.de/bbs/user/101930.doc
Gruß
Thorsten

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Sound abspielen"