excel vba if语句与OR和场景

excel vba if语句与OR和场景,vba,excel,Vba,Excel,我有一个电子邮件系统,它根据当前记录的国籍选择不同的语言模板。但是,我需要动态选择语言,因为最终用户并不总是希望以条目的国家语言发送消息,这意味着,例如,如果记录的国籍为“IT”(意大利),我希望在继续之前检查语言模板是否设置为“Active”,分别默认为EN(英语)如果模板处于“非活动”状态 现在,我需要的if语句是这样的 if (nationality = "DE" or nationality = "AT" or nationality = "CH") _

我有一个电子邮件系统,它根据当前记录的国籍选择不同的语言模板。但是,我需要动态选择语言,因为最终用户并不总是希望以条目的国家语言发送消息,这意味着,例如,如果记录的国籍为“IT”(意大利),我希望在继续之前检查语言模板是否设置为“Active”,分别默认为EN(英语)如果模板处于“非活动”状态

现在,我需要的if语句是这样的

if (nationality = "DE" or nationality = "AT" or nationality = "CH") _
                          AND (Range("B5") = "Active") then
    'do something

Elseif ... 'check other languages
如何将这些或语句组合为多种语言,同时添加AND语句以检查模板是否处于活动状态?

A可能有助于整理多个匹配项

If ((nationality = "DE" Or nationality = "AT" Or nationality = "CH") And Range("B5").Value = "Active") Then
    Set Rng = Sheets("PostStayEmail_DE").Range("A1:B30").SpecialCells(xlCellTypeVisible)
    With ActiveWorkbook.Sheets("PostStayEmail_DE")
        'do something
    End With
ElseIf ((nationality = "IT") And Range("B5").Value = "Active") Then
    Set Rng =   Sheets("PostStayEmail_IT").Range("A1:B30").SpecialCells(xlCellTypeVisible)
    With ActiveWorkbook.Sheets("PostStayEmail_IT")
        'do something
    End With
End If
if lcase(Range("B5").Value) = "active" then
    select case ucase(nationality)
        case "DT", "AT", "CH"
            With ActiveWorkbook.Sheets("PostStayEmail_DE")
                Set rng = .Range("A1:B30").SpecialCells(xlCellTypeVisible)
                'do something
            End With
        case "IT"
            With ActiveWorkbook.Sheets("PostStayEmail_IT")
                Set rng = .Range("A1:B30").SpecialCells(xlCellTypeVisible)
                'do something
            End With
        case else
            'do thing if no matches
    end select
else
    'do stuff when B5 is not 'Active'
end if
根据ISO 3166-1 alpha-2两个字母的国家/地区代码的各种组合的代码重复情况,您可能只希望记录工作表名称,并将所有进一步的处理保留在选定案例下方的单个块中

If (nationality = "DE" OR nationality = "AT" OR nationality = "CH") _
                          AND Range("B5") = "Active" then

'do something

End If

这应该行得通

您现在面临的问题是什么?是否需要检查每个语言模板表上的范围B5?你有多少种不同的模板?这是值得称赞的,因为它干净地解决了可能的情况。非常喜欢这个解决方案,因为我正在为每个消息模板反复执行上述操作。
If (nationality = "DE" OR nationality = "AT" OR nationality = "CH") _
                          AND Range("B5") = "Active" then

'do something

End If