Hallo boys und girls,
ich bin mit meinem Excel-Projekt fast fertig, habe nur noch einen Fehler bei einer If-Abfrage, der mich meine gesamte Kraft kostet. Es will einfach nicht funktionieren.
Also ich habe eine .bld Datei in der ein Wert für 'Personalnummer' und 'Kalenderwoche' steht. Beides sind Zahlen!
Nun habe ich ein Excelsheet, in dem ich einen Wert für Personalnummer eintragen muss und ein Datum. Die Kalenderwoche des Datums wird ermittelt und in ein ausgeblendetes Sheet in eine Zelle geschrieben.
Das Programm müsste jetzt Folgendes machen:
Wenn ich eine Personalnummer und ein Datum eingebe, und die Personalnummer mit der in der .bld Datei übereinstimmt und die Kalenderwoche des eingegebenen Datums mit der Kalenderwoche in der .bld Datei, dann soll er die Zeile aus der .bld Datei auslesen und in eine Tabelle eintragen.
Es funktioniert wunderbar, wenn ich eine If-Abfrage mache, um NUR die Personalnummer abzufragen, dann schreibt er mir auch alles ordentlich hin.
Wenn ich in die If-Abfrage noch eingebe, dass er die KW abfragen soll, dann schreibt er gar nichts mehr. Der Code des FUNKTIONIERENDEN Subs sieht so aus:
Nun das gleiche Sub noch einmal aber mit der erweiterten IF-Abfrage, die NICHT funktioniert:
Bitte bitte helft mir das Projekt fertigzustellen, habe nur noch bis Freitag Zeit
Gruß
ich bin mit meinem Excel-Projekt fast fertig, habe nur noch einen Fehler bei einer If-Abfrage, der mich meine gesamte Kraft kostet. Es will einfach nicht funktionieren.
Also ich habe eine .bld Datei in der ein Wert für 'Personalnummer' und 'Kalenderwoche' steht. Beides sind Zahlen!
Nun habe ich ein Excelsheet, in dem ich einen Wert für Personalnummer eintragen muss und ein Datum. Die Kalenderwoche des Datums wird ermittelt und in ein ausgeblendetes Sheet in eine Zelle geschrieben.
Das Programm müsste jetzt Folgendes machen:
Wenn ich eine Personalnummer und ein Datum eingebe, und die Personalnummer mit der in der .bld Datei übereinstimmt und die Kalenderwoche des eingegebenen Datums mit der Kalenderwoche in der .bld Datei, dann soll er die Zeile aus der .bld Datei auslesen und in eine Tabelle eintragen.
Es funktioniert wunderbar, wenn ich eine If-Abfrage mache, um NUR die Personalnummer abzufragen, dann schreibt er mir auch alles ordentlich hin.
Wenn ich in die If-Abfrage noch eingebe, dass er die KW abfragen soll, dann schreibt er gar nichts mehr. Der Code des FUNKTIONIERENDEN Subs sieht so aus:
Visual Basic-Quellcode
- Sub Einlesen()
- Call AnwahlDaten_Leeren
- PersonalnummerDatenblatt = ThisWorkbook.Sheets("Anwahl").Cells(3, 3).Value
- If ThisWorkbook.Sheets("Anwahl").Cells(3, 1) = Leer Then
- MsgBox "Datum nicht eingegeben!"
- Exit Sub
- End If
- If ThisWorkbook.Sheets("Anwahl").Cells(3, 3) = Leer Then
- MsgBox "Personalnummer nicht eingegeben!"
- Exit Sub
- End If
- 'Datei *.bld einlesen
- Application.ScreenUpdating = False
- If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "1" Then
- Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-SL.bld"
- End If
- If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "2" Then
- Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-EL.bld"
- End If
- If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "3" Then
- Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-WZ.bld"
- End If
- Kalenderwoche_Anwahl = DINKw(ThisWorkbook.Sheets("Anwahl").Cells(3, 1))
- Sheets("DropDown").Cells(2, 5).Value = Kalenderwoche_Anwahl
- 'Stop
- EintrageZeile = 7
- Open Taetigkeitsdatei For Input As 1
- Do While Not EOF(1)
- Line Input #1, EinleseZeile
- If Trim(EinleseZeile) = Empty Then GoTo naechsteZeile
- 'Auswertung EinleseZeile
- Pos1 = InStr(1, EinleseZeile, ";")
- Laenge1 = Pos1 - 1
- Pos2 = InStr(Pos1 + 1, EinleseZeile, ";")
- Laenge2 = Pos2 - Pos1 - 1
- Pos3 = InStr(Pos2 + 1, EinleseZeile, ";")
- Laenge3 = Pos3 - Pos2 - 1
- Pos4 = InStr(Pos3 + 1, EinleseZeile, ";")
- Laenge4 = Pos4 - Pos3 - 1
- Pos5 = InStr(Pos4 + 1, EinleseZeile, ";")
- Laenge5 = Pos5 - Pos4 - 1
- Pos6 = InStr(Pos5 + 1, EinleseZeile, ";")
- Laenge6 = Pos6 - Pos5 - 1
- Pos7 = InStr(Pos6 + 1, EinleseZeile, ";")
- Laenge7 = Pos7 - Pos6 - 1
- Pos8 = InStr(Pos7 + 1, EinleseZeile, ";")
- Laenge8 = Pos8 - Pos7 - 1
- Pos9 = InStr(Pos8 + 1, EinleseZeile, ";")
- Laenge9 = Pos9 - Pos8 - 1
- Pos10 = InStr(Pos9 + 1, EinleseZeile, ";")
- Laenge10 = Pos10 - Pos9 - 1
- Pos11 = InStr(Pos10 + 1, EinleseZeile, ";")
- Laenge11 = Pos11 - Pos10 - 1
- Pos12 = InStr(Pos11 + 1, EinleseZeile, ";")
- Laenge12 = Pos12 - Pos11 - 1
- Pos13 = InStr(Pos12 + 1, EinleseZeile, ";")
- Laenge13 = Pos13 - Pos12 - 1
- Pos14 = InStr(Pos13 + 1, EinleseZeile, ";")
- Laenge14 = Pos14 - Pos32 - 1
- 'Schreibe Werte aus .bld in Variablen
- Datum = Mid(EinleseZeile, 1, Laenge1)
- Anzahl_Stunden = Mid(EinleseZeile, Pos1 + 1, Laenge2)
- Beschreibung = Mid(EinleseZeile, Pos2 + 1, Laenge3)
- Kostenstelle = Mid(EinleseZeile, Pos3 + 1, Laenge4)
- APLZNr = Mid(EinleseZeile, Pos4 + 1, Laenge5)
- InvNr = Mid(EinleseZeile, Pos5 + 1, Laenge6)
- ProjNr = Mid(EinleseZeile, Pos6 + 1, Laenge7)
- WKZNr = Mid(EinleseZeile, Pos7 + 1, Laenge8)
- Kennzahl = Mid(EinleseZeile, Pos8 + 1, Laenge9)
- Kennzahl_Beschreibung = Mid(EinleseZeile, Pos9 + 1, Laenge10)
- Ident = Mid(EinleseZeile, Pos10 + 1, Laenge11)
- Personalnummer = Mid(EinleseZeile, Pos11 + 1, Laenge12)
- kw = Mid(EinleseZeile, Pos12 + 1, Laenge13)
- 'If kw = ThisWorkbook.Sheets("DropDown").Cells(2, 5).Value Then
- 'Personalnummer mit Zelle vergleichen
- If Personalnummer = PersonalnummerDatenblatt Then
- 'kw = ThisWorkbook.Sheets("DropDown").Cells(2, 5).Value)
- 'kw = Kalenderwoche_DropDownBlatt Then
- 'Schreibe Variablen in Zellen
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 1) = Datum
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 2) = Anzahl_Stunden
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 3) = Beschreibung
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 4) = Kostenstelle
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 5) = APLZNr
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 6) = InvNr
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 7) = ProjNr
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 8) = WKZNr
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 9) = Kennzahl
- Else
- EintrageZeile = EintrageZeile - 1
- GoTo naechsteZeile
- End If
- 'Stop
- naechsteZeile:
- EintrageZeile = EintrageZeile + 1
- 'Stop
- Weiter:
- 'Stop
- EingabeZeile = EingabeZeile + 1
- Loop
- Close #1
- Application.ScreenUpdating = True
- Abbruch:
- End Sub
Nun das gleiche Sub noch einmal aber mit der erweiterten IF-Abfrage, die NICHT funktioniert:
Visual Basic-Quellcode
- Sub Einlesen()
- Call AnwahlDaten_Leeren
- PersonalnummerDatenblatt = ThisWorkbook.Sheets("Anwahl").Cells(3, 3).Value
- If ThisWorkbook.Sheets("Anwahl").Cells(3, 1) = Leer Then
- MsgBox "Datum nicht eingegeben!"
- Exit Sub
- End If
- If ThisWorkbook.Sheets("Anwahl").Cells(3, 3) = Leer Then
- MsgBox "Personalnummer nicht eingegeben!"
- Exit Sub
- End If
- 'Datei *.bld einlesen
- Application.ScreenUpdating = False
- If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "1" Then
- Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-SL.bld"
- End If
- If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "2" Then
- Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-EL.bld"
- End If
- If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "3" Then
- Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-WZ.bld"
- End If
- Kalenderwoche_Anwahl = DINKw(ThisWorkbook.Sheets("Anwahl").Cells(3, 1))
- Sheets("DropDown").Cells(2, 5).Value = Kalenderwoche_Anwahl
- 'Stop
- EintrageZeile = 7
- Open Taetigkeitsdatei For Input As 1
- Do While Not EOF(1)
- Line Input #1, EinleseZeile
- If Trim(EinleseZeile) = Empty Then GoTo naechsteZeile
- 'Auswertung EinleseZeile
- Pos1 = InStr(1, EinleseZeile, ";")
- Laenge1 = Pos1 - 1
- Pos2 = InStr(Pos1 + 1, EinleseZeile, ";")
- Laenge2 = Pos2 - Pos1 - 1
- Pos3 = InStr(Pos2 + 1, EinleseZeile, ";")
- Laenge3 = Pos3 - Pos2 - 1
- Pos4 = InStr(Pos3 + 1, EinleseZeile, ";")
- Laenge4 = Pos4 - Pos3 - 1
- Pos5 = InStr(Pos4 + 1, EinleseZeile, ";")
- Laenge5 = Pos5 - Pos4 - 1
- Pos6 = InStr(Pos5 + 1, EinleseZeile, ";")
- Laenge6 = Pos6 - Pos5 - 1
- Pos7 = InStr(Pos6 + 1, EinleseZeile, ";")
- Laenge7 = Pos7 - Pos6 - 1
- Pos8 = InStr(Pos7 + 1, EinleseZeile, ";")
- Laenge8 = Pos8 - Pos7 - 1
- Pos9 = InStr(Pos8 + 1, EinleseZeile, ";")
- Laenge9 = Pos9 - Pos8 - 1
- Pos10 = InStr(Pos9 + 1, EinleseZeile, ";")
- Laenge10 = Pos10 - Pos9 - 1
- Pos11 = InStr(Pos10 + 1, EinleseZeile, ";")
- Laenge11 = Pos11 - Pos10 - 1
- Pos12 = InStr(Pos11 + 1, EinleseZeile, ";")
- Laenge12 = Pos12 - Pos11 - 1
- Pos13 = InStr(Pos12 + 1, EinleseZeile, ";")
- Laenge13 = Pos13 - Pos12 - 1
- Pos14 = InStr(Pos13 + 1, EinleseZeile, ";")
- Laenge14 = Pos14 - Pos32 - 1
- 'Schreibe Werte aus .bld in Variablen
- Datum = Mid(EinleseZeile, 1, Laenge1)
- Anzahl_Stunden = Mid(EinleseZeile, Pos1 + 1, Laenge2)
- Beschreibung = Mid(EinleseZeile, Pos2 + 1, Laenge3)
- Kostenstelle = Mid(EinleseZeile, Pos3 + 1, Laenge4)
- APLZNr = Mid(EinleseZeile, Pos4 + 1, Laenge5)
- InvNr = Mid(EinleseZeile, Pos5 + 1, Laenge6)
- ProjNr = Mid(EinleseZeile, Pos6 + 1, Laenge7)
- WKZNr = Mid(EinleseZeile, Pos7 + 1, Laenge8)
- Kennzahl = Mid(EinleseZeile, Pos8 + 1, Laenge9)
- Kennzahl_Beschreibung = Mid(EinleseZeile, Pos9 + 1, Laenge10)
- Ident = Mid(EinleseZeile, Pos10 + 1, Laenge11)
- Personalnummer = Mid(EinleseZeile, Pos11 + 1, Laenge12)
- kw = Mid(EinleseZeile, Pos12 + 1, Laenge13)
- 'Personalnummer mit Zelle vergleichen und KW
- If Personalnummer = PersonalnummerDatenblatt And kw = ThisWorkbook.Sheets("DropDown").Cells(2, 5).Value) Then
- 'Schreibe Variablen in Zellen
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 1) = Datum
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 2) = Anzahl_Stunden
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 3) = Beschreibung
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 4) = Kostenstelle
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 5) = APLZNr
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 6) = InvNr
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 7) = ProjNr
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 8) = WKZNr
- ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 9) = Kennzahl
- Else
- EintrageZeile = EintrageZeile - 1
- GoTo naechsteZeile
- End If
- 'Stop
- naechsteZeile:
- EintrageZeile = EintrageZeile + 1
- 'Stop
- Weiter:
- 'Stop
- EingabeZeile = EingabeZeile + 1
- Loop
- Close #1
- Application.ScreenUpdating = True
- Abbruch:
- End Sub
Bitte bitte helft mir das Projekt fertigzustellen, habe nur noch bis Freitag Zeit
Gruß