Userformeingaben wochentabhängig übernehmen

  • Excel

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

    Userformeingaben wochentabhängig übernehmen

    Hallo liebe Profis,
    dies ist mein erster Eintrag in diesem Forum. Seht es mir bitte nach, wenn ich Form- oder sonstige Fehler in der Fragestellung begehe :)
    Zu meinem Problem:
    Ich habe zur täglichen Abfrage von mehreren Kennzahlen eine Userform erstellt/angepasst, die von mehreren Managern benutzt wird und diese dann die Daten in eine Exceltabelle einfügt. Für Zahlen und Texte, die jeden Tag eingepflegt werden müssen klappt das auch bisher ganz gut. Nun kommen aber 2 Fragen dazu, deren Antworten nur am Montag bzw. am Dienstag in der Tabelle auftauchen sollen. Dazu gibt es denke ich mal 2 Möglichkeiten. Entweder tauchen diese Fragen bzw. die Eingabefelder nur am Montag bzw. Dienstag auf, oder die Antworten werden nur am Mo oder Di übernommen. Da meine Head of aber von der Tagesabhängigkeit der Fragen wissen sollten, habe ich mich an der 2. Möglichkeit versucht. Mein bisheriger Versuch funktioniert nur nicht wirklich und trägt die Daten nicht (richtig) ein. Der betreffende Codeteil sieht so aus (Q6 wird täglich gefragt und funktioniert so richtig, Q1 und Q2 jedoch nicht; im Anhang ein paar Bilder wie es in etwa aussieht):

    Quellcode

    1. 'schreibe aktuelle Q Daten
    2. 'Q1
    3. Select Case Weekday(Date)
    4. Case 2
    5. suche = Range("d6" & Weekday(Date))
    6. Set Blatt = ActiveSheet '--Name anpassen
    7. Set Zelle = Blatt.Columns(4).Find(What:=suche, LookIn:=xlValues, lookat:=xlWhole)
    8. If Not Zelle Is Nothing Then
    9. a = Application.Match(CLng(Date), Blatt.Rows(2), 0)
    10. If IsNumeric(a) Then
    11. Blatt.Cells(Zelle.Row, a) = TextBox27.Value
    12. End If
    13. End If
    14. End Select
    15. 'Q2
    16. Select Case Weekday(Date)
    17. Case 3
    18. suche = Range("d7" & Weekday(Date))
    19. Set Blatt = ActiveSheet '--Name anpassen
    20. Set Zelle = Blatt.Columns(4).Find(What:=suche, LookIn:=xlValues, lookat:=xlWhole)
    21. If Not Zelle Is Nothing Then
    22. a = Application.Match(CLng(Date), Blatt.Rows(2), 0)
    23. If IsNumeric(a) Then
    24. Blatt.Cells(Zelle.Row, a) = TextBox4.Value
    25. End If
    26. End If
    27. End Select
    28. 'Q6
    29. suche = Range("d11")
    30. Set Blatt = ActiveSheet '--Name anpassen
    31. Set Zelle = Blatt.Columns(4).Find(What:=suche, LookIn:=xlValues, lookat:=xlWhole)
    32. If Not Zelle Is Nothing Then
    33. a = Application.Match(CLng(Date), Blatt.Rows(2), 0)
    34. If IsNumeric(a) Then
    35. Blatt.Cells(Zelle.Row, a) = TextBox5.Value
    36. End If
    37. End If



    Ich hoffe ich habe alle nötigen Informationen gegeben und mir kann jemand helfen. Ist die Auswahl über Case Weekday sinnvoll oder wäre eine if then Abfrage zur 3. Zeile sinnvoller und wenn ja, wie könnte man das umsetzen?
    Zur Information: Ich habe Grundkenntnisse in VBA aus einer Vorlesung im Ingenieursstudium und habe einen Großteil des Codes erhalten und nur an vielen Stellen unseren Bedürfnissen angepasst soweit ich mich in die Programmierung hineindenken konnte.

    Viele Grüße
    Alex
    Bilder
    • SQCDP Tabelle.JPG

      87,51 kB, 1.278×414, 89 mal angesehen
    • Userform.JPG

      27,27 kB, 876×147, 81 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ADIXSrontgorrth“ ()

    1. statt die Tags [ code] und [ /code] zu verwenden, nimm [ vb] und sein Gegenstück, dann wird's noch übersichtlicher.
    2. Select Case sollte zusammengefasst werden =>

    Visual Basic-Quellcode

    1. Select Case
    2. Case 2: '...
    3. Case 3: '...
    4. End Select

    3. die ganzen Codezeilen sehen alle so ähnlich, dass man die bestimmt in eine Extrafunktion auslagern kann => statt die Zeilen 3x zu haben, sind sie nur noch 1x da => einfacher änderbar:

    Visual Basic-Quellcode

    1. 'schreibe aktuelle Q Daten
    2. 'Q1
    3. Select Case Weekday(Date)
    4. Case 2: Call Make("d6" & Weekday(Date), TextBox27.Value)
    5. Case 3: Call Make("d7" & Weekday(Date), TextBox4.Value)
    6. End Select
    7. Call Make("d11" & Weekday(Date), TextBox5.Value)
    8. End Sub
    9. Sub Make(ByVal loc As String, dest As String) '* s. Anmerkung unten
    10. suche = Range(loc)
    11. Set Blatt = ActiveSheet '--Name anpassen
    12. Set Zelle = Blatt.Columns(4).Find(What:=suche, LookIn:=xlValues, lookat:=xlWhole)
    13. If Zelle Is Nothing Then Exit Sub
    14. a = Application.Match(CLng(Date), Blatt.Rows(2), 0)
    15. If IsNumeric(a) Then Blatt.Cells(Zelle.Row, a) = dest
    16. End Sub

    * Prozedurname und Variablennamen habe ich absichtlich ziemlich bescheuert gewählt, einfach nur, damit Du es auf jeden Fall an Deine Namenskonvention anpassen musst und sinnvolle Namen findest

    EDIT: und schon kann man besser Fehler finden. z.B. suche = Range("d7" & Weekday(Date)) scheint mir immer leer zu sein, da das keine gültige Range-Angabe ist. Da kommt z.B. für Donnerstag raus: Range("d75")
    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.

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