Abgleich mit Datei soll erkennen falls ein Unterschied auftritt dann neue Daten schreiben

  • Excel

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von UltraTM.

    Abgleich mit Datei soll erkennen falls ein Unterschied auftritt dann neue Daten schreiben

    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

    Visual Basic-Quellcode

    1. 'Option Explicit
    2. Const MZ1 = 11 '1.Zeile in Maschinenliste wahlweise 19 oder 22
    3. Const MLZ1 = 2 '1.Zeile in MASTER Liste wahlweise 19 oder 22
    4. Private Sub CommandButton1_Click()
    5. MitKommentar
    6. End Sub
    7. Private Sub MitKommentar()
    8. 'Als erste deklarieren wir unsere Variablen
    9. 'Den Zähler i für die aktuelle Zeile
    10. 'Dim i As Long
    11. 'Die letzte Zeile
    12. 'Dim lzML As Long
    13. 'Variablen um die prozentualen Anteil zu ermitteln
    14. Dim Prozent As Double
    15. Dim ProzentAktuell As Double
    16. Dim ProzentLänge As Double
    17. 'Berechnung Dauer des Vorgangs
    18. Dim DaZeit As Date
    19. DaZeit = Time
    20. 'Die Berechnung
    21. Dim i As Integer, j As Integer
    22. Dim lrOV As Long, lrML As Long
    23. On Error GoTo FehlerVerarbeitung
    24. 'Dim Plan As Workbook: Set Plan = Workbooks("MASTER HTIG PRODUCTION 2022.xlsx")
    25. Dim Plan As Workbook:
    26. Set Plan = Workbooks(ThisWorkbook.Sheets("Maschinenliste").Range("J8").Value)
    27. 'MsgBox Plan.Value
    28. Dim Liste As Workbook:
    29. Set Liste = Workbooks("QC Maschinenliste.xlsm")
    30. 'Dim OVSht As Worksheet: Set OVSht = Plan.Sheets("Overview Machines")
    31. On Error GoTo FehlerVerarbeitung
    32. Dim OVSht As Worksheet
    33. Set OVSht = Plan.Worksheets(ThisWorkbook.Sheets("Maschinenliste").Range("J9").Value)
    34. 'Button deaktivieren
    35. CommandButton1.Enabled = False
    36. 'Zu Fehler springen wenn Blatt/Datei Falsch
    37. On Error GoTo Fehler
    38. 'Set Wb = Workbooks(AbgDatei)
    39. 'Set DEL = Wb.Worksheets(Deliver1)
    40. 'lzDV = DEL.Cells(Rows.Count, 1).End(xlUp).Row
    41. 'Startzeit in Label schreiben
    42. Me.Label34.Caption = Time
    43. 'Andere Label leeren
    44. Me.Label35.Caption = ""
    45. Me.Label37.Caption = ""
    46. Me.Label38.Caption = ""
    47. 'Statusbar alten Text speichern
    48. OldTxt = Application.StatusBar
    49. 'Um das ganze ein wenig zu beschleunigen schalten wir vorübergehend
    50. 'die Bildschirmaktualisierung aus
    51. Application.ScreenUpdating = False
    52. 'Als erstes setzen wir die Variable Prozent auf null
    53. Prozent = 0
    54. With Liste.Sheets("Maschinenliste")
    55. lrML = .Cells(Rows.Count, 3).End(xlUp).Row
    56. lrOV = OVSht.Cells(Rows.Count, 6).End(xlUp).Row
    57. '1.Schleife in Maschinenliste
    58. For i = MZ1 To lrML
    59. '2.Schleife in Overview Sheet
    60. For j = MLZ1 To lrOV
    61. 'in Overview nach Maschinen-Nr. suchen
    62. If Trim(.Cells(i, "B")) = Trim(OVSht.Cells(j, "D")) Then
    63. 'Daten laden wenn alle Zellen Werte haben
    64. 'If Trim(OVSht.Cells(j, "Q")) <> "" Then
    65. If Trim(OVSht.Cells(j, "Q")) = "HTIG" Then
    66. '** Kunde aus Spalte U oder W nehmen??
    67. .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    68. .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    69. .Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
    70. .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    71. .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    72. ElseIf Trim(OVSht.Cells(j, "Q")) = "HMMI" Then
    73. '** Kunde aus Spalte U oder W nehmen??
    74. .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    75. .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    76. .Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
    77. .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    78. .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    79. Else
    80. .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    81. .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    82. .Cells(i, 6) = OVSht.Cells(j, "Q") 'Kunden Name
    83. .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    84. .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    85. End If
    86. End If
    87. 'Da wir die Exceltabelle und die Userform gleichzeitig bearbeitet werden
    88. ' müssen wir einen eine Aufgabe in den Arbeitsspeicher auslagern.
    89. 'Ansonsten sehen wir zur Laufzeit keine Veränderungen an der Progressbar.
    90. 'Um dies zu realisieren übergeben wir die Ermittlung der Wochentage mit
    91. '"Do Events" an den Arbeitspeicher.
    92. DoEvents
    93. 'Um den aktuellen Fortschritt anzeigen zu können ermitteln wir
    94. 'als nächstes anhand unseres Zählers und der letzten Zeile den
    95. 'prozentualen Wert. -1 da wir in der 2. Zeile beginnen.
    96. ProzentAktuell = (i - MZ1) / (lrML - MZ1) * 100
    97. 'Unser Prozentlabel hat eine Länge (width) von 500. Wir teilen
    98. 'diese durch 100 und multiplizieren das Ergebnis mit den zuvor
    99. 'ermittelten Fortschritt. Anschließend können wir unsere Elemente
    100. 'mit diesem Ergebnis exakt positionieren.
    101. ProzentLänge = 500 / 100 * ProzentAktuell
    102. 'Nun zeigen wir unserem User den aktuellen Fortschritt
    103. Prozentanzeige.Caption = Format(ProzentAktuell, "##0") & " %"
    104. 'Außerdem interessiert dem User die aktuelle Position unserer Tabelle
    105. Zeile.Caption = "Zeile " & i & " von " & lrML & " Zeilen bearbeitet "
    106. 'Die Breite unseres Fortschrittbalkens wird um die Prozentlänge erhöht.
    107. Fortschritt.Width = ProzentLänge
    108. 'Hier zeigen wir das aktuelle Datum sowie den ermittelten Tag
    109. aktuellesDatum.Caption = .Cells(i, 1) & "/" & .Cells(i, 2) & " - " & .Cells(i, 3)
    110. 'Die linke Position unserer Prozentanzeige, die "Mitfährt", wird durch die
    111. 'steigende Breite des Fortschrittbalkens nach links verschoben.
    112. '-47 da dies die Breite des Labels ist.
    113. Prozentanzeige.Left = Fortschritt.Width - 47
    114. 'Abhängig vom prozentualen Fortschritt manipulieren wir nun die Farbe unseres
    115. 'Fortschrittslabels und ändern die Caption unserer Userform entsprechend.
    116. Select Case ProzentAktuell
    117. Case Is > 85
    118. 'Me.Caption = "Ich bin gleich fertig"
    119. Fortschritt.BackColor = vbGreen
    120. Case Is < 50
    121. 'Me.Caption = "Es dauert noch eine Weile"
    122. Fortschritt.BackColor = vbRed
    123. Case Is > 49
    124. Fortschritt.BackColor = vbYellow
    125. 'Me.Caption = "Mehr als die Hälfte ist geschafft"
    126. End Select
    127. Next j
    128. Next i
    129. End With
    130. 'Um unser Ergebnis anzuzeigen schalten wir zuletzt die Bildschirmaktualisierung wieder
    131. 'ein
    132. Application.ScreenUpdating = True
    133. 'MsgBox n & " Maschinen aus der Liste sind in den Produktionshallen."
    134. 'Endzeit in Label schreiben
    135. Set Plan = Nothing
    136. Set Liste = Nothing
    137. Me.Label39.Caption = CDate(Time - DaZeit)
    138. Me.Label35.Caption = Time
    139. Application.StatusBar = OldTxt
    140. 'Ergebnis in Labels schreiben
    141. Me.Label37.Caption = " Maschinen wurden abgeglichen"
    142. Me.Label38.Caption = "Viel Spaß beim arbeiten :)"
    143. 'Button deaktivieren
    144. CommandButton1.Enabled = True
    145. Exit Sub
    146. FehlerVerarbeitung:
    147. 'Was tun, wenn ein Laufzeitfehler auftritt?
    148. MsgBox "Fehler aufgetreten, Programm beenden"
    149. 'Fehler: MsgBox "Unerwarteter Fehler - Richtige Datei mit richtigem Blatt geöffnet ??"
    150. Fehler: MsgBox " Datei: " & AbgDatei & " - Blatt: " & Deliver1 & Chr(10) & "Datei geöffnet? und/oder Name richtig geschrieben??" & Chr(10), vbOKOnly, " Fehler bitte prüfen " '& Error()
    151. CommandButton1.Enabled = True
    152. End Sub
    153. 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)
    154. End Sub
    155. 'Zentrieren auf beiden Bildschirmen des Fenstern
    156. Private Sub UserForm_Initialize()
    157. Dim sngTop As Single, sngLeft As Single
    158. Me.StartUpPosition = 0
    159. sngLeft = Application.Left + Application.Width / 2 - Me.Width / 2
    160. sngTop = Application.Top + Application.Height / 2 - Me.Height / 2
    161. Me.Left = sngLeft
    162. Me.Top = sngTop
    163. Label13 = Date
    164. Label28 = Time
    165. End Sub



    aufgrund des Codeumfangs Spoiler hinzugefügt und CodeTags korrigiert ~VaporiZed

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Wie folgt habe ich es umgebaut.
    Nur hab ich hier ein Problem das er immer den Status in P auf 1 setzt auch wenn kein Unterschied gefunden wurde.

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. 'Option Explicit
    2. Const MZ1 = 11 '1.Zeile in Maschinenliste wahlweise 19 oder 22
    3. Const MLZ1 = 2 '1.Zeile in MASTER Liste wahlweise 19 oder 22
    4. Private Sub CommandButton1_Click()
    5. MitKommentar
    6. End Sub
    7. Private Sub MitKommentar()
    8. 'Als erste deklarieren wir unsere Variablen
    9. 'Den Zähler i für die aktuelle Zeile
    10. 'Dim i As Long
    11. 'Die letzte Zeile
    12. 'Dim lzML As Long
    13. 'Variablen um die prozentualen Anteil zu ermitteln
    14. Dim Prozent As Double
    15. Dim ProzentAktuell As Double
    16. Dim ProzentLänge As Double
    17. 'Berechnung Dauer des Vorgangs
    18. Dim DaZeit As Date
    19. DaZeit = Time
    20. 'Die Berechnung
    21. Dim i As Integer, j As Integer
    22. Dim lrOV As Long, lrML As Long
    23. On Error GoTo FehlerVerarbeitung
    24. 'Dim Plan As Workbook: Set Plan = Workbooks("MASTER HTIG PRODUCTION 2022.xlsx")
    25. Dim Plan As Workbook:
    26. Set Plan = Workbooks(ThisWorkbook.Sheets("Maschinenliste").Range("J8").Value)
    27. 'MsgBox Plan.Value
    28. Dim Liste As Workbook:
    29. Set Liste = Workbooks("QC Maschinenliste.xlsm")
    30. 'Dim OVSht As Worksheet: Set OVSht = Plan.Sheets("Overview Machines")
    31. On Error GoTo FehlerVerarbeitung
    32. Dim OVSht As Worksheet
    33. Set OVSht = Plan.Worksheets(ThisWorkbook.Sheets("Maschinenliste").Range("J9").Value)
    34. 'Button deaktivieren
    35. CommandButton1.Enabled = False
    36. 'Zu Fehler springen wenn Blatt/Datei Falsch
    37. On Error GoTo Fehler
    38. 'Set Wb = Workbooks(AbgDatei)
    39. 'Set DEL = Wb.Worksheets(Deliver1)
    40. 'lzDV = DEL.Cells(Rows.Count, 1).End(xlUp).Row
    41. 'Startzeit in Label schreiben
    42. Me.Label34.Caption = Time
    43. 'Andere Label leeren
    44. Me.Label35.Caption = ""
    45. Me.Label37.Caption = ""
    46. Me.Label38.Caption = ""
    47. 'Statusbar alten Text speichern
    48. OldTxt = Application.StatusBar
    49. 'Um das ganze ein wenig zu beschleunigen schalten wir vorübergehend
    50. 'die Bildschirmaktualisierung aus
    51. Application.ScreenUpdating = False
    52. 'Als erstes setzen wir die Variable Prozent auf null
    53. Prozent = 0
    54. With Liste.Sheets("Maschinenliste")
    55. lrML = .Cells(Rows.Count, 3).End(xlUp).Row
    56. lrOV = OVSht.Cells(Rows.Count, 6).End(xlUp).Row
    57. '1.Schleife in Maschinenliste
    58. For i = MZ1 To lrML
    59. '2.Schleife in Overview Sheet
    60. For j = MLZ1 To lrOV
    61. 'in Overview nach Maschinen-Nr. suchen
    62. If Trim(.Cells(i, "B")) = Trim(OVSht.Cells(j, "D")) Then
    63. 'Daten laden wenn alle Zellen Werte haben
    64. 'If Trim(OVSht.Cells(j, "Q")) <> "" Then
    65. If Trim(OVSht.Cells(j, "Q")) = "HTIG" Then
    66. '** Kunde aus Spalte U oder W nehmen??
    67. 'Aufragsnummer vergleichen START
    68. If Trim(.Cells(i, "C")) <> Trim(OVSht.Cells(j, "T")) Then
    69. .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    70. .Cells(i, 16) = 1 'Meistertask Status
    71. 'Auftragsnummer vergleichen ENDE
    72. End If
    73. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "R")) Then
    74. .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    75. .Cells(i, 16) = 1 'Meistertask Status
    76. End If
    77. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "S")) Then
    78. .Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
    79. .Cells(i, 16) = 1 'Meistertask Status
    80. End If
    81. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "Y")) Then
    82. .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    83. .Cells(i, 16) = 1 'Meistertask Status
    84. End If
    85. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "AB")) Then
    86. .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    87. .Cells(i, 16) = 1 'Meistertask Status
    88. End If
    89. '.Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    90. '.Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    91. '.Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
    92. '.Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    93. '.Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    94. ElseIf Trim(OVSht.Cells(j, "Q")) = "HMMI" Then
    95. If Trim(.Cells(i, "C")) <> Trim(OVSht.Cells(j, "T")) Then
    96. .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    97. .Cells(i, 16) = 1 'Meistertask Status
    98. 'Auftragsnummer vergleichen ENDE
    99. End If
    100. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "R")) Then
    101. .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    102. .Cells(i, 16) = 1 'Meistertask Status
    103. End If
    104. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "S")) Then
    105. .Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
    106. .Cells(i, 16) = 1 'Meistertask Status
    107. End If
    108. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "Y")) Then
    109. .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    110. .Cells(i, 16) = 1 'Meistertask Status
    111. End If
    112. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "AB")) Then
    113. .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    114. .Cells(i, 16) = 1 'Meistertask Status
    115. End If
    116. '** Kunde aus Spalte U oder W nehmen??
    117. ' .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    118. ' .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    119. ' .Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
    120. ' .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    121. ' .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    122. Else
    123. If Trim(.Cells(i, "C")) <> Trim(OVSht.Cells(j, "T")) Then
    124. .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    125. .Cells(i, 16) = 1 'Meistertask Status
    126. 'Auftragsnummer vergleichen ENDE
    127. End If
    128. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "R")) Then
    129. .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    130. .Cells(i, 16) = 1 'Meistertask Status
    131. End If
    132. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "Q")) Then
    133. .Cells(i, 6) = OVSht.Cells(j, "Q") 'Kunden Name
    134. .Cells(i, 16) = 1 'Meistertask Status
    135. End If
    136. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "Y")) Then
    137. .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    138. .Cells(i, 16) = 1 'Meistertask Status
    139. End If
    140. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "AB")) Then
    141. .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    142. .Cells(i, 16) = 1 'Meistertask Status
    143. End If
    144. '.Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    145. '.Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    146. '.Cells(i, 6) = OVSht.Cells(j, "Q") 'Kunden Name
    147. '.Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    148. '.Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    149. End If
    150. End If
    151. 'Da wir die Exceltabelle und die Userform gleichzeitig bearbeitet werden
    152. ' müssen wir einen eine Aufgabe in den Arbeitsspeicher auslagern.
    153. 'Ansonsten sehen wir zur Laufzeit keine Veränderungen an der Progressbar.
    154. 'Um dies zu realisieren übergeben wir die Ermittlung der Wochentage mit
    155. '"Do Events" an den Arbeitspeicher.
    156. DoEvents
    157. 'Um den aktuellen Fortschritt anzeigen zu können ermitteln wir
    158. 'als nächstes anhand unseres Zählers und der letzten Zeile den
    159. 'prozentualen Wert. -1 da wir in der 2. Zeile beginnen.
    160. ProzentAktuell = (i - MZ1) / (lrML - MZ1) * 100
    161. 'Unser Prozentlabel hat eine Länge (width) von 500. Wir teilen
    162. 'diese durch 100 und multiplizieren das Ergebnis mit den zuvor
    163. 'ermittelten Fortschritt. Anschließend können wir unsere Elemente
    164. 'mit diesem Ergebnis exakt positionieren.
    165. ProzentLänge = 500 / 100 * ProzentAktuell
    166. 'Nun zeigen wir unserem User den aktuellen Fortschritt
    167. Prozentanzeige.Caption = Format(ProzentAktuell, "##0") & " %"
    168. 'Außerdem interessiert dem User die aktuelle Position unserer Tabelle
    169. Zeile.Caption = "Zeile " & i & " von " & lrML & " Zeilen bearbeitet "
    170. 'Die Breite unseres Fortschrittbalkens wird um die Prozentlänge erhöht.
    171. Fortschritt.Width = ProzentLänge
    172. 'Hier zeigen wir das aktuelle Datum sowie den ermittelten Tag
    173. aktuellesDatum.Caption = .Cells(i, 1) & "/" & .Cells(i, 2) & " - " & .Cells(i, 3)
    174. 'Die linke Position unserer Prozentanzeige, die "Mitfährt", wird durch die
    175. 'steigende Breite des Fortschrittbalkens nach links verschoben.
    176. '-47 da dies die Breite des Labels ist.
    177. Prozentanzeige.Left = Fortschritt.Width - 47
    178. 'Abhängig vom prozentualen Fortschritt manipulieren wir nun die Farbe unseres
    179. 'Fortschrittslabels und ändern die Caption unserer Userform entsprechend.
    180. Select Case ProzentAktuell
    181. Case Is > 85
    182. 'Me.Caption = "Ich bin gleich fertig"
    183. Fortschritt.BackColor = vbGreen
    184. Case Is < 50
    185. 'Me.Caption = "Es dauert noch eine Weile"
    186. Fortschritt.BackColor = vbRed
    187. Case Is > 49
    188. Fortschritt.BackColor = vbYellow
    189. 'Me.Caption = "Mehr als die Hälfte ist geschafft"
    190. End Select
    191. Next j
    192. Next i
    193. End With
    194. 'Um unser Ergebnis anzuzeigen schalten wir zuletzt die Bildschirmaktualisierung wieder
    195. 'ein
    196. Application.ScreenUpdating = True
    197. 'MsgBox n & " Maschinen aus der Liste sind in den Produktionshallen."
    198. 'Endzeit in Label schreiben
    199. Set Plan = Nothing
    200. Set Liste = Nothing
    201. Me.Label39.Caption = CDate(Time - DaZeit)
    202. Me.Label35.Caption = Time
    203. Application.StatusBar = OldTxt
    204. 'Ergebnis in Labels schreiben
    205. Me.Label37.Caption = " Maschinen wurden abgeglichen"
    206. Me.Label38.Caption = "Viel Spaß beim arbeiten :)"
    207. 'Button deaktivieren
    208. CommandButton1.Enabled = True
    209. Exit Sub
    210. FehlerVerarbeitung:
    211. 'Was tun, wenn ein Laufzeitfehler auftritt?
    212. MsgBox "Fehler aufgetreten, Programm beenden"
    213. 'Fehler: MsgBox "Unerwarteter Fehler - Richtige Datei mit richtigem Blatt geöffnet ??"
    214. Fehler: MsgBox " Datei: " & AbgDatei & " - Blatt: " & Deliver1 & Chr(10) & "Datei geöffnet? und/oder Name richtig geschrieben??" & Chr(10), vbOKOnly, " Fehler bitte prüfen " '& Error()
    215. CommandButton1.Enabled = True
    216. End Sub
    217. 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)
    218. End Sub
    219. Private Sub Label38_Click()
    220. End Sub
    221. 'Zentrieren auf beiden Bildschirmen des Fenstern
    222. Private Sub UserForm_Initialize()
    223. Dim sngTop As Single, sngLeft As Single
    224. Me.StartUpPosition = 0
    225. sngLeft = Application.Left + Application.Width / 2 - Me.Width / 2
    226. sngTop = Application.Top + Application.Height / 2 - Me.Height / 2
    227. Me.Left = sngLeft
    228. Me.Top = sngTop
    229. Label13 = Date
    230. Label28 = Time
    231. End Sub



    aufgrund des Codeumfangs Spoiler hinzugefügt und CodeTags korrigiert ~VaporiZed

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    Also syntaktisch haut das schon mal absolut gar nicht hin. Schau dir noch mal an, wie man denn so eine Abfrage mit if + elseif + end if richtig schreibt und dann vergleiche das dann mal mit denen in deinem Code.
    Womit du aber recht hast, da wo die Erste Bedingung zutrifft wird der Code ausgeführt, alle anderen nicht.

    Womit entwickelst du denn, Text-Editor? Ich hab NULL Ahnung von Excel, da wird es doch sicher eine IDE geben, nutze eine, dann sollten dir so einige Fehler angezeigt werden.


    Visual Basic-Quellcode

    1. If Trim(.Cells(i, "C")) <> Trim(OVSht.Cells(j, "T")) Then
    2. Else If '############################ else if was? das in der nächsten Zeile? Syntax ERROR!
    3. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "R")) Then
    4. Else If
    5. .......


    PS.
    @VaporiZed
    Erledigt, war mir nicht sicher welcher der richtige ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BitBrösel“ ()

    Tja, wie wär's mit Haltepunkten?
    Einfach immer dann, wenn .Cells(i, 16) = 1 kommt, noch ein Stop dazu, dann weißt Du, an welcher Stelle die Methode einen Unterschied sieht.
    Oder es geht auch etwas effizienter: Zu Methodenbeginn: Dim Unterschiedstext As String und immer, wenn der Status auf 1 gesetzt wird, dann Unterschiedstext = Unterschiedstext & hierEinenCodestellenspezifischenHinweisWasDaGeradeAndersIst & "; " und am Ende der Methode: MsgBox Unterschiedstext

    @BitBrösel: Korrigier Du bitte Deine CodeTags selber von VB.NET auf VB ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich habe meine Lösung mal aktualisiert.
    Habe hier das Problem er macht immer eine 1.

    Er gleicht ja Zeilen mit Zeilen aus einer anderen Datei ab und wenn er in einer der 5 Spalten einen Unterschied findet und diesen dann anpasst soll bei dieser Zeile in Spalte P eine 1 rein. Habe dort eine bedingte Formatierung drin und mit 1 ein ! dann darin.

    Sprich das wäre mein Ziel guck dir die Zeilen alle an ist etwas unterschiedlich darin passe dies an und schreibe in P eine 1.
    Nu mal langsam. Was ist jetzt gerade aktuell das Ziel/Problem? Ich dachte, das Problem, was es jetzt zu lösen gilt, ist, dass immer eine 1, also ein Unterschied registriert wird, obwohl kein Unterschied da zu sein scheint. Ist das jetzt Dein Anliegen oder nicht?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo,

    ja das ist mein Anliegen des Codes in meinem Post der "Lösung"

    Ich bin mir nicht sicher ob <> dafür steht das diese Unterschiedlich sind.
    Denn aktuell hab ich sie schon abgeglichen und meine Zeilenwerte sind gleich trotzdem bekomme ich in Spalte P bei jeder Zeile eine 1
    Dann lass Dir doch einfach mal ganz konkret die Werte der beiden Zellen anzeigen. Und poste sie mal, vielleicht erkennen wir einen Unterschied. Und BitBrösels Syntaxfrage ist noch offen.
    Und bitte: Entweder korrekt Kommas setzen oder kurze Sätze schreiben. Deine Posts sind inhaltlich ziemlich unklar.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wenn das in Excel klappt …
    Aber Du scheinst ein UserForm zu haben. Dann kannst Du doch ne ListBox draufhauen und immer wenn es Unterschiede gibt, dann mit AddItem die Werte der beiden Zellen hinzufügen. Und wenn Du zwei scheinbar gleiche Sheets hast, kannst Du dann eben schnell(er) erkennen, wo die Unterschiede sind.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Vielen Dank.
    Durch den Tipp habe ich mich etwas mit dem Debug.Print beschäftigt und alle Werte ausgegeben.

    Dabei ist mir ein Fehler im Code aufgefallen. Es funktioniert nun wie es soll.

    Anbei die Lösung:
    Spoiler anzeigen

    Visual Basic-Quellcode

    1. 'Option Explicit
    2. Const MZ1 = 11 '1.Zeile in Maschinenliste wahlweise 19 oder 22
    3. Const MLZ1 = 2 '1.Zeile in MASTER Liste wahlweise 19 oder 22
    4. Private Sub CommandButton1_Click()
    5. MitKommentar
    6. End Sub
    7. Private Sub MitKommentar()
    8. 'Als erste deklarieren wir unsere Variablen
    9. 'Den Zähler i für die aktuelle Zeile
    10. 'Dim i As Long
    11. 'Die letzte Zeile
    12. 'Dim lzML As Long
    13. 'Variablen um die prozentualen Anteil zu ermitteln
    14. Dim Prozent As Double
    15. Dim ProzentAktuell As Double
    16. Dim ProzentLänge As Double
    17. 'Berechnung Dauer des Vorgangs
    18. Dim DaZeit As Date
    19. DaZeit = Time
    20. 'Die Berechnung
    21. Dim i As Integer, j As Integer
    22. Dim lrOV As Long, lrML As Long
    23. On Error GoTo Fehler
    24. 'Fehlermeldungssetzung
    25. AbgDatei = ThisWorkbook.Sheets("Maschinenliste").Range("G8").Value
    26. Deliver1 = ThisWorkbook.Sheets("Maschinenliste").Range("G9").Value
    27. 'Ende
    28. 'Dim Plan As Workbook: Set Plan = Workbooks("MASTER HTIG PRODUCTION 2022.xlsx")
    29. Dim Plan As Workbook:
    30. Set Plan = Workbooks(ThisWorkbook.Sheets("Maschinenliste").Range("G8").Value)
    31. 'MsgBox Plan.Value
    32. Dim Liste As Workbook:
    33. Set Liste = Workbooks("QC Maschinenliste.xlsm")
    34. 'Dim OVSht As Worksheet: Set OVSht = Plan.Sheets("Overview Machines")
    35. On Error GoTo Fehler
    36. Dim OVSht As Worksheet
    37. Set OVSht = Plan.Worksheets(ThisWorkbook.Sheets("Maschinenliste").Range("G9").Value)
    38. 'Button deaktivieren
    39. CommandButton1.Enabled = False
    40. 'Zu Fehler springen wenn Blatt/Datei Falsch
    41. On Error GoTo Fehler
    42. 'Set Wb = Workbooks(AbgDatei)
    43. 'Set DEL = Wb.Worksheets(Deliver1)
    44. 'lzDV = DEL.Cells(Rows.Count, 1).End(xlUp).Row
    45. 'Startzeit in Label schreiben
    46. Me.Label34.Caption = Time
    47. 'Andere Label leeren
    48. Me.Label35.Caption = ""
    49. Me.Label37.Caption = ""
    50. Me.Label38.Caption = ""
    51. 'Statusbar alten Text speichern
    52. OldTxt = Application.StatusBar
    53. 'Um das ganze ein wenig zu beschleunigen schalten wir vorübergehend
    54. 'die Bildschirmaktualisierung aus
    55. Application.ScreenUpdating = False
    56. 'Als erstes setzen wir die Variable Prozent auf null
    57. Prozent = 0
    58. With Liste.Sheets("Maschinenliste")
    59. lrML = .Cells(Rows.Count, 3).End(xlUp).Row
    60. lrOV = OVSht.Cells(Rows.Count, 6).End(xlUp).Row
    61. '1.Schleife in Maschinenliste
    62. For i = MZ1 To lrML
    63. '2.Schleife in Overview Sheet
    64. For j = MLZ1 To lrOV
    65. 'in Overview nach Maschinen-Nr. suchen
    66. If Trim(.Cells(i, "B")) = Trim(OVSht.Cells(j, "D")) Then
    67. 'Daten laden wenn alle Zellen Werte haben
    68. 'If Trim(OVSht.Cells(j, "Q")) <> "" Then
    69. If Trim(OVSht.Cells(j, "Q")) = "HTIG" Then
    70. '** Kunde aus Spalte U oder W nehmen??
    71. 'Aufragsnummer vergleichen START
    72. If Trim(.Cells(i, "C")) <> Trim(OVSht.Cells(j, "T")) Then
    73. .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    74. .Cells(i, 16) = 1 'Meistertask Status
    75. 'Auftragsnummer vergleichen ENDE
    76. End If
    77. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "R")) Then
    78. .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    79. .Cells(i, 16) = 1 'Meistertask Status
    80. End If
    81. If Trim(.Cells(i, "F")) <> Trim(OVSht.Cells(j, "S")) Then
    82. .Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
    83. .Cells(i, 16) = 1 'Meistertask Status
    84. End If
    85. If Trim(.Cells(i, "G")) <> Trim(OVSht.Cells(j, "Y")) Then
    86. .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    87. .Cells(i, 16) = 1 'Meistertask Status
    88. End If
    89. If Trim(.Cells(i, "H")) <> Trim(OVSht.Cells(j, "AB")) Then
    90. .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    91. .Cells(i, 16) = 1 'Meistertask Status
    92. End If
    93. '.Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    94. '.Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    95. '.Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
    96. '.Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    97. '.Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    98. ElseIf Trim(OVSht.Cells(j, "Q")) = "HMMI" Then
    99. If Trim(.Cells(i, "C")) <> Trim(OVSht.Cells(j, "T")) Then
    100. .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    101. .Cells(i, 16) = 1 'Meistertask Status
    102. 'Auftragsnummer vergleichen ENDE
    103. End If
    104. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "R")) Then
    105. .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    106. .Cells(i, 16) = 1 'Meistertask Status
    107. End If
    108. If Trim(.Cells(i, "F")) <> Trim(OVSht.Cells(j, "S")) Then
    109. .Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
    110. .Cells(i, 16) = 1 'Meistertask Status
    111. End If
    112. If Trim(.Cells(i, "G")) <> Trim(OVSht.Cells(j, "Y")) Then
    113. .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    114. .Cells(i, 16) = 1 'Meistertask Status
    115. End If
    116. If Trim(.Cells(i, "H")) <> Trim(OVSht.Cells(j, "AB")) Then
    117. .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    118. .Cells(i, 16) = 1 'Meistertask Status
    119. End If
    120. '** Kunde aus Spalte U oder W nehmen??
    121. ' .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    122. ' .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    123. ' .Cells(i, 6) = OVSht.Cells(j, "S") 'Kunden Name
    124. ' .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    125. ' .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    126. Else
    127. If Trim(.Cells(i, "C")) <> Trim(OVSht.Cells(j, "T")) Then
    128. .Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    129. .Cells(i, 16) = 1 'Meistertask Status
    130. 'Auftragsnummer vergleichen ENDE
    131. End If
    132. If Trim(.Cells(i, "D")) <> Trim(OVSht.Cells(j, "R")) Then
    133. .Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    134. .Cells(i, 16) = 1 'Meistertask Status
    135. End If
    136. If Trim(.Cells(i, "F")) <> Trim(OVSht.Cells(j, "Q")) Then
    137. .Cells(i, 6) = OVSht.Cells(j, "Q") 'Kunden Name
    138. .Cells(i, 16) = 1 'Meistertask Status
    139. End If
    140. If Trim(.Cells(i, "G")) <> Trim(OVSht.Cells(j, "Y")) Then
    141. .Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    142. .Cells(i, 16) = 1 'Meistertask Status
    143. End If
    144. If Trim(.Cells(i, "H")) <> Trim(OVSht.Cells(j, "AB")) Then
    145. .Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    146. .Cells(i, 16) = 1 'Meistertask Status
    147. End If
    148. '.Cells(i, 3) = OVSht.Cells(j, "T") 'Auftragsnr.
    149. '.Cells(i, 4) = OVSht.Cells(j, "R") 'Land
    150. '.Cells(i, 6) = OVSht.Cells(j, "Q") 'Kunden Name
    151. '.Cells(i, 7) = OVSht.Cells(j, "Y") 'Fertigstellung
    152. '.Cells(i, 8) = OVSht.Cells(j, "AB") 'Abholung
    153. End If
    154. End If
    155. 'Da wir die Exceltabelle und die Userform gleichzeitig bearbeitet werden
    156. ' müssen wir einen eine Aufgabe in den Arbeitsspeicher auslagern.
    157. 'Ansonsten sehen wir zur Laufzeit keine Veränderungen an der Progressbar.
    158. 'Um dies zu realisieren übergeben wir die Ermittlung der Wochentage mit
    159. '"Do Events" an den Arbeitspeicher.
    160. DoEvents
    161. 'Um den aktuellen Fortschritt anzeigen zu können ermitteln wir
    162. 'als nächstes anhand unseres Zählers und der letzten Zeile den
    163. 'prozentualen Wert. -1 da wir in der 2. Zeile beginnen.
    164. ProzentAktuell = (i - MZ1) / (lrML - MZ1) * 100
    165. 'Unser Prozentlabel hat eine Länge (width) von 500. Wir teilen
    166. 'diese durch 100 und multiplizieren das Ergebnis mit den zuvor
    167. 'ermittelten Fortschritt. Anschließend können wir unsere Elemente
    168. 'mit diesem Ergebnis exakt positionieren.
    169. ProzentLänge = 500 / 100 * ProzentAktuell
    170. 'Nun zeigen wir unserem User den aktuellen Fortschritt
    171. Prozentanzeige.Caption = Format(ProzentAktuell, "##0") & " %"
    172. 'Außerdem interessiert dem User die aktuelle Position unserer Tabelle
    173. Zeile.Caption = "Zeile " & i & " von " & lrML & " Zeilen bearbeitet "
    174. 'Die Breite unseres Fortschrittbalkens wird um die Prozentlänge erhöht.
    175. Fortschritt.Width = ProzentLänge
    176. 'Hier zeigen wir das aktuelle Datum sowie den ermittelten Tag
    177. aktuellesDatum.Caption = .Cells(i, 1) & "/" & .Cells(i, 2) & " - " & .Cells(i, 3)
    178. 'Die linke Position unserer Prozentanzeige, die "Mitfährt", wird durch die
    179. 'steigende Breite des Fortschrittbalkens nach links verschoben.
    180. '-47 da dies die Breite des Labels ist.
    181. Prozentanzeige.Left = Fortschritt.Width - 47
    182. 'Abhängig vom prozentualen Fortschritt manipulieren wir nun die Farbe unseres
    183. 'Fortschrittslabels und ändern die Caption unserer Userform entsprechend.
    184. Select Case ProzentAktuell
    185. Case Is > 85
    186. 'Me.Caption = "Ich bin gleich fertig"
    187. Fortschritt.BackColor = vbGreen
    188. Case Is < 50
    189. 'Me.Caption = "Es dauert noch eine Weile"
    190. Fortschritt.BackColor = vbRed
    191. Case Is > 49
    192. Fortschritt.BackColor = vbYellow
    193. 'Me.Caption = "Mehr als die Hälfte ist geschafft"
    194. End Select
    195. Next j
    196. Next i
    197. End With
    198. 'Um unser Ergebnis anzuzeigen schalten wir zuletzt die Bildschirmaktualisierung wieder
    199. 'ein
    200. Application.ScreenUpdating = True
    201. 'MsgBox n & " Maschinen aus der Liste sind in den Produktionshallen."
    202. 'Endzeit in Label schreiben
    203. Set Plan = Nothing
    204. Set Liste = Nothing
    205. Me.Label39.Caption = CDate(Time - DaZeit)
    206. Me.Label35.Caption = Time
    207. Application.StatusBar = OldTxt
    208. 'Ergebnis in Labels schreiben
    209. Me.Label37.Caption = " Maschinen wurden abgeglichen"
    210. Me.Label38.Caption = "Viel Spaß beim arbeiten :)"
    211. 'Button deaktivieren
    212. CommandButton1.Enabled = True
    213. Exit Sub
    214. FehlerVerarbeitung:
    215. 'Was tun, wenn ein Laufzeitfehler auftritt?
    216. MsgBox "Fehler aufgetreten, Programm beenden"
    217. 'Fehler: MsgBox "Unerwarteter Fehler - Richtige Datei mit richtigem Blatt geöffnet ??"
    218. Fehler: MsgBox " Datei: " & AbgDatei & " - Blatt: " & Deliver1 & Chr(10) & "Datei geöffnet? und/oder Name richtig geschrieben??" & Chr(10), vbOKOnly, " Fehler bitte prüfen " '& Error()
    219. CommandButton1.Enabled = True
    220. End Sub
    221. 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)
    222. End Sub
    223. Private Sub Label37_Click()
    224. End Sub
    225. Private Sub Label38_Click()
    226. End Sub
    227. 'Zentrieren auf beiden Bildschirmen des Fenstern
    228. Private Sub UserForm_Initialize()
    229. Dim sngTop As Single, sngLeft As Single
    230. Me.StartUpPosition = 0
    231. sngLeft = Application.Left + Application.Width / 2 - Me.Width / 2
    232. sngTop = Application.Top + Application.Height / 2 - Me.Height / 2
    233. Me.Left = sngLeft
    234. Me.Top = sngTop
    235. Label13 = Date
    236. Label28 = Time
    237. End Sub