Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1612to1616
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

Überprüfen ob es 2. Auftrag gibt

Überprüfen ob es 2. Auftrag gibt
05.03.2018 11:19:04
Burak
Guten Morgen,
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

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Überprüfen ob es 2. Auftrag gibt
05.03.2018 15:57:40
Robert
Hallo Burak,
wenn Du das Makro an der Stelle abbrechen willst, musst Du die IF-Abfrage etwas ändern.
Mit
If IsError(Application.Match(barcode, Worksheets(linie).Range("A" & ezeile + 1 & ":A" & lastRowInList), 0)) Then Exit Sub

wird das Makro abgebrochen, wenn es keinen 2. Auftrag gibt. Der Fehler in Deinem Code kam daher, dass die Match-Funktion einen Fehler auswirft und Du versuchst diesen Fehler mit der Variablen eZeile zu addieren. Das klappt nicht. Selbst wenn es klappen sollte, wäre das Ergebnis ein Fehler, aber kein Textstring "Fehler", wie Du ihn in Deinem Code abfragst.
Eventuell solltest Du aber noch einen Hinweis in der Art von
MsgBox "Keinen 2. Auftrag gefunden", vbCritical, "Makro-Abbruch"

aufnehmen, damit man weiß was Sache ist.
Gruß
Robert
Anzeige
Funktioniert super! Danke!
06.03.2018 07:39:08
Burak
Ja das Makro soll nicht dann komplett abbrechen, sondern nur einen Teil überspringen. Aber mit Exit Sub war es am schnellsten überprüfbar ob es funktioniert.
Aber auf jeden Fall funktioniert es super. Ich danke dir!
Einen schönen Tag noch!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige