Überprüfen ob es 2. Auftrag gibt
05.03.2018 11:19:04
Burak
also ich habe ein Makro, was auf einem Tabellenblatt nach einem gewünschten Barcode sucht und Informationen dazu ausgibt. Der selbe Barcode kommt so oft vor, bis der Produktionsauftrag abgeschlossen ist.
Dies habe ich erweitert, dass er danach nach dem 2. Auftrag sucht und da das selbe erneut ausführt.
Das Makro holt sich von einem Auftrag die Zeitwerte und bildet sie in einem Linien-/Verlaufsdiagramm ab.
Das Problem liegt hier, dass er immer nach einem 2. Auftrag sucht udn wenn es keinen gibt, er ne Error Meldung ausgibt.
Beispielausschnitt:
https://www.herber.de/bbs/user/120210.xlsm
Mein Versuch das zu verhindern:
'If Application.Match(barcode, Worksheets(linie).Range("A" & ezeile + 1 & ":A" & lastRowInList), 0) + ezeile = "Falsch" Then Exit Sub
Der gesamte Code:
Private Sub eingabefenster()
barcodewahl.Show
End Sub
Sub verlaufsdiagramm()
Dim linie As String, barcode As Integer, bartest As String, szeile, ezeile, szeile2, ezeile2
Dim lastRowInList As Long, rowHelper As Long
'Usereingabe für Linie
linie = barcodewahl.liniebox
'Abbruch
If linie = "" Then Exit Sub
'Usereingabe für Barcode
bartest = barcodewahl.barcodebox
If bartest = "" Or Not IsNumeric(bartest) Then
Unload barcodewahl
Exit Sub
End If
barcode = CInt(bartest)
'Eingabemaske ausblenden
Unload barcodewahl
'Letzte Reihe ermitteln
lastRowInList = Worksheets(linie).Range(Worksheets(linie).Range("A1").End(xlDown), Worksheets( _
linie).Range("A65536").End(xlUp)).Row
'Startzeile des 1. Auftrags ermitteln
szeile = Application.Match(barcode, Worksheets(linie).Range("A1:A" & lastRowInList), 0)
'Endzeile des 1. Auftrags ermitteln
For rowHelper = szeile + 1 To lastRowInList
If Worksheets(linie).Cells(rowHelper, 1) = barcode Then
ezeile = rowHelper
Else
Exit For
End If
Next
'Letzte Reihe ermitteln
lastRowInList = Worksheets(linie).Range(Worksheets(linie).Range("A1").End(xlDown), Worksheets( _
linie).Range("A65536").End(xlUp)).Row
'Startzeile des 2. Auftrags ermitteln
'If Application.Match(barcode, Worksheets(linie).Range("A" & ezeile + 1 & ":A" & _
lastRowInList), 0) + ezeile = "Falsch" Then Exit Sub
szeile2 = Application.Match(barcode, Worksheets(linie).Range("A" & ezeile + 1 & ":A" & _
lastRowInList), 0) + ezeile
Do Until Worksheets(linie).Range("B" & szeile2) Worksheets(linie).Range("B" & szeile2 + 1)
szeile2 = szeile2 + 1
Loop
szeile2 = szeile2 + 1
ezeile2 = szeile2
'Endzeile des 1. Auftrags ermitteln
For rowHelper = ezeile2 + 1 To lastRowInList
If Worksheets(linie).Cells(rowHelper, 1) = barcode Then
ezeile2 = rowHelper
Else
Exit For
End If
Next
'Alle Diagramme löschen
If ActiveSheet.ChartObjects.Count > 0 Then
ActiveSheet.ChartObjects.Delete
End If
'Zeitverlaufsdiagramm hinzufügen
ActiveSheet.Shapes.AddChart.Select
With ActiveChart
'Zeitwerte kopieren
Worksheets(linie).Range("E" & szeile + 1 & ":E" & ezeile).Copy Range("Z1")
'Kopierte Zeitwerte in Minuten umwandeln
For i = 1 To ezeile - szeile
Range("Z" & i).Value = Range("Z" & i).Value / 60
Next i
'Datenbereich auswählen
.SetSourceData Source:=Range("Z1:Z" & ezeile - szeile)
'X-Achsen-Werte festlegen
.SeriesCollection(1).XValues = "='" & linie & "'!$N$" & szeile + 1 & ":$N$" & ezeile
'Diagrammtyp gestapelte Balken
.ChartType = xlLine
'Diagrammtitel anzeigen und beschriften
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Text = "Linie " & linie & " - " & barcode & " Auftrag 1"
.HasLegend = False
'Intervalle festlegen
.Axes(xlValue).MajorUnit = 2
.Axes(xlCategory).TickLabelSpacing = ((ezeile - szeile) / 10) - 1
.Axes(xlCategory).TickMarkSpacing = (ezeile - szeile) / 10
End With
'Y-Achsenbereich festlegen
With ActiveChart.Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 20
End With
'Zeitverlaufsdiagramm Auftrag 2 hinzufügen
ActiveSheet.Shapes.AddChart.Select
With ActiveChart
'Zeitwerte in Minuten umwandeln
Worksheets(linie).Range("E" & szeile2 + 1 & ":E" & ezeile2).Copy Range("Y1")
For i = 1 To ezeile2 - szeile2
Range("Y" & i).Value = Range("Y" & i).Value / 60
Next i
'Datenbereich auswählen
.SetSourceData Source:=Range("Y1:Y" & ezeile2 - szeile2)
'X-Achsen-Werte festlegen
.SeriesCollection(1).XValues = "='" & linie & "'!$N$" & szeile2 + 1 & ":$N$" & ezeile2
'Diagrammtyp gestapelte Balken
.ChartType = xlLine
'Diagrammtitel anzeigen und beschriften
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Text = "Linie " & linie & " - " & barcode & " Auftrag 2"
.HasLegend = False
'Intervalle festlegen
.Axes(xlValue).MajorUnit = 2
.Axes(xlCategory).TickLabelSpacing = ((ezeile2 - szeile2) / 10) - 1
.Axes(xlCategory).TickMarkSpacing = (ezeile2 - szeile2) / 10
End With
'Y-Achsenbereich festlegen
With ActiveChart.Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 20
End With
'Diagrammgröße und -position einstellen
With ActiveSheet
'Diagramm Auftrag 1
.ChartObjects(1).Left = 500
.ChartObjects(1).Top = 5
.ChartObjects(1).Height = 300
.ChartObjects(1).Width = 1400
'Diagramm Auftrag 2
.ChartObjects(2).Left = 500
.ChartObjects(2).Top = 305
.ChartObjects(2).Height = 300
.ChartObjects(2).Width = 1400
End With
End Sub
Hoffe es ist übersichtlich genug.PS: Optimierungsvorschläge nehme ich ebenfalls mit großen Freuden entgegen.
Vielen Dank im Voraus!
Liebe Grüße
Burak