Validation setzen

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Adrian.

    Validation setzen

    Hallo Leute,

    ich will einer bestimmten (einzelnen) Zelle eine Gültigkeitsprüfung zuweisen. Da ich die Syntax nicht kannte, hab ich mit der Makroaufzeichnung folgendes mitgeschnitten (Original, nicht editiert):

    Quellcode

    1. Sub gueltig()
    2. '
    3. ' gueltig Makro
    4. '
    5. '
    6. With Selection.Validation
    7. .Delete
    8. .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    9. xlBetween, Formula1:="=Z12S1:Z28S1"
    10. .IgnoreBlank = True
    11. .InCellDropdown = True
    12. .InputTitle = ""
    13. .ErrorTitle = ""
    14. .InputMessage = ""
    15. .ErrorMessage = ""
    16. .ShowInput = True
    17. .ShowError = True
    18. End With
    19. End Sub


    leider bekomme ich schon beim Ausführen des aufgezeichneten Makros in der Zeile mit ."Add Type" den Laufzeitfehler 1004 (Anwendungs- oder objektdefinierter Fehler). ?(
    Den gleichen Fehler bekomm ich auch wenn ich das sinngemäß in mein Programm einbinde.

    Irgendjemand eine Idee, woran das liegen könnte? (Blattschutz ist schon aufgehoben)

    Vielen Dank schonmal
    Aber ich verwende die Z1S1-Bezugsart (Optionen-allgemein), von daher stimmt die Adresse theoretisch schon. Dein Vorschlag führt auch zur gleichen Fehlermeldung.

    Welche Syntax Excel hier erwartet, ist mir nicht klar. Scheinbar ist schon das = falsch.
    Wenn ich die Werte hart reinschreibe funktioniert es so:
    Formula1:="9, 8, 7, 6, 5, 4, 3, 2, 1"
    Es wäre mir aber lieber, einen Range zu adressieren.

    Formula1:="Z12S1: Z28S1" bringt zwar keinen Fehler, aber dann verwendet er die Adresse wie einen String.

    Weiß jemand, wie man mit Formula1 einen Range adressiert?
    Bei mir unter Excel 2007 läuft das hier:

    Visual Basic-Quellcode

    1. Sub gueltig()
    2. Dim iStyle As Long
    3. iStyle = Application.ReferenceStyle'Bezugsart merken
    4. Application.ReferenceStyle = xlA1'Bezugsart umstellen
    5. With Selection.Validation
    6. .Delete
    7. .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    8. xlBetween, Formula1:="=A12:A28"
    9. .IgnoreBlank = True
    10. .InCellDropdown = True
    11. .InputTitle = ""
    12. .ErrorTitle = ""
    13. .InputMessage = ""
    14. .ErrorMessage = ""
    15. .ShowInput = True
    16. .ShowError = True
    17. End With
    18. Application.ReferenceStyle = iStyle 'Bezugsart zurückstellen
    19. End Sub


    Das Andere läuft bei mir auch nicht, muss wohl ein Excel Fehler sein, zumal der Makrorecorder es so aufzeichnet

    Ich habs:

    Visual Basic-Quellcode

    1. With Selection.Validation
    2. .Delete
    3. .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    4. xlBetween, Formula1:="=R12C1:R28C1"
    5. .IgnoreBlank = True
    6. .InCellDropdown = True
    7. .InputTitle = ""
    8. .ErrorTitle = ""
    9. .InputMessage = ""
    10. .ErrorMessage = ""
    11. .ShowInput = True
    12. .ShowError = True
    13. End With

    Excel erwartet die englische Schreibweise R1C1... Die Idee hatte ich eben beim Duschen...


    Mit Fehlerbehandlung:

    Visual Basic-Quellcode

    1. Sub gueltig()
    2. If Application.ReferenceStyle = xlR1C1 Then
    3. With Selection.Validation
    4. .Delete
    5. .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    6. xlBetween, Formula1:="=R12C1:R28C1"
    7. .IgnoreBlank = True
    8. .InCellDropdown = True
    9. .InputTitle = ""
    10. .ErrorTitle = ""
    11. .InputMessage = ""
    12. .ErrorMessage = ""
    13. .ShowInput = True
    14. .ShowError = True
    15. End With
    16. Else
    17. MsgBox "Falsche Bezugsoption in Excel", vbOKOnly + vbCritical, "Z1S1 erwartet..."
    18. End If
    19. End Sub
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „peterfido“ ()

    klasse, so funktionierts!
    Auch die Fallunterscheidung hilft mir weiter, da das Ding ja auf verschiedenen Rechnern laufen soll.
    vielen, vielen Dank! :thumbsup:

    Für die Akten und falls noch jemand das Problem hat:
    den folgenden Lösungsansatz hab ich im Internet gefunden, hier wird das Syntaxproblem umschifft:

    Quellcode

    1. Set skala = Range(Cells(12, 1), Cells(28, 1))
    2. skala.Name = "Skala"
    3. with selection
    4. .Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
    5. Formula1:="=Skala"
    6. end with