2016-03-19 5 views
0

通常、Excelのレコードオプションは素晴らしいですが、今回は役に立ちませんでした。VBAによる間接式によるデータ検証リストの作成

私はこのコードでVBAを介してデータ検証リストを作成することができます。

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 

さて、この作品。しかし、その下のセルには、式が=INDIRECT($C$8)である必要があります。だから私はほとんど同じコードを持っレコーダーを使用して:

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 

しかし、そのコードを使用して、私はいつも「アプリケーション定義またはオブジェクト定義エラー」を得るラインを指して

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

ができます誰私の間違いがどこにあるか教えてください。

答えて

0

あなたのコードはほとんど正しいです。 Indirect()の部分を行うために多くのコードは必要ありません。ここでは全体のことである:

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

こんにちはマイク、答えをありがとう! 私は間接的なセルもドロップダウンする必要があります... 私はC8から得た値がワークシートのリストの名前なので手動でそれを行うので、C9のリストから選択します ちょうど挿入=間接($ C $ 8)それは動作しません... 任意のアイデア? –

+0

= Indirect( "$ C $ 8")を使用する必要があります。それを超えて、私はこの質問に答えたと思います。それ以上の問題については、新しい質問を始めるのが最善です。 – MikeC

0

[OK]を、私は...それは今、私は再び同じエラーを取得し、これとONCE動作するようになった:

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 

なぜカントー私はかなり理解していません... 誰かが何を説明できるか

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

を意味しますか?

+0

C8のアドレスを計算します。したがって、それは "C8"と評価されます。それは同じことです。 – MikeC

+0

なぜそれはこのように動作するのですか?私はそれを持っていましたか? –

+0

あなたは引数としてC8を持っていました。文字列としてのアドレスであるためには引数が必要です。 "C8"または "C8"と評価される文字列式である必要があります – MikeC

0

これは機能しました。

は、私は今、それが何かは、カントー

おかげ上のセルに選択されるたびに実行される別のマクロで私の既存のコードを入れて、ActiveCellの

に、それは相対ました!

関連する問題