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

VBA Makro Dummy Daten - Fehler im Code

VBA Makro Dummy Daten - Fehler im Code
31.05.2022 13:10:35
Stefanie
Hallo liebes Forum,
ich habe einen VBA Code, der automatische Beispieldaten für einen Prozess zur Erfassung von Arbeitsunfällen erstellen soll. Eigentlich klappt alles gut, nur ein Problem habe ich dabei. In der ersten Zeile sollen bestimmte Informationen zu dem Unfall erfasst sein, die dann in den letzten beiden Prozessschritten an Bedingungen geknüpft sind. Einmal soll eine Benachrichtigung an die Berufsgenossenschaft geschickt werden, wenn die Fehltage größer 3 sind und wenn es sich um einen "Severe" Accident handelt, eine entsprechende Maßnahme eingeleitet werden. Den letzten Schritt macht das Makro nicht und es werden Fehltage in Zeilen eingefügt, die da nicht auftauchen sollten (diese sollen nur im Schritt "Documentation Consequences of the Accident" in der 12. Spalte einmal auftauchen. Könnte mir bitte jemand helfen, ich wäre sehr dankbar, da ich wenig Kenntnisse habe und die Daten für meine Masterarbeit brauche. Ich danke schonmal ganz herzlich, hier der Code:
'Daten Generierung Work-Related Accidents - Ideal Process

Sub F_en()
Dim Datum1 As Date
Range("A2:K1500").Clear
Datum1 = CDate("1.1.2020")
For i = 2 To 100 Step 7
Cells(i, 1).Resize(7) = "03_" & CStr(70000 + Int(i / 3))
Cells(i, 2) = Datum1 + Int(Rnd() * 365)
Cells(i, 3) = "Notification: Work-Related Accident"
Cells(i, 4) = "03_" & CStr(70000 + Int(i / 3))
Cells(i, 6) = Int(Cells(i, 2))
Cells(i, 7) = Choose(Int(Rnd() * 7) + 1, "Produktion 1", "Produktion 2", "Laboratory", "Warehouse", "Office 1", "Homeoffice", "Canteen")
Cells(i, 8) = Choose(Int(Rnd() * 8) + 1, "Fall", "Cut", "Crushing", "Stumble", "Crash", "Accident with Liquids", "Fall from several meters", "Swooned")
Cells(i, 9) = Choose(Int(Rnd() * 5) + 1, "Open wound", "Fraction", "Concussion", "Shock", "Nausea")
Cells(i, 10) = "05_" & CStr(70000 + Int(i / 3))
Cells(i, 11) = Choose(Int(Rnd() * 3) + 1, "Minor", "Moderate", "Severe")
Cells(i + 1, 2) = Int(Cells(i, 2) + Int(Rnd() * 1 - 30)) 'Dauer zwischen "begonnen" und "fertig"
Cells(i + 1, 3) = "Investigation of the Accident by responsible from work safety"
Cells(i + 1, 4) = "07_" & CStr(70000 + Int(i / 3))
Cells(i + 2, 2) = Int(Cells(i + 1, 2) + Rnd * 10 - 45) 'Dauer zwischen "fertig" und "signiert"
Cells(i + 2, 3) = "Digital Signature Employee with Accident"
Cells(i + 2, 4) = (Cells(i, 4))
Cells(i + 3, 2) = Int(Cells(i + 2, 2) + Rnd * 1 - 20) 'Dauer zwischen "fertig" und "signiert"
Cells(i + 3, 3) = "Digital Signature Manager"
Cells(i + 3, 4) = "09_" & CStr(70000 + Int(i / 3))
Cells(i + 4, 2) = Int(Cells(i + 3, 2) + Rnd * 45) 'Dauer zwischen "fertig" und "signiert"
Cells(i + 4, 3) = "Investigation by Safety Management"
Cells(i + 5, 2) = Int(Cells(i + 4, 2) + Rnd * 45) 'Dauer zwischen "fertig" und "signiert"
Cells(i + 5, 3) = "Notification to Accident Insurance"
Cells(i + 6, 2) = Int(Cells(i + 5, 2) + Rnd * 45) 'Dauer zwischen "fertig" und "signiert"
Cells(i + 6, 3) = "Documentation Consequences of the Accident"
Cells(i + 6, 12) = Int(0 + Rnd * (100 - 0 + 1))
If Cells(i + 6, 12).Value > 3 Then
Cells(i + 7, 1) = Cells(i, 1)
Cells(i + 7, 2) = Int(Cells(i + 6, 2) + Rnd * 10)
Cells(i + 7, 3) = "Notification to Industrial injury mutual insurance association"
i = i + 1
End If
If Cells(i, 11).Value = "Severe" Then
Cells(i + 8, 1) = Cells(i, 1)
Cells(i + 8, 2) = Int(Cells(i + 7, 2) + Rnd * 10)
Cells(i + 8, 3) = "New Measurement for Work-Safety"
i = i + 1
End If
'Cells(i, 3) = Choose(Int(Rnd() * 3) + 1, "begonnen", "fertiggestellt", "digital signiert")
Next i
End Sub

Sub Arbeitsunfall()
End Sub

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Makro Dummy Daten - Fehler im Code
31.05.2022 15:30:42
Yal
Hallo Stefanie,
ein guter Entwurf, wenn man bedenkt, dass Du keine Vorkenntnisse hast.
Folgender Code ist nichtss anderes als dein Code. Nur ein bischen gestützt, wobei Du auf Genauigkeit prüfen müsste. Ich denke nur, dass das Aufräumen die Lesbarkeit helfen wird und so Dir entweder auf die Lösung bringen wird, oder auf eine genauere Frage, die ich dann vertehen werde.
Tipps:
Ein Random "Rnd()" muss immer zuerst mit Randomize initialisiert werden, sonst bekommst Du immer dieselbe Werte (genauer: immer dieselbe Random-Reihenfolge).
Die Lauf-Variable einer For-Schleife (in dem Fall i) wird in der Schleife nie extern beeinflusst. Also keine "i = i + 1" irgendwo dazwischen.
Variable einsetzen, um unlesbare Wiederholung zu vermeiden.
Functionen einsetzen, um unlesbare Wiederholung zu vermeiden.

Sub MitDummyDaten_befüllen()
Dim RefDatum As Date
Dim Fall As String
Dim i, j
Range("A2:K1500").Clear
Randomize
For i = 2 To 100 Step 7
RefDatum = DateSerial(2020, 1, 1 + RandomZwischen(0, 365))
Fall = CStr(70000 + Int(i / 3))
Cells(i, 1).Resize(7) = "03_" & Fall
Cells(i, 2) = RefDatum
Cells(i, 3) = "Notification: Work-Related Accident"
Cells(i, 4) = "03_" & Fall
Cells(i, 6) = RandomZwischen(1, RefDatum) '? 1.1.2020 = 43831. Wahrscheinlich RefDatum - 30 anstatt 1.
Cells(i, 7) = RandomIn("Produktion 1", "Produktion 2", "Laboratory", "Warehouse", "Office 1", "Homeoffice", "Canteen")
Cells(i, 8) = RandomIn("Fall", "Cut", "Crushing", "Stumble", "Crash", "Accident with Liquids", "Fall from several meters", "Swooned")
Cells(i, 9) = RandomIn("Open wound", "Fraction", "Concussion", "Shock", "Nausea")
Cells(i, 10) = "05_" & Fall
Cells(i, 11) = RandomIn("Minor", "Moderate", "Severe")
j = i + 1
Cells(j, 2) = RandomZwischen(RefDatum - 29, RefDatum) 'Dauer zwischen "begonnen" und "fertig"
Cells(j, 3) = "Investigation of the Accident by responsible from work safety"
Cells(j, 4) = "07_" & Fall
j = i + 2
Cells(j, 2) = RandomZwischen(RefDatum - 44, RefDatum) 'Dauer zwischen "fertig" und "signiert"
Cells(j, 3) = "Digital Signature Employee with Accident"
Cells(j, 4) = "03_" & Fall
j = i + 3
Cells(j, 2) = RandomZwischen(RefDatum - 20, RefDatum) 'Dauer zwischen "fertig" und "signiert"
Cells(j, 3) = "Digital Signature Manager"
Cells(j, 4) = "09_" & Fall
j = i + 4
Cells(j, 2) = RandomZwischen(RefDatum, RefDatum + 44) 'Dauer zwischen "fertig" und "signiert"
Cells(j, 3) = "Investigation by Safety Management"
j = i + 5
Cells(j, 2) = RandomZwischen(RefDatum, RefDatum + 44) 'Dauer zwischen "fertig" und "signiert"
Cells(j, 3) = "Notification to Accident Insurance"
j = i + 6
Cells(j, 2) = RandomZwischen(RefDatum, RefDatum + 44) 'Dauer zwischen "fertig" und "signiert"
Cells(j, 3) = "Documentation Consequences of the Accident"
Cells(j, 12) = RandomZwischen(0, 101)
j = i + 7
If Cells(j - 1, 12).Value > 3 Then
Cells(j, 1) = "03_" & Fall
Cells(j, 2) = RandomZwischen(Cells(j - 1, 2), Cells(j - 1, 2) + 10)
Cells(j, 3) = "Notification to Industrial injury mutual insurance association"
j = j + 1 'Increment
End If
'j bereits in i + 7 incrementiert, oder eben nicht
If Cells(i, 11).Value = "Severe" Then
Cells(j, 1) = "03_" & Fall
Cells(j, 2) = RandomZwischen(Cells(j - 1, 2), Cells(j - 1, 2) + 10)
Cells(j, 3) = "New Measurement for Work-Safety"
End If
'Cells(i, 3) = RandomIn("begonnen", "fertiggestellt", "digital signiert")
Next i
End Sub
Private Function RandomIn(ParamArray Liste())
RandomIn = Liste(RandomBetween(LBound(Liste), UBound(Liste)))
End Function
Private Function RandomZwischen(ByVal Lower As Long, ByVal Upper As Long) As Long
Dim temp As Long
If Lower > Upper Then
temp = Lower
Lower = Upper
Upper = temp
End If
RandomZwischen = Lower + Int(Rnd() * (Upper - Lower + 1))
End Function
VG
Yal
Anzeige

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige