Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Validation.Add bzw. ~.Modify klappt nicht

Forumthread: Validation.Add bzw. ~.Modify klappt nicht

Validation.Add bzw. ~.Modify klappt nicht
13.12.2005 11:14:29
Peter
Hallo Forum,
auch das Lesen von ca. 20 Beiträgen hier hat mich noch nicht weitergebracht:
für meine Gültigkeitslisten verwende ich benannte Bereiche in anderen Tabellenblättern der gleichen Arbeitsmappe.
Im Tabellenblatt, in dem die Gültigkeitsprüfung durchgeführt wird, ist standardmäßig (ohne VBA) als Liste "=dyn_benutzer" eingegeben. Das ist ein dynamischer Bereich, der mit BEREICH.VERSCHIEBEN etc. erstellt ist.
Das funktioniert alles.
Über einen Commandbutton möchte ich für die jeweils aktive Zelle die Gültigkeit auf einen anderen benannten Bereich switchen.
Ausschnitt aus dem Code:
eingabe.Unprotect Password:="xxx"
If Not Intersect(ziel, eingabe.Range("dyn_tn")) Is Nothing Then
ziel.Validation.Modify Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=dyn_xm"
Else
MsgBox "Der Zellzeiger muss in der 1. Spalte stehen."
End If
eingabe.Protect Password:="xxx", UserInterfaceOnly:=True
Der Code läuft ohne Fehlermeldung ab, nur die Gültigkeitsliste wird nicht geändert. Ich habe es auch schon mit Löschen und Neusetzen der Validation-Eigenschaft probiert, oder die Formula1 aus einer Stringvariablen genommen, es will einfach nicht.
Vielen Dank für jede Hilfe.
Gruß
Peter
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Validation.Add bzw. ~.Modify klappt nicht
13.12.2005 12:08:08
ANdreas
Hallo Peter,
ich habe gerade mal einen kleines Testmakro (Excel 2003) geschrieben. Bei mir funktioniert es so:

Sub ChangeValidationTest()
Dim shEingabe As Worksheet
Dim rngZiel As Range, c As Range
Set shEingabe = Worksheets("Tabelle1")
Set rngZiel = Selection
With shEingabe
.Unprotect Password:="xxx"
If Not Intersect(rngZiel, .Range("dyn_tn")) Is Nothing Then
On Error GoTo ErrorHandler
For Each c In Intersect(rngZiel, .Range("dyn_tn"))
c.Validation.Modify Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=dyn_xm"
Next c
On Error GoTo 0
Else
MsgBox "Der Zellzeiger muss in der 1. Spalte stehen."
End If
.Protect Password:="xxx", UserInterfaceOnly:=True
End With
Exit Sub
ErrorHandler:
Select Case Err.Number
Case 1004
c.Validation.Delete
c.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=dyn_xm"
Resume Next
Case Else
MsgBox Err.Description
Resume Next
End Select
End Sub

