match funktioniert nicht korrekt
23.02.2018 13:18:40
Burak
es geht um folgendes Makro
Sub verlaufsdiagramm()
Dim linie As String, barcode As Integer, bartest As String, szeile, ezeile, szeile2, ezeile2
Dim lastRowInList As Long
Dim 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
lastRowInList = Worksheets(linie).Range(Worksheets(linie).Range("A1").End(xlDown), Worksheets( _
linie).Range("A65536").End(xlUp)).Row
szeile = Application.Match(barcode, Worksheets(linie).Range("A1:A" & lastRowInList), 0)
For rowHelper = szeile + 1 To lastRowInList
If Worksheets(linie).Cells(rowHelper, 1) = barcode Then
ezeile = rowHelper
Else
Exit For
End If
Next
lastRowInList = Worksheets(linie).Range(Worksheets(linie).Range("A1").End(xlDown), Worksheets( _
linie).Range("A65536").End(xlUp)).Row
MsgBox ("Erste Zeile erster Auftrag: " & szeile)
MsgBox ("Letzte Zeile erster Auftrag: " & ezeile)
MsgBox ("Letzte Zeile der gesamten Tabelle: " & lastRowInList)
szeile2 = Application.Match(barcode, Worksheets(linie).Range("A" & ezeile + 1 & ":A" & _
lastRowInList), 0)
MsgBox ("Startzeile des 2. Auftrags: " & szeile2 & " HIER IST DER FEHLER!!!")
ezeile2 = szeile2
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 in Minuten umwandeln
Worksheets(linie).Range("E" & szeile + 1 & ":E" & ezeile).Copy Range("Z1")
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
.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
.ChartObjects(1).Left = 5
.ChartObjects(1).Top = 5
.ChartObjects(1).Height = 300
.ChartObjects(1).Width = 1400
.ChartObjects(2).Left = 5
.ChartObjects(2).Top = 305
.ChartObjects(2).Height = 300
.ChartObjects(2).Width = 1400
End With
End Sub
Also bisher hat das Makro einen Barcode auf einem Tabellenblatt gesucht, ermittelt wann er das erste mal auftaucht und ab der Zeile wo er das erste mal aufgetaucht ist geguckt in welcher Zeile er das erste mal nicht mehr vorkommt.So habe ich die Zeilen gefunden, die zu einem Auftrag gehören.
Dementsprechend habe ich das dann in eine Grafik umgewandelt.
So weit so gut.
Nächster Schritt war es in der Tabelle weiter zu suchen ob der Barcode iwann NOCH EINMAL auftaucht und da dann denselben Prozess wie zuvor erneut durchzuführen und dafür ne zweite Grafik zu erstellen.
Das Problem ist, dass er die Startzeile (also wo der Barcode das erste mal auftaucht NACH dem ersten Auftrag) völlig sinnfrei wählt. Im Beispiel wählt er eine Zeile mitten im ersten Auftrag. Also der erste Auftrag geht etwa von Zeile 81 bis 609 und die startzeile für den zweiten auftrag legt er auf etwa 300.
Hier ein Beispielausschnitt:
https://www.herber.de/bbs/user/120023.xlsm
PS: steht zwar auch im Tabellenblatt, aber bitte für Linie R3 und für Barcode 1270 eingeben.
Hoffe jmd findet meinen Fehler.
Vielen Dank euch!!!