首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >压缩VBA代码中的多个OR-条件

压缩VBA代码中的多个OR-条件
EN

Stack Overflow用户
提问于 2018-06-29 13:43:01
回答 4查看 4.9K关注 0票数 3

我使用以下代码允许用户将一个值写入Cell A1

代码语言:javascript
复制
Sub TestUsername()
If Environ("Username") = "firstname1.lastname1" Or Environ("Username") = "firstname2.lastname2" _
Or Environ("Username") = "firstname3.lastname3" Or Environ("Username") = "firstname4.lastname4" Then
Sheet1.Range("A1").Value = 1
Else
Sheet1.Range("A2").Value = 2
End If
End Sub

如您所见,我列出了允许在Cell A1中输入一个值的每个用户,这些用户的VBA代码中包含一个OR-condition。这一切都很好。

现在,我想知道是否有更简单的方法来做到这一点。就像这样:

代码语言:javascript
复制
Sub TestUsername()
If List of or-conditions: {"firstname1.lastname1", "firstname2.lastname2", _
"firstname3.lastname3", "firstname4.lastname4"} = True Then
Sheet1.Range("A1").Value = 1
Else
Sheet1.Range("A2").Value = 2
End If
End Sub

我只知道在PHP中您可以压缩多个条件,比如here。因此,我认为这对于VBA编程也是可能的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-29 13:46:05

也许是这样的

代码语言:javascript
复制
Sub TestUsername()
    Select Case Environ("Username")
    Case "firstname1.lastname1", "firstname2.lastname2", "firstname3.lastname3"
        Sheet1.Range("A1").Value = 1
    Case Else
        Sheet1.Range("A2").Value = 2
    End Select
End Sub
票数 7
EN

Stack Overflow用户

发布于 2018-06-29 13:56:18

我想,如果你有大量的条件,你可以把它们放在一个数组中,然后简单地替换你的条件语句。

代码语言:javascript
复制
If Environ("Username") = "firstname1.lastname1" Or Environ("Username") = "firstname2.lastname2" _
Or Environ("Username") = "firstname3.lastname3" Or Environ("Username") = "firstname4.lastname4" Then

有了这个

代码语言:javascript
复制
If IsInArray(Environ("Username"), arr) Then

但是,这需要首先使用条件维数组并使用此函数:

代码语言:javascript
复制
Public Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
    Dim i
    For i = LBound(arr) To UBound(arr)
        If arr(i) = stringToBeFound Then
            IsInArray = True
            Exit Function
        End If
    Next i
    IsInArray = False

End Function

这样,您的代码就会变得更加可读性和易于维护。

票数 1
EN

Stack Overflow用户

发布于 2018-06-29 13:55:30

由于您在单元格中工作,您可能需要在电子表格中定义允许的用户名。

以下是电子表格的外观:

下面是您可能使用的代码:

代码语言:javascript
复制
Sub TestUsername()
    Dim username As String
    Dim userInTable As Integer
    Dim allowedUserRange As Excel.Range

    username = Environ("username")
    Set allowedUserRange = Excel.Range("tUsers")

    userInTable = Excel.WorksheetFunction.CountIf(allowedUserRange, username)

    If userInTable Then
        Sheet1.Range("A1").Value = 1
    Else
        Sheet1.Range("A1").Value = 2
    End If
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51103182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档