2017-01-29 6 views
1

Ich füge eine Datenvalidierungsliste basierend auf einem Zellenwert hinzu. Wenn der Wert in Zelle B29 = "Text1" ist, fügen Sie die Datenvalidierung in Zelle D29 hinzu. Wenn die Zelle B29 einen anderen Wert hat, muss eine Formel zu Zelle D29 hinzugefügt werden und die Datenvalidierung muss entfernt werden. HierDatenvalidierung basierend auf Zellenwert

ist ein Beispiel für das Makro:

If Range("B29").Value = "Text1" Then 
Range("D29").Value = "" 
    With Selection.Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:="=INDIRECT(B29)" 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 
ElseIf Range("B29").Value = "Value1" Then 
Range("D29").Formula = "=IF(Sheet2!B9,VLOOKUP(Sheet2!B8,'Team Target Tabel'!C2:E17,2,FALSE),"""")" 
Range("D29").Validation.Delete 
ElseIf Range("B29").Value = "Value2" Then 
Range("D29").Formula = "=IF(Sheet2!B9,VLOOKUP(Sheet2!B8,'Team Target Tabel'!C2:E17,2,FALSE),"""")" 
Range("D29").Validation.Delete 
ElseIf Range("B29").Value = "Value3" Then 
Range("D29").Formula = "=IF(Sheet2!B9,VLOOKUP(Sheet2!B8,'Team Target Tabel'!C2:E17,2,FALSE),"""")" 
Range("D29").Validation.Delete 
End If 
End Sub 

Zelle B29 ist auch eine Datenüberprüfungszelle, die 4 Werte aufweist. Wenn der Wert text1 ist, muss Zelle D29 in eine Datenüberprüfungsliste geändert werden, aber ich muss das Makro manuell ausführen, um dies zu tun. Wenn D29 eine Datenüberprüfungsliste ist und ich den Wert in Zelle B29 ändere, muss ich das Makro erneut ausführen (manuell), um es zurück in die Formel zu ändern.

+0

Bitte erklären Sie, wie funktioniert Ihr Makro nicht –

+0

Zelle B29 ist auch eine Datenvalidierungszelle, die 4 Werte hat. Wenn der Wert text1 ist, muss Zelle D29 in eine Datenüberprüfungsliste geändert werden, aber ich muss das Makro manuell ausführen, um dies zu tun. Wenn D29 eine Datenüberprüfungsliste ist und ich den Wert in Zelle B29 ändere, muss ich das Makro erneut ausführen (manuell), um es zurück in die Formel zu ändern. – Miksel

Antwort

1

Sie könnten das Worksheet_Change Ereignis erfassen das Makro, wenn D29 Änderungen erneut ausführen.

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Me.Range("B29")) Is Nothing Then 
     Call myMacroToChangeValidationOfD29 
    End If 
End Sub 

BTW, warum With Selection.Validation nicht With Range("D29").Validation ??

+0

Ich habe es in der Tat geändert mit With Range ("D29"). Validierung und verwendet StrComp, die Lajos Arpad gepostet und es funktioniert wie es sollte, aber ich muss immer noch das Makro manuell ausführen. Mache ich etwas falsch? – Miksel

+0

@Miksel nicht falsch, aber Sie haben eine Anforderung, die die Validierung von 'D29' ändern soll, wenn sich' B29' ändert. Das 'Worksheet_Change'-Ereignis ist dafür gemacht. Sie müssen diesen Handler hinzufügen, um die Ausführung des Makros zu automatisieren, fügen Sie ihn (wie in meiner Antwort) in den Code des Arbeitsblatts ein, der Ihre 'B29' Zelle enthält, und ändern Sie den' Aufruf' in den korrekten Namen Ihres Makros Makro, das Sie im OP zeigen. –

+0

Ich bekomme eine Fehlermeldung: Laufzeitfehler 438. Objekt unterstützt diese Eigenschaft oder Methode nicht. – Miksel

0

würde ich StrComp verwenden Zeichenfolgen zu vergleichen, zB:

If StrComp(Range("B29").Value, "text1") = 0 Then 
    'Something 
End If 

Sie wollen B29 gegen "text1" überprüfen, jedoch werden Sie es gegen "Text1" zu überprüfen. Sie haben möglicherweise ein Problem mit der Groß-/Kleinschreibung. Ihre sonst Fälle sind ähnlich, können Sie sie zu einem anderen Einzel vereinfachen könnte, wie folgt aus:

If StrComp(Range("B29").Value, "text1") = 0 Then 
Range("D29").Value = "" 
    With Selection.Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:="=INDIRECT(B29)" 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 
Else 
Range("D29").Formula = "=IF(Sheet2!B9,VLOOKUP(Sheet2!B8,'Team Target Tabel'!C2:E17,2,FALSE),"""")" 
Range("D29").Validation.Delete 
End Sub 
Verwandte Themen