Hoffe es hilft weiter,
Andreas
Anzeige
AW: Validation.Add bzw. ~.Modify klappt nicht
13.12.2005 12:39:06
Peter
Hallo Andreas,
vielen Dank für deine schnelle Antwort und die Mühe, ein Beispiel zu testen.
1. Deine Version ermöglicht eine Anwendung auf mehr als eine Zelle, ist natürlich flexibel, kann ich ruhig so lassen, auch wenn es bei mir immer nur um eine Zelle geht.
2. Ich bin bei deinem Code auf den ErrorHandler mit 1004 gelaufen, bei
c.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=dyn_xm"
kam dann der nächste (nun nicht mehr abgefangene) 1004er.
Beim ersten Mal konnte ich im Einzelschritt dennoch weiter und tatsächlich wurde die Validierung geändert.
Bei weiteren Versuchen ging's nicht mehr. Das der Fehler nur einmal abgefangen wird,
ist klar. Man kann Err.Clear dazwischen setzen und eine Endlosrunde drehen.
Ich verstehe aber immer noch nicht, warum die eigentliche Methode .Modify bzw. .Add nicht laufen will.
Fällt dir noch was ein?
Gruß
Peter
Anzeige
AW: Validation.Add bzw. ~.Modify klappt nicht
13.12.2005 14:09:22
ANdreas
Hallo Peter,
ich kann das Problem nicht nachvollziehen.
Interessant wäre es zu wissen, in welcher Zelle der Fehler auftritt. Ist dort eine Gültigkeitsprüfung schon drin? Wenn ja wieviele?
Evtl. zeichnest Du bei Dir das Löschen der Gültigkeitsprüfung mal auf und fügst es beim Fehler 1004 ein. Ich vermute dass das Löschen fehlschlägt und dann das .Add auf einen Fehler läuft.
Gruß
Andreas
Anzeige
AW: Validation.Add bzw. ~.Modify klappt nicht
13.12.2005 16:29:41
Peter
Hallo Andreas,
ja, es ist vorher schon eine Gültigkeitsprüfung drin, und zwar auch xlValidateList.
Deshalb versuche ich es ja im normalen Code mit *.Modify. *.Add kommt erst
ins Spiel, weil er bei Modify einen Fehler wirft.
Ich teste das mal, ob das Delete nicht hinhaut und melde mich wieder.
Kann es sein, dass es bei dir läuft, weil du Version 2003 hast?
Gruß
Peter
Anzeige
AW: Validation.Add - Workaround gefunden
13.12.2005 16:58:09
Peter
Hallo Andreas,
ich habe eine (nur *etwas* unelegante Lösung). Du hast richtig vermutet, dass das Löschen nicht richtig kam. Wenn ich nach Zurücksetzen des Codes wieder in die Tabelle gesehen habe,
war die alte Validierung noch drin, nach Verlassen der ausgewählten Zelle und wieder auswählen, war sie dann weg (also doch gelöscht). In der Laufzeit hat er das Löschen nicht bemerkt. Also habe ich auf Modify gleich ganz verzichtet und das im normalen Code (ohne errorhandler) ganz hässlich so gemacht:
With c
.Validation.Delete
.Offset(1, 0).Select
.Select
.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=dyn_xm"
End With
Das läuft.
Noch mal danke für deine Hilfe und einen schönen Abend
Peter
Anzeige
AW: Validation.Add - Workaround gefunden
14.12.2005 09:17:47
ANdreas
Hallo Peter,
ist wirklich etwas unelegant, aber was will man machen.
Vielleicht kannst Du mal versuchen das Selecten durch Application.Calculate zu ersetzen. Eventuell reicht das dann auch.
Gruß
Andreas
AW: Validation.Add - Workaround gefunden
14.12.2005 12:19:17
Peter
Hallo Andreas,
mit Application.Calculate habe ich es - nur so aus akademischem Interesse - mal versucht,
es läuft nicht.
Also lieber unelegant aber funzt.
Gruß
Peter
Anzeige
;
Anzeige

Infobox / Tutorial

Gültigkeitslisten in Excel VBA ändern: Eine praktische Anleitung


Schritt-für-Schritt-Anleitung

Um die Gültigkeitsprüfung einer Zelle in Excel mittels VBA zu ändern, kannst du die Methode Validation.Modify oder Validation.Add verwenden. Hier ist ein einfaches Beispiel, das dir zeigt, wie du die Gültigkeit einer Zelle dynamisch ändern kannst:

Sub ChangeValidation()
    Dim shEingabe As Worksheet
    Dim rngZiel As Range
    Set shEingabe = Worksheets("Tabelle1")
    Set rngZiel = Selection

    With shEingabe
        .Unprotect Password:="xxx"
        If Not Intersect(rngZiel, .Range("dyn_tn")) Is Nothing Then
            On Error GoTo ErrorHandler
            rngZiel.Validation.Modify Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=dyn_xm"
        Else
            MsgBox "Der Zellzeiger muss in der 1. Spalte stehen."
        End If
        .Protect Password:="xxx", UserInterfaceOnly:=True
    End With
    Exit Sub

