Excel 多个If-and-Then语句

Excel 多个If-and-Then语句,excel,vba,if-statement,Excel,Vba,If Statement,这是我的VBA代码,唯一有效的是第一个和最后一个if和then语句。但是中间的两个没有。我想做的是,如果一个用户名打开工作簿,excel将只显示该人的工作表。该工作簿将基本上为不同的人提供不同的工作表,并将被共享。有人知道如何修复代码吗 Private Sub Workbook_Open() On Error Resume Next If VBA.Environ("username") = "Joseph" Then Worksheets("Joseph").Visible

这是我的VBA代码,唯一有效的是第一个和最后一个
if
then
语句。但是中间的两个没有。我想做的是,如果一个用户名打开工作簿,excel将只显示该人的工作表。该工作簿将基本上为不同的人提供不同的工作表,并将被共享。有人知道如何修复代码吗

Private Sub Workbook_Open()
On Error Resume Next

If VBA.Environ("username") = "Joseph" Then
         Worksheets("Joseph").Visible = xlSheetVisible ' First sheet to be made visible
         Worksheets("Mark").Visible = xlSheetVeryHidden
         Worksheets("Joel").Visible = xlSheetVeryHidden
         Worksheets("Ed").Visible = xlSheetVeryHidden

Else

  If VBA.Environ("username") = "Mark" Then
         Worksheets("Mark").Visible = xlSheetVisible ' First sheet to be made visible
         Worksheets("Joseph").Visible = xlSheetVeryHidden
         Worksheets("Joel").Visible = xlSheetVeryHidden
         Worksheets("Ed").Visible = xlSheetVeryHidden

  Else

    If VBA.Environ("username") = "Joel" Then
         Worksheets("Joel").Visible = xlSheetVisible ' First sheet to be made visible
         Worksheets("Ed").Visible = xlSheetVeryHidden
         Worksheets("Joseph").Visible = xlSheetVeryHidden
         Worksheets("Mark").Visible = xlSheetVeryHidden

    Else

      If VBA.Environ("username") = "Ed" Then
         Worksheets("Ed").Visible = xlSheetVisible ' First sheet to be made visible
         Worksheets("Joseph").Visible = xlSheetVeryHidden
         Worksheets("Mark").Visible = xlSheetVeryHidden
         Worksheets("Joel").Visible = xlSheetVeryHidden

      End If

    End If

  End If

End If

End Sub
是了解
选择案例
的良好起点

除此之外,elseif应该是一行

Private Sub Workbook_Open()


If VBA.Environ("username") = "Joseph" Then
     Worksheets("Joseph").Visible = xlSheetVisible ' First sheet to be made visible
     Worksheets("Mark").Visible = xlSheetVeryHidden
     Worksheets("Joel").Visible = xlSheetVeryHidden
     Worksheets("Ed").Visible = xlSheetVeryHidden

ElseIf VBA.Environ("username") = "Mark" Then
     Worksheets("Mark").Visible = xlSheetVisible ' First sheet to be made visible
     Worksheets("Joseph").Visible = xlSheetVeryHidden
     Worksheets("Joel").Visible = xlSheetVeryHidden
     Worksheets("Ed").Visible = xlSheetVeryHidden

ElseIf VBA.Environ("username") = "Joel" Then
     Worksheets("Joel").Visible = xlSheetVisible ' First sheet to be made visible
     Worksheets("Ed").Visible = xlSheetVeryHidden
     Worksheets("Joseph").Visible = xlSheetVeryHidden
     Worksheets("Mark").Visible = xlSheetVeryHidden

ElseIf VBA.Environ("username") = "Ed" Then
     Worksheets("Ed").Visible = xlSheetVisible ' First sheet to be made visible
     Worksheets("Joseph").Visible = xlSheetVeryHidden
     Worksheets("Mark").Visible = xlSheetVeryHidden
     Worksheets("Joel").Visible = xlSheetVeryHidden

End If


End Sub
然后按顺序进行,直到它找到一个是真的,并这样做,然后跳过所有其余的。逻辑与excel中的
If
函数略有不同。一条语句中可以有多个elseif。

m

给我这个密码,试着让我知道。您不必对所有情况进行编码,因为如果向公司添加新用户会发生什么情况。寻找一种更好的方法,如果需要的话,只需要更新和数组

   Option Explicit

' Module Variable to hold the users.
Dim arrUsers As Variant


Private Sub Workbook_Open()

    Dim strUserName As String

    ' Load the arrau of users and the username
    arrUsers = Array("Joseph", "Mark", "Joel", "Ed")
    strUserName = Environ$("username")

    ' Unhide the correct sheet.
    Call MakeVisbleForUser(strUserName)

    On Error Resume Next

End Sub

' Hide all the sheets and show only the one for an user.
Sub MakeVisbleForUser(ByVal strUser As String)

    Dim lCountVisible As Long
    Dim i As Long

    lCountVisible = GetCountVisibleSheets

    ' Hide all the sheets
    For i = LBound(arrUsers) To UBound(arrUsers)
        ' Make sure that the sheet for the user is not hidden
        If Not arrUsers(i) = strUser Then
            ' Make sure that there is at least one sheet visible
            If Not lCountVisible = 1 Then
                Worksheets(arrUsers(i)).Visible = xlSheetVeryHidden
                lCountVisible = lCountVisible - 1
            End If
        End If
    Next i

    ' Show only the one for the user
    Worksheets(strUser).Visible = xlSheetVisible

End Sub

Function GetCountVisibleSheets() As Long

    Dim sh As Worksheet
    Dim ret As Long

    For Each sh In ThisWorkbook.Sheets
        If sh.Visible = xlSheetVisible Then
            ret = ret + 1
        End If
    Next sh

    ' Return the value
    GetCountVisibleSheets = ret
End Function
谢谢,我希望能有所帮助:)

这里有一个更简单的方法:

         Worksheets("Joseph").Visible = xlSheetVeryHidden
         Worksheets("Mark").Visible = xlSheetVeryHidden
         Worksheets("Joel").Visible = xlSheetVeryHidden
         Worksheets("Ed").Visible = xlSheetVeryHidden

         Worksheets(VBA.Environ("username")).Visible = xlSheetVisible

你试过一个声明吗?嗨,米歇尔,我实际上对VBA有点陌生。你能帮我写代码吗?只要看看我评论中链接的语法,它就会告诉你该怎么做。让我试试。谢谢Alfredhi,我想问一下我需要在这个代码中更改什么?我更改了数组,因为我列出的名称实际上只是名称,但实际上用户名是ID。像ABC123Yes一样,您需要更改的只是数组:)是的,这就是我所做的,但是每当我更改数组时,就会弹出一个运行时错误“9”,说“下标超出范围”。arrUsers=Array(“ABC123”、“EFG456”、“IJK789”)我对代码做了一个小改动,因为我们总是需要至少一张可见的表。此外,我还建议使用某种加载表,如“欢迎工作表”,以便在数组中不存在的工作表尝试打开工作簿时始终可见。由于某些原因,该工作表不起作用。实际上已经试过了。