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

Problem mit Do Schleife

Problem mit Do Schleife
15.09.2023 23:25:50
Florianexcelnewby
Guten Tag miteinander,
Ich heiße Flo und bin neu hier im Forum. Seit ein paar Tagen hänge ich nun an meinem Makro und komme nicht weiter. Bin kompletter Neuling was Vba angeht....
Die Anwendung soll eine bestimmte häufig vorkommende Rechnungseingabe deutlich vereinfachen.
(Case 3 und 4 muss ich noch erstellen, das kann igoniert werden)
An sich funktioniert alles wie es soll, aber die Dateneingabe funktioniert leider nur in der ersten Iteration der Cases.
Normal sollte danach die nächste Position der Rechnung eingegeben werden können, wobei Rechnungsnummer und Rechnungsdatum gleich bleiben und nicht erneut eingegeben werden müssen.
Beim ersten Durchlauf werden die Werte wie gewünscht in die Tabelle übertragen, aber bei jedem folgenden passiert nichts. Alles läuft weiter durch und die Daten werden abgefragt über die Input Boxes aber in der Tabelle landet nichts.
Meine Vermutung ist, dass da Variablen zurückgesetzt werden müssten, aber ich weiß nicht welche und wo.
Über Hilfe wäre ich sehr dankbar.
Ich wünsche euch ein schönes Wochenende!
Sub DatumUndOptionen()

Dim Rechnungsdatum As Date
Dim Rechnungsnummer As Variant
Dim Optionen As String
Dim isValidOption As Boolean
Dim Fahrzeugnummer As Variant

Rechnungsdatum = InputBox("Geben Sie das Rechnungsdatum ein (TT.MM.JJJJ):", "Datum eingeben")
If Rechnungsdatum = 0 Then
Exit Sub
End If

Rechnungsnummer = InputBox("Geben Sie die Rechnungsnummer ein:", "Nummer bestätigen")
If Rechnungsnummer = 0 Then
Exit Sub
End If

MsgBox "Überprüfen Sie Ihre Eingabe:" & vbCrLf & "Rechnungsdatum: " & Rechnungsdatum & vbCrLf & "Rechnungsnummer: " & Rechnungsnummer

Do
Do
Dim Einsatzdatum As Date
I = "1"
Einsatzdatum = InputBox("Geben Sie das Einsatzdatum ein (TT.MM.JJJJ):", "Datum eingeben")
Fahrzeugnummer = InputBox("Geben Sie die Fahrzeugnummer ein:", "Fahrzeugnummer bestätigen")

Optionen = InputBox("Zeitraum auswählen:" & vbCrLf & _
"1 - 05:00Uhr - 23:00Uhr" & vbCrLf & _
"2 - 05:00Uhr - 14:00Uhr" & vbCrLf & _
"3 - 14:00Uhr - 23:00Uhr" & vbCrLf & _
"4 - 23:00Uhr - 09:00Uhr" & vbCrLf & _
"0 - Eingabe beenden", "Optionen auswählen")

Select Case Optionen
Case "0", "1", "2", "3", "4"
isValidOption = True
Case Else
MsgBox "Ungültige Option ausgewählt. Bitte wählen Sie 1, 2, 3, 4 oder 0."
isValidOption = False
End Select
Loop While Not isValidOption

Dim lastRow As Long
Dim ws As Worksheet
Dim foundRow As Long
Set ws = ActiveSheet

Select Case Optionen
Case "0"
Exit Sub

Case "1"
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
foundRow = 0
Dim dateFound As Boolean

For i = 1 To lastRow
If ws.Cells(i, 1).Value = Einsatzdatum Then
If IsEmpty(ws.Cells(i, 3).Value) Then
If Format(ws.Cells(i, 4).Value, "hh:mm") = "05:00" And Format(ws.Cells(i, 5).Value, "hh:mm") = "23:00" Then
ws.Cells(i, 3).Value = Fahrzeugnummer
ws.Cells(i, 12).Value = Rechnungsnummer
ws.Cells(i, 13).Value = Rechnungsdatum
dateFound = True
Exit For
End If
End If
End If
Next i

If Not dateFound Then
MsgBox "Zeitfenster nicht verfügbar"
Else
MsgBox "case1 Rechnungsdatum: " & Rechnungsdatum & vbCrLf & "Rechnungsnummer: " & Rechnungsnummer & vbCrLf & "Zeitraum: 05:00Uhr - 23:00Uhr"
End If

Case "2"
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
foundRow = 0

For i = 1 To lastRow
If ws.Cells(i, 1).Value = Einsatzdatum Then
If IsEmpty(ws.Cells(i, 3).Value) Then
If Format(ws.Cells(i, 4).Value, "hh:mm") = "05:00" And Format(ws.Cells(i, 5).Value, "hh:mm") = "14:00" Then
ws.Cells(i, 3).Value = Fahrzeugnummer
ws.Cells(i, 12).Value = Rechnungsnummer
ws.Cells(i, 13).Value = Rechnungsdatum
dateFound = True
Exit For
End If
End If
End If
Next i

