2017-10-05 2 views
0

je veux faire toutes les lignes dans les secondes colonnes pour être une liste déroulante. où l'utilisateur clique sur la cellule et sélectionne un nom existant.excel VBA comment créer une liste déroulante

comment le faire?

quand je lance ce code, il affiche une erreur:

référence non valide ou non qualifiée

Code

:

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

Sur quelle ligne l'erreur est-elle affichée? – Tom

+0

il affiche le numéro de ligne juste compiler l'erreur avec l'erreur typée ci-dessus –

+0

Et si vous appuyez ensuite 'Debug' sur le message qui apparaît, il mettra en évidence la ligne qui a l'erreur – Tom

Répondre

0

Cela ne semble pas le bon endroit pour Select Case: essayer ceci à la place pour votre première boucle

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 

Au lieu de Select Case, je viens d'utiliser With et veillé à spécifier que vous étiez en train de changer l'entrée de validation de la cellule, et j'ai changé la boucle pour inclure Step -1 (comme votre deuxième boucle).

+0

j'ai essayé votre réponse, il n'a pas fait toutes les cellules dans la deuxième colonne pour être une liste déroulante ... juste la deuxième rangée afficher la liste déroulante –

+0

Pouvons-nous jeter un oeil à votre feuille de travail? Cela pourrait aider avec cette partie. –

0

Jetez un coup d'oeil à ceci. J'ai aussi combiné votre boucle. Vous ne savez pas pourquoi vous l'exécutez en arrière mais je l'ai laissé faire

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