我试图锁定一个工作表,使其只对公司中的少数人可见。我通过使用下面的宏实现了这一点,一旦打开工作簿,该宏就会运行。它只需创建“检查工作表”并运行if语句来检查打开工作表的人是否在列表中。
它工作正常,但有一个问题,一旦你禁用宏,提到的工作表不再是非常隐藏的,每个人都可以访问它。
有更好的方法吗?
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Sheets("OTE ratios").Visible = xlVeryHidden
Dim IFFORMULA As String
IFFORMULA = "=IF(OR(AA1=A2,AA2=AA1, AA3=AA1,AA4=AA1,AA5=AA1,AA6=AA1,AA7=AA1,AA8=AA1),""Yes"", ""No"")"
Sheets.Add.Name = "check"
Worksheets("check").Range("A2").Value = Worksheets("January").Range("A2").Value
Worksheets("check").Range("AB1").Value = IFFORMULA
Worksheets("check").Range("AA1").Value = Application.UserName
Worksheets("check").Range("AA2").Value = "USER1"
Worksheets("check").Range("AA3").Value = " USER2"
Worksheets("check").Range("AA4").Value = " USER3"
Worksheets("check").Range("AA5").Value = " USER4"
Worksheets("check").Range("AA6").Value = " USER5"
'DM goes here
Worksheets("check").Range("AA8").Value = " USER6"
Worksheets("check").Calculate
''''IF statement
If Worksheets("check").Range("AB1").Value = "Yes" Then
Sheets("OTE ratios").Visible = xlSheetVisible
End If
''''remove the sheet
Application.DisplayAlerts = False
Worksheets("check").Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Worksheets("January").Activate
End Sub
1条答案
按热度按时间pgvzfuti1#
首先,如果要用VBA代码对用户进行编码,为什么不使用VBA代码执行If检查,而要使用单元格中的公式来执行?
第二,我认为你的问题是你在创建新工作表之前用xlVeryHidden隐藏了工作表,但Excel需要保持至少一个工作表可见,相反你应该先创建新工作表,然后隐藏旧工作表。
你也可以在默认情况下保持空白工作表可见,而不是在打开时创建它,而在默认情况下隐藏另一个工作表,并在打开时决定是否显示隐藏的工作表。
最后,我想知道为什么一个问题是在评论中回答的,而不是添加一个答案?祝你一切顺利。