La ligne de masquage simple ne fonctionne pas lorsqu'on lui donne plusieurs options

J'ai essayé de définir une variable pour la plage et j'ai le même décalage

If Range("J178") = "Credit" Or "Debit" Or "Both" Then
    Rows("180").Hidden = False
Else
    Rows("180").Hidden = True
End If

Je m'attendais à ce que le code s'exécute ou non; pas le Run time 13 type mismatch que je reçois.

-1
MATT 27 janv. 2019 à 01:11

3 réponses

Meilleure réponse

Option 1 - Écrivez chaque condition à la main (sensible à la casse)

If Range("J178") = "Credit" Or Range("J178") = "Debit" Or Range("J178") = "Both" Then
    Rows("180").Hidden = False
Else
    Rows("180").Hidden = True
End If

Option 2 - Vérifiez un tableau avec la correspondance de la feuille de calcul (non sensible à la casse)

If IsNumeric(application.Match(Range("J178"), Array("Credit","Debit", "Both"), 0)) Then
    Rows("180").Hidden = False
Else
    Rows("180").Hidden = True
End If

Option 3 - Utilisez une méthode Select Case (sensible à la casse)

Select Case Range("J178"),Value
    Case "Credit", "Debit", "Both"
        Rows("180").Hidden = False
    Case Else
        Rows("180").Hidden = True
End Select

Option 4 - Utiliser une méthode de sélection de cas modifiée (non sensible à la casse)

Select Case lcase(Range("J178"),Value)
    Case "credit", "debit", "both"
        Rows("180").Hidden = False
    Case Else
        Rows("180").Hidden = True
End Select
5
user10970498user10970498 26 janv. 2019 à 22:30

Une alternative un peu plus courte en utilisant Evaluate:

Rows("180").Hidden = Not [or(J178 = "Credit", J178 = "Debit", J178 = "Both")]
0
Slai 27 janv. 2019 à 09:00

... Option 5 (à la suite de @ user10970498)

Supprimez la construction If-Then-Else-EndIf:

Rows("180").Hidden = (Range("J178") = "Credit" Or Range("J178") = "Debit" Or Range("J178") = "Both")

Ou

Rows("180").Hidden = IsNumeric(application.Match(Range("J178"), Array("Credit","Debit", "Both"), 0))

Cela fonctionne car la propriété Hidden est un Boolean.

0
AJD 27 janv. 2019 à 05:44