If Not dateFound Then
For i = 1 To lastRow
If ws.Cells(i, 1).Value = Einsatzdatum Then
If IsEmpty(ws.Cells(i, 3).Value) Then
If Format(ws.Cells(i, 4).Value, "hh:mm") = "05:00" And Format(ws.Cells(i, 5).Value, "hh:mm") = "23:00" Then
ws.Cells(i, 1).EntireRow.Copy
ws.Cells(i + 1, 1).EntireRow.Insert Shift:=xlDown
ws.Cells(i, 3).Value = Fahrzeugnummer
ws.Cells(i, 12).Value = Rechnungsnummer
ws.Cells(i, 13).Value = Rechnungsdatum
ws.Cells(i, 5).Value = "14:00"
ws.Cells(i + 1, 4).Value = "14:00"
dateFound = True
Exit For
End If
End If
End If
Next i
End If

Case "3"
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
foundRow = 0

For i = 1 To lastRow
If ws.Cells(i, 1).Value = Einsatzdatum Then
If IsEmpty(ws.Cells(i, 3).Value) Then
ws.Cells(i, 1).EntireRow.Copy
ws.Cells(i + 1, 1).EntireRow.Insert Shift:=xlDown
ws.Cells(i, 3).Value = Fahrzeugnummer
ws.Cells(i, 12).Value = Rechnungsnummer
ws.Cells(i, 13).Value = Rechnungsdatum
ws.Cells(i, 5).Value = "14:00"
ws.Cells(i + 1, 4).Value = "14:00"
Exit For
End If
End If
Next i
MsgBox "Rechnungsdatum: " & Rechnungsdatum & vbCrLf & "Rechnungsnummer: " & Rechnungsnummer & vbCrLf & "Zeitraum: 14:00Uhr - 23:00Uhr"

Case "4"
MsgBox "Rechnungsdatum: " & Rechnungsdatum & vbCrLf & "Rechnungsnummer: " & Rechnungsnummer & vbCrLf & "Zeitraum: 23:00Uhr - 09:00Uhr"
End Select

isValidOption = False
Loop

Rechnungsdatum = 0
Rechnungsnummer = 0
Optionen = ""
Fahrzeugnummer = 0
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit Do Schleife
16.09.2023 04:45:46
Oberschlumpf
Moin,

zeig bitte mal per Upload eine Bsp-Datei mit Bsp-Daten und dem Code.

Ciao
Thorsten
AW: Problem mit Do Schleife
16.09.2023 09:26:20
Alwin Weisangler
Hallo,

warum machst du es so umständlich. So wie es jetzt ist, hat man es schneller in die Zellen händisch eingetragen.
Baue ein Userform lade variable (auswählbare Einträge) in eine Combobox und stelle diese auf DropDown Modus. Was stets manuell eingegeben werden muss erledigen Textboxen und deren Formatierungsmöglichkeiten.
Und zu guter Letzt: Wenn Füllvorlagen (um Zeit zu sparen) sinnvoll wären, lade diese zwecks Auswahl in eine Listbox. Mit Klick in eine Vorlage können dann die Boxen gefüllt und Änderungen getätigt werden.
Wenn du damit nicht zurechtkommst, lade einfach eine Beispieldatei mit allen relevanten Varianten anonymisiert hoch.

Gruß Uwe


Anzeige
AW: Problem mit Do Schleife
16.09.2023 09:52:01
Florianexcelnewby
Moin und erstmal danke für die schnellen Antworten!
Beispieldatei hab ich leider im Moment nicht zur Hand, könnte ich aber am Montag hochladen.
Was Userform angeht hab ich das auch in Betracht gezogen, aber habe hier gar keine Kenntnisse. Außerdem weiß ich nicht ob das umsetzbar wäre da die Tabelle (aktuell in Case 2, case 3 wird analog dazu) verändert werden soll indem eine Zeile eingefügt wird und die Zeiten gesplittet werden von 5-23Uhr auf 5-14Uhr und 14-23Uhr.

Ich habe schon vermutet dass ich das sehr umständlich gemacht habe, das liegt aber an meinen geringen Kenntnissen und ich wusste mir nicht anders zu helfen.
Im Prinzip funktioniert ja alles und die Eingabe geht damit auch sehr schnell nur habe ich das Problem, dass nach der ersten Iteration der Cases das ganze zwar weiter läuft aber keine Daten mehr in der Tabelle landen für weitere Cases (in dem Fall Positionen auf der Rechnung).
Den restlichen Code kann ich wenn das läuft sehr schnell erstellen da der Rest analog zum bisherigen Code geschrieben wird.
Viele Grüße,
Florian
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige