Problem bei If-Abfrage 2 *reloaded*

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von chimperator.

    Problem bei If-Abfrage 2 *reloaded*

    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:

    Visual Basic-Quellcode

    1. Sub Einlesen()
    2. Call AnwahlDaten_Leeren
    3. PersonalnummerDatenblatt = ThisWorkbook.Sheets("Anwahl").Cells(3, 3).Value
    4. If ThisWorkbook.Sheets("Anwahl").Cells(3, 1) = Leer Then
    5. MsgBox "Datum nicht eingegeben!"
    6. Exit Sub
    7. End If
    8. If ThisWorkbook.Sheets("Anwahl").Cells(3, 3) = Leer Then
    9. MsgBox "Personalnummer nicht eingegeben!"
    10. Exit Sub
    11. End If
    12. 'Datei *.bld einlesen
    13. Application.ScreenUpdating = False
    14. If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "1" Then
    15. Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-SL.bld"
    16. End If
    17. If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "2" Then
    18. Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-EL.bld"
    19. End If
    20. If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "3" Then
    21. Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-WZ.bld"
    22. End If
    23. Kalenderwoche_Anwahl = DINKw(ThisWorkbook.Sheets("Anwahl").Cells(3, 1))
    24. Sheets("DropDown").Cells(2, 5).Value = Kalenderwoche_Anwahl
    25. 'Stop
    26. EintrageZeile = 7
    27. Open Taetigkeitsdatei For Input As 1
    28. Do While Not EOF(1)
    29. Line Input #1, EinleseZeile
    30. If Trim(EinleseZeile) = Empty Then GoTo naechsteZeile
    31. 'Auswertung EinleseZeile
    32. Pos1 = InStr(1, EinleseZeile, ";")
    33. Laenge1 = Pos1 - 1
    34. Pos2 = InStr(Pos1 + 1, EinleseZeile, ";")
    35. Laenge2 = Pos2 - Pos1 - 1
    36. Pos3 = InStr(Pos2 + 1, EinleseZeile, ";")
    37. Laenge3 = Pos3 - Pos2 - 1
    38. Pos4 = InStr(Pos3 + 1, EinleseZeile, ";")
    39. Laenge4 = Pos4 - Pos3 - 1
    40. Pos5 = InStr(Pos4 + 1, EinleseZeile, ";")
    41. Laenge5 = Pos5 - Pos4 - 1
    42. Pos6 = InStr(Pos5 + 1, EinleseZeile, ";")
    43. Laenge6 = Pos6 - Pos5 - 1
    44. Pos7 = InStr(Pos6 + 1, EinleseZeile, ";")
    45. Laenge7 = Pos7 - Pos6 - 1
    46. Pos8 = InStr(Pos7 + 1, EinleseZeile, ";")
    47. Laenge8 = Pos8 - Pos7 - 1
    48. Pos9 = InStr(Pos8 + 1, EinleseZeile, ";")
    49. Laenge9 = Pos9 - Pos8 - 1
    50. Pos10 = InStr(Pos9 + 1, EinleseZeile, ";")
    51. Laenge10 = Pos10 - Pos9 - 1
    52. Pos11 = InStr(Pos10 + 1, EinleseZeile, ";")
    53. Laenge11 = Pos11 - Pos10 - 1
    54. Pos12 = InStr(Pos11 + 1, EinleseZeile, ";")
    55. Laenge12 = Pos12 - Pos11 - 1
    56. Pos13 = InStr(Pos12 + 1, EinleseZeile, ";")
    57. Laenge13 = Pos13 - Pos12 - 1
    58. Pos14 = InStr(Pos13 + 1, EinleseZeile, ";")
    59. Laenge14 = Pos14 - Pos32 - 1
    60. 'Schreibe Werte aus .bld in Variablen
    61. Datum = Mid(EinleseZeile, 1, Laenge1)
    62. Anzahl_Stunden = Mid(EinleseZeile, Pos1 + 1, Laenge2)
    63. Beschreibung = Mid(EinleseZeile, Pos2 + 1, Laenge3)
    64. Kostenstelle = Mid(EinleseZeile, Pos3 + 1, Laenge4)
    65. APLZNr = Mid(EinleseZeile, Pos4 + 1, Laenge5)
    66. InvNr = Mid(EinleseZeile, Pos5 + 1, Laenge6)
    67. ProjNr = Mid(EinleseZeile, Pos6 + 1, Laenge7)
    68. WKZNr = Mid(EinleseZeile, Pos7 + 1, Laenge8)
    69. Kennzahl = Mid(EinleseZeile, Pos8 + 1, Laenge9)
    70. Kennzahl_Beschreibung = Mid(EinleseZeile, Pos9 + 1, Laenge10)
    71. Ident = Mid(EinleseZeile, Pos10 + 1, Laenge11)
    72. Personalnummer = Mid(EinleseZeile, Pos11 + 1, Laenge12)
    73. kw = Mid(EinleseZeile, Pos12 + 1, Laenge13)
    74. 'If kw = ThisWorkbook.Sheets("DropDown").Cells(2, 5).Value Then
    75. 'Personalnummer mit Zelle vergleichen
    76. If Personalnummer = PersonalnummerDatenblatt Then
    77. 'kw = ThisWorkbook.Sheets("DropDown").Cells(2, 5).Value)
    78. 'kw = Kalenderwoche_DropDownBlatt Then
    79. 'Schreibe Variablen in Zellen
    80. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 1) = Datum
    81. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 2) = Anzahl_Stunden
    82. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 3) = Beschreibung
    83. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 4) = Kostenstelle
    84. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 5) = APLZNr
    85. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 6) = InvNr
    86. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 7) = ProjNr
    87. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 8) = WKZNr
    88. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 9) = Kennzahl
    89. Else
    90. EintrageZeile = EintrageZeile - 1
    91. GoTo naechsteZeile
    92. End If
    93. 'Stop
    94. naechsteZeile:
    95. EintrageZeile = EintrageZeile + 1
    96. 'Stop
    97. Weiter:
    98. 'Stop
    99. EingabeZeile = EingabeZeile + 1
    100. Loop
    101. Close #1
    102. Application.ScreenUpdating = True
    103. Abbruch:
    104. End Sub


    Nun das gleiche Sub noch einmal aber mit der erweiterten IF-Abfrage, die NICHT funktioniert:


    Visual Basic-Quellcode

    1. Sub Einlesen()
    2. Call AnwahlDaten_Leeren
    3. PersonalnummerDatenblatt = ThisWorkbook.Sheets("Anwahl").Cells(3, 3).Value
    4. If ThisWorkbook.Sheets("Anwahl").Cells(3, 1) = Leer Then
    5. MsgBox "Datum nicht eingegeben!"
    6. Exit Sub
    7. End If
    8. If ThisWorkbook.Sheets("Anwahl").Cells(3, 3) = Leer Then
    9. MsgBox "Personalnummer nicht eingegeben!"
    10. Exit Sub
    11. End If
    12. 'Datei *.bld einlesen
    13. Application.ScreenUpdating = False
    14. If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "1" Then
    15. Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-SL.bld"
    16. End If
    17. If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "2" Then
    18. Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-EL.bld"
    19. End If
    20. If ThisWorkbook.Sheets("DropDown").Cells(10, 1).Value = "3" Then
    21. Taetigkeitsdatei = "C:\Dokumente und Einstellungen\xxx\Desktop\Taetigkeitsbericht-WZ.bld"
    22. End If
    23. Kalenderwoche_Anwahl = DINKw(ThisWorkbook.Sheets("Anwahl").Cells(3, 1))
    24. Sheets("DropDown").Cells(2, 5).Value = Kalenderwoche_Anwahl
    25. 'Stop
    26. EintrageZeile = 7
    27. Open Taetigkeitsdatei For Input As 1
    28. Do While Not EOF(1)
    29. Line Input #1, EinleseZeile
    30. If Trim(EinleseZeile) = Empty Then GoTo naechsteZeile
    31. 'Auswertung EinleseZeile
    32. Pos1 = InStr(1, EinleseZeile, ";")
    33. Laenge1 = Pos1 - 1
    34. Pos2 = InStr(Pos1 + 1, EinleseZeile, ";")
    35. Laenge2 = Pos2 - Pos1 - 1
    36. Pos3 = InStr(Pos2 + 1, EinleseZeile, ";")
    37. Laenge3 = Pos3 - Pos2 - 1
    38. Pos4 = InStr(Pos3 + 1, EinleseZeile, ";")
    39. Laenge4 = Pos4 - Pos3 - 1
    40. Pos5 = InStr(Pos4 + 1, EinleseZeile, ";")
    41. Laenge5 = Pos5 - Pos4 - 1
    42. Pos6 = InStr(Pos5 + 1, EinleseZeile, ";")
    43. Laenge6 = Pos6 - Pos5 - 1
    44. Pos7 = InStr(Pos6 + 1, EinleseZeile, ";")
    45. Laenge7 = Pos7 - Pos6 - 1
    46. Pos8 = InStr(Pos7 + 1, EinleseZeile, ";")
    47. Laenge8 = Pos8 - Pos7 - 1
    48. Pos9 = InStr(Pos8 + 1, EinleseZeile, ";")
    49. Laenge9 = Pos9 - Pos8 - 1
    50. Pos10 = InStr(Pos9 + 1, EinleseZeile, ";")
    51. Laenge10 = Pos10 - Pos9 - 1
    52. Pos11 = InStr(Pos10 + 1, EinleseZeile, ";")
    53. Laenge11 = Pos11 - Pos10 - 1
    54. Pos12 = InStr(Pos11 + 1, EinleseZeile, ";")
    55. Laenge12 = Pos12 - Pos11 - 1
    56. Pos13 = InStr(Pos12 + 1, EinleseZeile, ";")
    57. Laenge13 = Pos13 - Pos12 - 1
    58. Pos14 = InStr(Pos13 + 1, EinleseZeile, ";")
    59. Laenge14 = Pos14 - Pos32 - 1
    60. 'Schreibe Werte aus .bld in Variablen
    61. Datum = Mid(EinleseZeile, 1, Laenge1)
    62. Anzahl_Stunden = Mid(EinleseZeile, Pos1 + 1, Laenge2)
    63. Beschreibung = Mid(EinleseZeile, Pos2 + 1, Laenge3)
    64. Kostenstelle = Mid(EinleseZeile, Pos3 + 1, Laenge4)
    65. APLZNr = Mid(EinleseZeile, Pos4 + 1, Laenge5)
    66. InvNr = Mid(EinleseZeile, Pos5 + 1, Laenge6)
    67. ProjNr = Mid(EinleseZeile, Pos6 + 1, Laenge7)
    68. WKZNr = Mid(EinleseZeile, Pos7 + 1, Laenge8)
    69. Kennzahl = Mid(EinleseZeile, Pos8 + 1, Laenge9)
    70. Kennzahl_Beschreibung = Mid(EinleseZeile, Pos9 + 1, Laenge10)
    71. Ident = Mid(EinleseZeile, Pos10 + 1, Laenge11)
    72. Personalnummer = Mid(EinleseZeile, Pos11 + 1, Laenge12)
    73. kw = Mid(EinleseZeile, Pos12 + 1, Laenge13)
    74. 'Personalnummer mit Zelle vergleichen und KW
    75. If Personalnummer = PersonalnummerDatenblatt And kw = ThisWorkbook.Sheets("DropDown").Cells(2, 5).Value) Then
    76. 'Schreibe Variablen in Zellen
    77. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 1) = Datum
    78. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 2) = Anzahl_Stunden
    79. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 3) = Beschreibung
    80. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 4) = Kostenstelle
    81. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 5) = APLZNr
    82. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 6) = InvNr
    83. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 7) = ProjNr
    84. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 8) = WKZNr
    85. ThisWorkbook.Sheets("Anwahl").Cells(EintrageZeile, 9) = Kennzahl
    86. Else
    87. EintrageZeile = EintrageZeile - 1
    88. GoTo naechsteZeile
    89. End If
    90. 'Stop
    91. naechsteZeile:
    92. EintrageZeile = EintrageZeile + 1
    93. 'Stop
    94. Weiter:
    95. 'Stop
    96. EingabeZeile = EingabeZeile + 1
    97. Loop
    98. Close #1
    99. Application.ScreenUpdating = True
    100. Abbruch:
    101. End Sub



    Bitte bitte helft mir das Projekt fertigzustellen, habe nur noch bis Freitag Zeit :(

    Gruß
    Es ist nahezu unmöglich dir zu helfen, man müsste schon die bld datei und alles drumherum haben

    du kannst das ganze doch mal schritt für schritt debuggen und dir die werte von kw und ThisWorkbook.Sheets("DropDown").Cells(2, 5).Value) ausgeben lassen
    vll liegts an gross und kleinschreibung ?
    Das ist meine Signatur und sie wird wunderbar sein!