2017-10-05 17 views
0

2番目の列のすべての行をドロップダウンリストにしたいと考えています。ユーザーがセルをクリックし、既存の名前を選択します。excel VBAドロップダウンリストの作成方法

どうすればよいですか?

私はこのコードを実行すると、エラーが表示されます

無効または非修飾参照

コード:

Sub test() 
Dim i As Integer 
Dim OfficerList(4) As String 

OfficerList(0) = "test1" 
OfficerList(1) = "test2" 
OfficerList(2) = "test3" 
OfficerList(3) = "test4" 
OfficerList(4) = "test5" 

For i = Range("B5000").End(xlUp).Row To 2 
    Select Case VBA.CDate(Cells(i, 2)) 
    .Delete 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
     Operator:=xlBetween, Formula1:=Join(OfficerList, ",") 
    End Select 
Next 


For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment' 

    Select Case VBA.CDate(Cells(i, 3)) 

    Case Is < VBA.Date() 
     Cells(i, 3).Interior.Color = vbGreen 

    Case Is = VBA.Date() 
     Cells(i, 3).Interior.Color = vbYellow 

    Case Is > VBA.Date() 
     Cells(i, 3).Interior.Color = vbRed 

    End Select 
Next 
End Sub 
+0

エラーが表示されるのはどの行ですか? – Tom

+0

それは行番号を表示するだけで、上記の型付きエラーでエラーがコンパイルされます –

+0

そしてメッセージが表示されたときに「デバッグ」を押すとエラーのある行が強調表示されます – Tom

答えて

0

これはSelect Caseのために適切な場所のように見えるしていませんしてみてください最初のループの代わりにこれを使用してください

For i = Range("B5000").End(xlUp).Row To 2 Step -1 
    With Cells(i, 2).Validation 
    .Delete 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(OfficerList, ",") 
    End With 
Next i 

Select Caseの代わりにWithを使用して、セルの検証エントリを変更していることを確認してから、ループをStep -1(2番目のループのように)に変更しました。

+0

でその削除を行っているのかどうか分かりません。2番目の列のすべてのセルをドロップダウンリストにしていないという回答を試しました.2番目の行だけがドロップダウンリストを表示します –

+0

あなたのワークシートで?それはその部分を助けるかもしれません。 –

0

これを見てください。私はあなたのループも組み合わせました。なぜあなたはそれを後方に実行しているのか分かりませんが、残しておきました。

Sub test() 
    Dim i As Long 
    Dim OfficerList(4) As String 

    OfficerList(0) = "test1" 
    OfficerList(1) = "test2" 
    OfficerList(2) = "test3" 
    OfficerList(3) = "test4" 
    OfficerList(4) = "test5" 
    ' Update this with your sheet 
    With Sheet1 
     For i = .Range("B5000").End(xlUp).Row To 2 Step -1 
      With .Cells(i, 2).Validation 
      .Delete 
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
       Operator:=xlBetween, Formula1:=Join(OfficerList, ",") 
      End With 

      Select Case VBA.CDate(.Cells(i, 3)) 
      Case Is < VBA.Date() 
       .Cells(i, 3).Interior.Color = vbGreen 
      Case Is = VBA.Date() 
       .Cells(i, 3).Interior.Color = vbYellow 
      Case Is > VBA.Date() 
       .Cells(i, 3).Interior.Color = vbRed 
      End Select 
     Next i 
    End With 
End Sub 
関連する問題