Excel 多个If-and-Then语句
这是我的VBA代码,唯一有效的是第一个和最后一个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
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”)我对代码做了一个小改动,因为我们总是需要至少一张可见的表。此外,我还建议使用某种加载表,如“欢迎工作表”,以便在数组中不存在的工作表尝试打开工作簿时始终可见。由于某些原因,该工作表不起作用。实际上已经试过了。