2016-03-19 10 views
0

Normalerweise ist die Datensatzoption in Excel großartig, aber dieses Mal hat es nicht geholfen.Erstellen einer Datenvalidierungsliste mit indirekter Formel über VBA

kann ich eine Datenvalidierungsliste durch VBA mit diesem Kodex erstellen:

Sub Macro 8() 

With Range("C8").Validation 
    .Delete 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="=Land" 
    .IgnoreBlank = True 
    .InCellDropdown = True 
    .InputTitle = "" 
    .ErrorTitle = "" 
    .InputMessage = "" 
    .ErrorMessage = "" 
    .ShowInput = True 
    .ShowError = True 
End With 
End Sub 

Jetzt funktioniert dies. Aber in der darunterliegenden Zelle brauche ich die Formel =INDIRECT($C$8). Also die Recorder mit bekam ich so ziemlich das gleiche Code:

Sub Macro1() 

With Range("C9").Validation 
    .Delete 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="=indirect($C$8)" 
    .IgnoreBlank = True 
    .InCellDropdown = True 
    .InputTitle = "" 
    .ErrorTitle = "" 
    .InputMessage = "" 
    .ErrorMessage = "" 
    .ShowInput = True 
    .ShowError = True 
End With 
End Sub 

aber das Code habe ich immer ein „anwendungsdefinierte oder Objekt definierte Fehler“ abrufen, die auf der Linie

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="=indirect($C$8)" 

Jeder kann Sag mir wo mein Fehler ist?

Antwort

0

Ihr Code ist meistens richtig. Sie benötigen nicht viel Code, um den indirekten() Teil zu machen. Hier ist die ganze Sache:

Sub Macro8() 

With Range("C8").Validation 
    .Delete 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="=Land" 
    .IgnoreBlank = True 
    .InCellDropdown = True 
    .InputTitle = "" 
    .ErrorTitle = "" 
    .InputMessage = "" 
    .ErrorMessage = "" 
    .ShowInput = True 
    .ShowError = True 
End With 
Range("C9").Formula = "=INDIRECT(""$C$8"")" 
End Sub 
+0

Hallo Mike, Danke für die Antwort! Ich brauche die indirekte Zelle, um ein Dropdown zu sein ... Wenn ich es manuell mache, funktioniert es seit Die Werte, die ich von C8 bekomme, sind die Namen von Listen in meinem Arbeitsblatt, so bekomme ich die Auswahl aus dieser Liste in C9 Mit nur einfügen = INDIREKT ($ C $ 8) funktioniert es nicht ... Irgendeine Idee? –

+0

Sie müssen = Indirect ("$ C $ 8") verwenden. Darüber hinaus würde ich diese Frage als beantwortet betrachten. Bei weiteren Problemen empfiehlt es sich, eine neue Frage zu starten. – MikeC

0

Ok, ich habe es mit diesem einst zu arbeiten, jetzt bekomme ich den gleichen Fehler wieder ...:

With Range("C9").Validation 
    .Delete 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="=Indirect(" & Range("C8").Address & ")" 
    .IgnoreBlank = True 
    .InCellDropdown = True 
    .InputTitle = "" 
    .ErrorTitle = "" 
    .InputMessage = "" 
    .ErrorMessage = "" 
    .ShowInput = True 
    .ShowError = True 
End With 

Ich verstehe nicht ganz, warum tho ... kann jemand was

" & Range("C8").Address & " 

Mittel erklären?

+0

Er berechnet die Adresse von C8. Es wird also "C8" ausgewertet. So ist es das Gleiche. – MikeC

+0

Warum funktioniert es so, aber nicht so, wie ich es hatte ??? –

+0

Sie hatten C8 als Argument. Es benötigt das Argument, um die Adresse als eine Zeichenfolge zu sein; also sollte es "C8" oder ein String-Ausdruck sein, der zu "C8" auswertet – MikeC

0

Zur Arbeit!

Ich habe meinen vorhandenen Code in einem separaten Makro und machte es relativ zu Active

jetzt läuft es, wenn etwas in der Zelle über

Dank tho ausgewählt ist!