我使用以下代码允许用户将值写入单元格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
如您所见,我列出了每个允许在我的VBA代码中使用OR-condition
在单元格A1 中输入值的用户。所有这些都很好。
现在,我想知道是否有更简单的方法可以做到这一点。像这样:
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编程也是可能的。
答案 0 :(得分:7)
也许是这样
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
答案 1 :(得分:0)
由于您正在使用单元格,因此您可能希望在电子表格中定义允许的用户名。
电子表格表格的外观如下:
这是您可能使用的代码:
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
答案 2 :(得分:0)
我想,如果您的条件量非常大,则可以将它们放在数组中,然后只需替换条件语句即可
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
这样,您的代码将变得更具可读性和易于维护。
答案 3 :(得分:0)
Select Case提供了一个很好的解决方案,可以同时测试多个条件。我用它来提醒用户,如果他们没有提供所有必需的输入。我正在监视来自多个下拉框的输入以及一些直接单元格输入。
Select Case True
Case Range("Customer_DD_Control_Cell") > 0 _
And Range("Dealer_DD_Control_Cell") > 0 _
And Range("Rep_DD_Control_Cell") > 0 _
And Range("Product_DD_Control_Cell") > 0 _
And Len(Range("Customer_State_Input")) > 0 _
And Len(Range("Contract_Date_Input")) > 0
Case Else
MsgBox "You have not completed the required inputs"
End Select