2014-04-09 14 views
7

Chcę dodać "sprawdzanie poprawności danych" w komórce (która jest zmienna) za pomocą języka VBA, a zakres, który ma znaleźć się na liście sprawdzania poprawności danych, również jest zmienny. Do tej pory używam tegoJak dodać weryfikację danych do komórki za pomocą VBA

Tutaj „Zakres1” to zakres, który ma przyjść na liście walidacji danych i „RNG” jest komórka, gdzie chcę walidacji danych

Dim range1, rng As range 
Set range1 = range("a1:a5") 
Set rng = range("b1") 
With rng 
With .Validation 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="range1" 
End With 
End With 

otrzymuję „wniosek określony i zdefiniowany przedmiot błąd”

także może ktoś mi wyjaśnić znaczenie różnych argumentów

With .Validation 
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="range1" 

Odpowiedz

16

Użyj tego jednego:

Dim ws As Worksheet 
Dim range1 As Range, rng As Range 
'change Sheet1 to suit 
Set ws = ThisWorkbook.Worksheets("Sheet1") 

Set range1 = ws.Range("A1:A5") 
Set rng = ws.Range("B1") 

With rng.Validation 
    .Delete 'delete previous validation 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
     Formula1:="='" & ws.Name & "'!" & range1.Address 
End With 

Zauważ, że kiedy używasz Dim range1, rng As range tylko rng ma typ Range, ale range1 jest Variant. Właśnie dlatego używam Dim range1 As Range, rng As Range.
O znaczeniu parametrów można odczytać jest MSDN, ale w skrócie:

  • Type:=xlValidateList oznacza rodzaj walidacji, w tym przypadku należy wybrać wartość z listy
  • AlertStyle:=xlValidAlertStop określa ikonę używanego w polach Komunikat wyświetlany podczas walidacji . Jeśli użytkownik wprowadzi dowolną wartość z listy, otrzyma komunikat o błędzie.
  • w oryginalnym kodzie, Operator:= xlBetween jest nieparzysta. Może być używany tylko wtedy, gdy do sprawdzenia poprawności zostały dostarczone dwie formuły.
  • Formula1:="='" & ws.Name & "'!" & range1.Address walidacji danych lista zawiera adres listy z wartościami (w formacie =Sheet!A1:A5)
+0

Hej Zrobiłem zmian i jego pracy dobrze, dzięki za pomoc
Hej czy mógłby pan wyjaśnić
' "
znowu w małym detalu, po prostu nie ukrywam, co to jest" = "" i "=!" , Jestem nowy w VBA, proszę nie zwracać uwagi lub jeśli masz jakiś link, gdzie mogę go szczegółowo przestudiować, będzie niesamowity. – Gajju

+3

@Gajju, bez obaw, to łatwe :) pozwala zacząć! pożądany wynik jest mniej więcej taki: 'Formula1: =" = 'Arkusz1'! A1: A5 "' - Wszystkie formuły w programie excel rozpoczynają się od znaku równości: '='. Następnie '' Arkusz1 '! 'Oznacza, że ​​zakres' A1: A5' należy do arkusza 'Arkusz1' (jeśli twoja nazwa arkusza _nie zawiera \ spacji, możesz pominąć westchnienie' '' tak jak to: Formula1: = "= Arkusz1! A1: A5 ".Nie chcemy jednak kodować tej formuły hardsem, więc używamy:' Formula1: = "= '" & ws.Name & "'!" & Range1.Address' gdzie 'ws.Name' zwraca arkusz name (np. "Sheet1") i 'range1.Address' zwraca' A1: A5'. –

+0

Hej, było to łatwe do zrozumienia, dziękuję za poświęcony czas i jeszcze raz za pomoc ... – Gajju