2016-11-21 7 views
1

Je travaille sur un formulaire en VBA pour un document Word. J'apprends au fur et à mesure. J'ai une liste déroulante où vous pouvez sélectionner un élément de la liste. Fondamentalement, je veux que le document imprime 4 copies si l'article "Homestretch" est sélectionné et 3 copies pour tout le reste qui est sélectionné ou tapé dans la zone de liste déroulante.Instruction If et ElseIf dans VBA

J'ai les 4 copies imprimant parfaitement quand je choisis Homestretch, mais si je choisis n'importe quoi autrement il n'imprimera pas. Notez également que ceci est sous la fonction de clic sur le bouton de commande et je veux seulement que ceci s'exécute si la case ckbPrint est cochée. Voici le code ci-dessous. Merci.

If Me.ckbPrint.Value = True Then 
If cbxCarrier.Value = "Homestretch" Then 
    ActiveDocument.PrintOut copies:=4 
ElseIf cbxCarrier.Value <> "Homestretch" Then 
ElseIf Me.ckbPrint.Value = True Then 
    ActiveDocument.PrintOut copies:=3 
End If 
End If 

Répondre

2

Votre code applique trop de tests . Vous pouvez simplifier à ce qui suit:

Dim copies As Long 

If Me.ckbPrint Then 
    If cbxCarrier.Value = "Homestretch" Then 
     copies = 4 
    Else 
     copies = 3 
    End If 
    ActiveDocument.PrintOut copies:=copies 
End If 
+0

Félicitations pour avoir évité le test explicite '{bool-expression} = True', mais alors ... vous comptez sur la valeur du membre par défaut pour' ckbPrint', mais vérifiez explicitement 'cbxCarrier.Value'. Je voudrais également renflouer tôt avec 'If Not Me.ckbPrint.Value Then Exit Sub', et supprimer un niveau d'indentation. L'upvote va supprimer la duplication 'ActiveDocument.PrintOut'. Bon travail! –

+0

Merci! Cela a fonctionné parfaitement et il est très facile de comprendre ce qui se passe ici. Je suppose que j'étais juste en train de le penser. Merci encore! – Christopher

0

Il faut regarder juste changer comme ça

If Me.ckbPrint.Value = True Then 
    If cbxCarrier.Value = "Homestretch" Then 
     ActiveDocument.PrintOut copies:=4 
    ElseIf cbxCarrier.Value <> "Homestretch" Then 
     'put your inner else statement here. If none, then remove it 
    End If 
ElseIf Me.ckbPrint.Value = False Then 'this else is connected with first if 
ActiveDocument.PrintOut copies:=3 
End If 

les déclarations si ce n'est pas la chose que vous voulez, mais comment, si et elseif fonctionne

+0

Il est plus difficile à dire à cause du [manque de] indentation, mais le code de OP n'imprime rien quand 'Not Me.ckbPrint.Value'. –

0

Pour de simples If ... Then cas où vous avez juste besoin de choisir entre l'attribution d'une des deux valeurs, la fonction IIf() peut rendre votre code plus simple:

If Me.ckbPrint Then ActiveDocument.PrintOut _ 
    copies:=IIf(cbxCarrier.Value="Homestretch", 4, 3) 

Syntaxe: IIf(test, if_test_true, if_test_false)

+0

Selon l'auteur, il est un débutant. Pouvez-vous ajouter quelques explications, pourquoi vos lignes de code vont vous aider? – reporter