xlValidateList nur wenn Bedingung erfüllt ist

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Panter.

    xlValidateList nur wenn Bedingung erfüllt ist

    Hallo,
    ich möchte gerne in VBA eine xlValidateList nutzen, wenn eine andere Zellen nicht leer ist, aber irgendwie fehlt mir die idee wie ich das machen kann.

    Konkret wenn z.b. in Cells(i,31) <> "" then Range("A2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
    Formula1:="Orange,Apfel,Mango,Birne,Pfirsich"

    Ich habe das so versucht umzusetzen

    Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range)
    2. lngLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    3. For i = 5 To lngLastRow Step 4
    4. If Cells(i, 30) <> "" And Cells(i, 31) = "" And Cells(i, 32) = "" Then
    5. ActiveSheet.Unprotect "PW"
    6. With Cells(i, 33).Validation
    7. .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="Berlin,München,Mailand,Turin"
    8. .IgnoreBlank = True
    9. .InCellDropdown = True
    10. End With
    11. End If
    12. Next i
    13. End Sub


    aber leider führt das zu zwei Problemen, zum einen wird der rest des Codes recht langsam (es wird ein Tabellenblatt mit ca. 500-600 Zeilen und 35 Spalten befüllt und formatiert) und zum anderen wenn ich dann in Cells(i,30) etwas eintrage bekomme ich die Validatlist gefüllt, aber wenn ich dann einen Eintrag auswähle bekomme ich einen einen Laufzeitfehler 1004 an dieser stelle

    Quellcode

    1. .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="Berlin,München,Mailand,Turin"


    Wie kann ich das besser/richtig umsetzen? Danke

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

    Hallo

    Als Lösungsansatz würde ich folgende Vorschlagen:

    Ich würde nur das Dropdown erzeugen, wenn der Benutzer es braucht, d.H. nicht immer alle - Daher Ereignis Worksheet_SelectionChange. Ich habe es bei mir getestet und es funktioniert.

    Folgendes fehlte noch, ist aber in deinem Code teilweise vorhanden: Die Prüfung ob eben die 3 anderen Felder leer sind und entsprechen das Droptown wieder entfernen, Zeilenprüfung - da ja nur jede 4 Zeile.

    Kannst Du damit etwas anfangen?

    LG Panter

    Visual Basic-Quellcode

    1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    2. If Target.Column = 33 Then
    3. With Target.Validation
    4. .Delete
    5. .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    6. xlBetween, Formula1:="Berlin,München,Mailand,Turin"
    7. .IgnoreBlank = True
    8. .InCellDropdown = True
    9. .InputTitle = ""
    10. .ErrorTitle = ""
    11. .InputMessage = ""
    12. .ErrorMessage = ""
    13. .ShowInput = True
    14. .ShowError = True
    15. End With
    16. End If
    17. End Sub
    Hi,
    ich hab es jetzt so gemacht und nach dem ersten Testen würde ich sagen funktioniert es so schonmal.

    Quellcode

    1. If Target.Column = 33 Then
    2. If Target.Row Mod 4 = 1 Then
    3. If Cells(Target.Row, 30) <> "" And Cells(Target.Row, 31) = "" And Cells(Target.Row, 32) = "Ja" Then
    4. ActiveSheet.Unprotect "PW"
    5. With Target.Validation
    6. .Delete
    7. .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    8. xlBetween, Formula1:="Berlin,München,Mailand,Turin"
    9. .IgnoreBlank = True
    10. .InCellDropdown = True
    11. .InputTitle = ""
    12. .ErrorTitle = ""
    13. .InputMessage = ""
    14. .ErrorMessage = ""
    15. .ShowInput = True
    16. .ShowError = True
    17. End With
    18. End If


    Wo mir tatsächlich noch die idee fehlt ist wenn Jetzt in

    Quellcode

    1. Cells(Target.Row, 30) <> "" And Cells(Target.Row, 31) = "" And Cells(Target.Row, 32) = "Ja" Then

    Quellcode

    1. Cells(Target.Row, 30) = ""

    Quellcode

    1. And Cells(Target.Row, 31) = "" oder <>""

    Quellcode

    1. And Cells(Target.Row, 32) = "Nein"oder =""
    , wie dann automatisch die ValidationLIst wieder entfernt wird.

    Danke für deine Tips
    Hallo Tina

    Reicht ein Else nicht?

    Mir ist noch aufgefallen, dass wenn du den Blattschutz entfernst, diesen evtl. wieder setzen solltest.

    Lg Panter

    Visual Basic-Quellcode

    1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    2. If Target.Column = 33 Then
    3. If Target.Row Mod 4 = 1 Then
    4. If Cells(Target.Row, 30) <> "" And Cells(Target.Row, 31) = "" And Cells(Target.Row, 32) = "Ja" Then
    5. ActiveSheet.Unprotect "PW"
    6. With Target.Validation
    7. .Delete
    8. .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    9. xlBetween, Formula1:="Berlin,München,Mailand,Turin"
    10. .IgnoreBlank = True
    11. .InCellDropdown = True
    12. .InputTitle = ""
    13. .ErrorTitle = ""
    14. .InputMessage = ""
    15. .ErrorMessage = ""
    16. .ShowInput = True
    17. .ShowError = True
    18. End With
    19. Else
    20. ActiveSheet.Unprotect "PW"
    21. With Target.Validation
    22. .Delete
    23. End With
    24. End If
    25. End If
    26. End If
    27. End Sub