我使用以下代码允许用户将一个值写入Cell A1。
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。这一切都很好。
现在,我想知道是否有更简单的方法来做到这一点。就像这样:
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编程也是可能的。
发布于 2018-06-29 13:46:05
也许是这样的
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发布于 2018-06-29 13:56:18
我想,如果你有大量的条件,你可以把它们放在一个数组中,然后简单地替换你的条件语句。
If Environ("Username") = "firstname1.lastname1" Or Environ("Username") = "firstname2.lastname2" _
Or Environ("Username") = "firstname3.lastname3" Or Environ("Username") = "firstname4.lastname4" Then有了这个
If IsInArray(Environ("Username"), arr) Then但是,这需要首先使用条件维数组并使用此函数:
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这样,您的代码就会变得更加可读性和易于维护。
发布于 2018-06-29 13:55:30
由于您在单元格中工作,您可能需要在电子表格中定义允许的用户名。
以下是电子表格的外观:

下面是您可能使用的代码:
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 Subhttps://stackoverflow.com/questions/51103182
复制相似问题