Hallo,
und zwar nutze ich eine Form mit einem Code um Daten aus einer anderen Datei abzugleichen/updates zu machen.
Allerdings macht er dies immer automatisch wenn er diese findet über die Auftragsnummer.
Was ich nun gerne hätte, wäre folgendes:
- Wenn er unterschiede findet soll er den Wert in dieser Zeile in Spalte P auf 1 setzen.
- Sollte alles passen muss nichts gesetzt werden. Es geht mir darum eben sehen zu können welche Zeile wurde verändert.
Anbei mein aktueller Code welcher wie gesagt per Auftragsnummer sucht und immer die Daten wenn gefunden einfach übernimmt:
Spoiler anzeigen
aufgrund des Codeumfangs Spoiler hinzugefügt und CodeTags korrigiert ~VaporiZed
und zwar nutze ich eine Form mit einem Code um Daten aus einer anderen Datei abzugleichen/updates zu machen.
Allerdings macht er dies immer automatisch wenn er diese findet über die Auftragsnummer.
Was ich nun gerne hätte, wäre folgendes:
- Wenn er unterschiede findet soll er den Wert in dieser Zeile in Spalte P auf 1 setzen.
- Sollte alles passen muss nichts gesetzt werden. Es geht mir darum eben sehen zu können welche Zeile wurde verändert.
Anbei mein aktueller Code welcher wie gesagt per Auftragsnummer sucht und immer die Daten wenn gefunden einfach übernimmt:
Visual Basic-Quellcode
- 'Option Explicit
- Const MZ1 = 11 '1.Zeile in Maschinenliste wahlweise 19 oder 22
- Const MLZ1 = 2 '1.Zeile in MASTER Liste wahlweise 19 oder 22
- Private Sub CommandButton1_Click()
- MitKommentar
- End Sub
- Private Sub MitKommentar()
- 'Als erste deklarieren wir unsere Variablen
- 'Den Zähler i für die aktuelle Zeile
- 'Dim i As Long
- 'Die letzte Zeile
- 'Dim lzML As Long
- 'Variablen um die prozentualen Anteil zu ermitteln
- Dim Prozent As Double
- Dim ProzentAktuell As Double
- Dim ProzentLänge As Double
- 'Berechnung Dauer des Vorgangs
- Dim DaZeit As Date
- DaZeit = Time
- 'Die Berechnung
- Dim i As Integer, j As Integer
- Dim lrOV As Long, lrML As Long
- On Error GoTo FehlerVerarbeitung
- 'Dim Plan As Workbook: Set Plan = Workbooks("MASTER HTIG PRODUCTION 2022.xlsx")
- Dim Plan As Workbook:
- Set Plan = Workbooks(ThisWorkbook.Sheets("Maschinenliste").Range("J8").Value)
- 'MsgBox Plan.Value
- Dim Liste As Workbook:
- Set Liste = Workbooks("QC Maschinenliste.xlsm")
- 'Dim OVSht As Worksheet: Set OVSht = Plan.Sheets("Overview Machines")
- On Error GoTo FehlerVerarbeitung
- Dim OVSht As Worksheet
- Set OVSht = Plan.Worksheets(ThisWorkbook.Sheets("Maschinenliste").Range("J9").Value)
- 'Button deaktivieren
- CommandButton1.Enabled = False
- 'Zu Fehler springen wenn Blatt/Datei Falsch
- On Error GoTo Fehler
- 'Set Wb = Workbooks(AbgDatei)
- 'Set DEL = Wb.Worksheets(Deliver1)
- 'lzDV = DEL.Cells(Rows.Count, 1).End(xlUp).Row
- 'Startzeit in Label schreiben
- Me.Label34.Caption = Time
- 'Andere Label leeren
- Me.Label35.Caption = ""
- Me.Label37.Caption = ""
- Me.Label38.Caption = ""
- 'Statusbar alten Text speichern
- OldTxt = Application.StatusBar
- 'Um das ganze ein wenig zu beschleunigen schalten wir vorübergehend
- 'die Bildschirmaktualisierung aus
- Application.ScreenUpdating = False
- 'Als erstes setzen wir die Variable Prozent auf null
- Prozent = 0
- With Liste.Sheets("Maschinenliste")
- lrML = .Cells(Rows.Count, 3).End(xlUp).Row
- lrOV = OVSht.Cells(Rows.Count, 6).End(xlUp).Row
- '1.Schleife in Maschinenliste
- For i = MZ1 To lrML
- '2.Schleife in Overview Sheet
- For j = MLZ1 To lrOV
- 'in Overview nach Maschinen-Nr. suchen
- If Trim(.Cells(i, "B")) = Trim(OVSht.Cells(j, "D")) Then
- 'Daten laden wenn alle Zellen Werte haben
- 'If Trim(OVSht.Cells(j, "Q")) <> "" Then
- If Trim(OVSht.Cells(j, "Q")) = "HTIG" Then
- '** Kunde aus Spalte U oder W nehmen??
- .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
- .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
- .Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
- .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
- .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
- ElseIf Trim(OVSht.Cells(j, "Q")) = "HMMI" Then
- '** Kunde aus Spalte U oder W nehmen??
- .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
- .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
- .Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
- .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
- .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
- Else
- .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
- .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
- .Cells(i, 6) = OVSht.Cells(j, "Q") 'Kunden Name
- .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
- .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
- End If
- End If
- 'Da wir die Exceltabelle und die Userform gleichzeitig bearbeitet werden
- ' müssen wir einen eine Aufgabe in den Arbeitsspeicher auslagern.
- 'Ansonsten sehen wir zur Laufzeit keine Veränderungen an der Progressbar.
- 'Um dies zu realisieren übergeben wir die Ermittlung der Wochentage mit
- '"Do Events" an den Arbeitspeicher.
- DoEvents
- 'Um den aktuellen Fortschritt anzeigen zu können ermitteln wir
- 'als nächstes anhand unseres Zählers und der letzten Zeile den
- 'prozentualen Wert. -1 da wir in der 2. Zeile beginnen.
- ProzentAktuell = (i - MZ1) / (lrML - MZ1) * 100
- 'Unser Prozentlabel hat eine Länge (width) von 500. Wir teilen
- 'diese durch 100 und multiplizieren das Ergebnis mit den zuvor
- 'ermittelten Fortschritt. Anschließend können wir unsere Elemente
- 'mit diesem Ergebnis exakt positionieren.
- ProzentLänge = 500 / 100 * ProzentAktuell
- 'Nun zeigen wir unserem User den aktuellen Fortschritt
- Prozentanzeige.Caption = Format(ProzentAktuell, "##0") & " %"
- 'Außerdem interessiert dem User die aktuelle Position unserer Tabelle
- Zeile.Caption = "Zeile " & i & " von " & lrML & " Zeilen bearbeitet "
- 'Die Breite unseres Fortschrittbalkens wird um die Prozentlänge erhöht.
- Fortschritt.Width = ProzentLänge
- 'Hier zeigen wir das aktuelle Datum sowie den ermittelten Tag
- aktuellesDatum.Caption = .Cells(i, 1) & "/" & .Cells(i, 2) & " - " & .Cells(i, 3)
- 'Die linke Position unserer Prozentanzeige, die "Mitfährt", wird durch die
- 'steigende Breite des Fortschrittbalkens nach links verschoben.
- '-47 da dies die Breite des Labels ist.
- Prozentanzeige.Left = Fortschritt.Width - 47
- 'Abhängig vom prozentualen Fortschritt manipulieren wir nun die Farbe unseres
- 'Fortschrittslabels und ändern die Caption unserer Userform entsprechend.
- Select Case ProzentAktuell
- Case Is > 85
- 'Me.Caption = "Ich bin gleich fertig"
- Fortschritt.BackColor = vbGreen
- Case Is < 50
- 'Me.Caption = "Es dauert noch eine Weile"
- Fortschritt.BackColor = vbRed
- Case Is > 49
- Fortschritt.BackColor = vbYellow
- 'Me.Caption = "Mehr als die Hälfte ist geschafft"
- End Select
- Next j
- Next i
- End With
- 'Um unser Ergebnis anzuzeigen schalten wir zuletzt die Bildschirmaktualisierung wieder
- 'ein
- Application.ScreenUpdating = True
- 'MsgBox n & " Maschinen aus der Liste sind in den Produktionshallen."
- 'Endzeit in Label schreiben
- Set Plan = Nothing
- Set Liste = Nothing
- Me.Label39.Caption = CDate(Time - DaZeit)
- Me.Label35.Caption = Time
- Application.StatusBar = OldTxt
- 'Ergebnis in Labels schreiben
- Me.Label37.Caption = " Maschinen wurden abgeglichen"
- Me.Label38.Caption = "Viel Spaß beim arbeiten :)"
- 'Button deaktivieren
- CommandButton1.Enabled = True
- Exit Sub
- FehlerVerarbeitung:
- 'Was tun, wenn ein Laufzeitfehler auftritt?
- MsgBox "Fehler aufgetreten, Programm beenden"
- 'Fehler: MsgBox "Unerwarteter Fehler - Richtige Datei mit richtigem Blatt geöffnet ??"
- Fehler: MsgBox " Datei: " & AbgDatei & " - Blatt: " & Deliver1 & Chr(10) & "Datei geöffnet? und/oder Name richtig geschrieben??" & Chr(10), vbOKOnly, " Fehler bitte prüfen " '& Error()
- CommandButton1.Enabled = True
- End Sub
- Private Sub Image1_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
- End Sub
- 'Zentrieren auf beiden Bildschirmen des Fenstern
- Private Sub UserForm_Initialize()
- Dim sngTop As Single, sngLeft As Single
- Me.StartUpPosition = 0
- sngLeft = Application.Left + Application.Width / 2 - Me.Width / 2
- sngTop = Application.Top + Application.Height / 2 - Me.Height / 2
- Me.Left = sngLeft
- Me.Top = sngTop
- Label13 = Date
- Label28 = Time
- End Sub
aufgrund des Codeumfangs Spoiler hinzugefügt und CodeTags korrigiert ~VaporiZed
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()