ErrorHandler:
    MsgBox "Fehler: " & Err.Description
End Sub

Häufige Fehler und Lösungen

  1. Fehler 1004: Dieser Fehler tritt häufig auf, wenn die Validierung nicht richtig gelöscht werden kann. Stelle sicher, dass die Zelle, die du änderst, keine Validierung hat oder dass du sie korrekt gelöscht hast.

  2. Gültigkeitsprüfung nicht aktualisiert: Wenn die Gültigkeitsliste nicht aktualisiert wird, kann es helfen, die Validation.Delete-Methode zuerst anzuwenden, bevor du Validation.Add oder Validation.Modify verwendest.

  3. Korrekte Benennung der Bereiche: Überprüfe, dass die benannten Bereiche, die du in Formula1 verwendest, korrekt definiert sind und in der richtigen Tabelle existieren.


Alternative Methoden

Falls die Verwendung der Validation.Modify-Methode nicht funktioniert, kannst du auch die Validation.Delete-Methode nutzen, gefolgt von der Validation.Add-Methode. Hier ist ein Beispiel:

Sub AlternateValidation()
    Dim rngZiel As Range
    Set rngZiel = Selection

    With rngZiel
        .Validation.Delete
        .Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=dyn_xm"
    End With
End Sub

Diese Methode stellt sicher, dass die alte Validierung vollständig entfernt wird, bevor eine neue hinzugefügt wird.


Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen sollen, die Nutzung von vba validation.add und validation.modify zu verstehen:

  • Einfaches Beispiel für eine Gültigkeitsliste:

    Sub SimpleValidation()
      With Range("A1")
          .Validation.Delete
          .Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="Option1,Option2,Option3"
      End With
    End Sub
  • Dynamische Gültigkeitsliste basierend auf einem benannten Bereich:

    Sub DynamicValidation()
      With Range("B1")
          .Validation.Delete
          .Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=dyn_benutzer"
      End With
    End Sub

Tipps für Profis

  • Verwende On Error Resume Next: Dies kann helfen, unerwartete Fehler während der Ausführung zu ignorieren, aber sei vorsichtig, da dies auch legitime Fehler verschleiern kann.

  • Testen in einer sicheren Umgebung: Gerade bei der Arbeit mit vba validation.add und validation.modify ist es ratsam, deine Makros in einer Testumgebung zu überprüfen, um unbeabsichtigte Änderungen an wichtigen Daten zu vermeiden.

  • Fehlerprotokollierung: Implementiere eine einfache Fehlerprotokollierung, um Probleme besser nachzuvollziehen, falls etwas schiefgeht.


FAQ: Häufige Fragen

1. Warum funktioniert Validation.Modify nicht in meinem Code?
Dies kann daran liegen, dass die Zelle bereits eine Gültigkeitsprüfung hat oder die Methode nicht korrekt aufgerufen wird. Überprüfe die Syntax und stelle sicher, dass die Zelle keine andere Validierung hat.

2. Was ist der Unterschied zwischen Validation.Add und Validation.Modify?
Validation.Add wird verwendet, um eine neue Validierungsregel hinzuzufügen, während Validation.Modify eine bestehende Validierungsregel ändert.

3. Wie kann ich sicherstellen, dass meine Gültigkeitslisten dynamisch sind?
Nutze die Funktion BEREICH.VERSCHIEBEN, um dynamische benannte Bereiche zu erstellen, die sich automatisch anpassen, wenn sich deine Daten ändern.

4. Welche Excel-Version benötige ich für diese Makros?
Die gezeigten Beispiele sind in Excel 2003 und höheren Versionen getestet, sollten jedoch auch in neueren Versionen wie Excel 2016 oder 365 funktionieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige