我想保护我的工作簿,我有多个工作表,我需要隐藏,只留下一个工作表显示,该工作表有一个命令按钮(图1),当我点击它时,我有一个用户表单弹出(图2),其中有用户名和密码来打开特定的工作表(我已经设置了不同的用户名和密码来打开特定的工作表)。请在此输入图片描述请在此输入图片描述我写了这段代码。
Private Sub CommandButton1_Click()
Dim User, Pass As String
User = Me.TextBox1.Text
Pass = Me.TextBox2.Text
If User = "Admin" And Pass = "123" Then
MsgBox ("Bienvenu")
Application.Visible = True
ActiveWorkbook.Unprotect Password:="password"
Sheets("ACCEUIL").Visible = True
Sheets("Liste Personnes").Visible = True
Sheets("Liste IT").Visible = True
Sheets("Liste PE").Visible = True
Sheets("Liste EM").Visible = True
Sheets("Liste ELC").Visible = True
Sheets("Liste Habilitation").Visible = True
Sheets("Liste EPC").Visible = True
Sheets("Liste ECH").Visible = True
ActiveWorkbook.Protect Password:="password"
Unload Me
Else
'Pole Essais
If User = "Admin1" And Pass = "456" Then
MsgBox " Bienvenue"
Application.Visible = True
ActiveWorkbook.Unprotect Password:="password"
Sheets("Liste Personnes").Visible = True
Sheets("Liste IT").Visible = True
Sheets("Liste PE").Visible = True
Sheets("Liste EM").Visible = True
Sheets("Liste ELC").Visible = True
Sheets("Liste Habilitation").Visible = True
Sheets("Liste EPC").Visible = True
Sheets("Liste ECH").Visible = True
Sheets("PICHON Franck").Visible = True
Sheets("MAGNIER Jean-Fran?ois").Visible = True
Sheets("LAPIERRE Louis").Visible = True
Sheets("HOSSAERT Didier").Visible = True
Sheets("DEBEYER Nicolas").Visible = True
Sheets("GARCIA Manuel").Visible = True
Sheets("GIRARD Sunny").Visible = True
Sheets("SICOT Thimot?e").Visible = True
Sheets("BEAUVILLAIN Maxime").Visible = True
Sheets("WATTEZ Eric").Visible = True
Sheets("PROUVOST Thomas").Visible = True
Sheets("PROUVOST Mathieu").Visible = True
Sheets("GARCIA Manuel").Visible = True
ActiveWorkbook.Protect Password:="password"
Unload Me
Else
MsgBox " Verifier le nom d'utilisateur ou le mot de passe"
End If
End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
ActiveWorkbook.Close True
End Sub
问题是当我关闭我的工作簿并重新打开它时,我的工作簿上显示了最近的工作表,我想显示 "ACCEUIL "工作表,而不是上次我打开工作簿时的工作表。
谢谢 @karma 它工作得非常好,但我有一些问题要问,当我打开我的工作簿时,我有一个用户表单,弹出编辑读取我的数据库内容,当我完成对我的数据库的工作并关闭用户表单(UF_Choix_Service)时,我有所有的工作表再次可见:但当我即将关闭文件时,我在后台看到表已经消失,所以你的代码工作得很好,我只是想知道如何在关闭用户表单后隐藏表。(我把它放在一个工作簿模块中)
Sub Workbook_Open()
Gestion_Comp
end sub
哪儿
Sub_Gestion_Comp ()
Application.ScreenUpdating = False
Nom_Classeur = ThisWorkbook.Name
mode_edition = False
UF_Choix_Service.Show
Select Case MsgBox("Voulez vous sauvegarder le fichier ?", vbYesNo + vbQuestion, "Sauvegarde du fichier")
Case vbYes
ThisWorkbook.Save
End Select
End Sub
请看一下这段代码,也许你可以根据你的需要来实现它。
Sub test()
Dim arr() As Variant
'get all sheet name except "Sheet1" to array
For Each sh In Worksheets
If sh.Name = "Sheet1" Then
Else
ReDim Preserve arr(X)
arr(X) = sh.Name
X = X + 1
End If
Next
'hide all the sheet name in that array, so the only not hidden is Sheet1
For Each sh In arr
If Sheets(sh).Visible = True Then Sheets(sh).Visible = False
Next
'show all the sheet name in that array
For Each sh In arr
If Sheets(sh).Visible = False Then Sheets(sh).Visible = True
Next
End Sub
我希望显示的是 "ACCEUIL "工作表,而不是我上次打开工作簿时正在做的工作。
把你的宏放在工作簿模块上,像这样。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim arr() As Variant
For Each sh In Worksheets
If sh.Name = "ACCEUIL" Then
Else
ReDim Preserve arr(X)
arr(X) = sh.Name
X = X + 1
End If
Next
For Each sh In arr
If Sheets(sh).Visible = True Then Sheets(sh).Visible = False
Next
End Sub
你需要在关闭工作簿之前保存它.如果我没有弄错的话,这就是你想要的。
EDIT:
当我完成我的数据库工作后 关闭用户表单 (UF_Choix_Service). 我只是想知道如何 关闭用户表单后隐藏表单
如果你想把所有的工作表都隐藏起来,但ACCEUIL工作表除外,那么在Sub上你有一行: Unload UF_Choix_Service
试着把这行:
Unload UF_Choix_Service '---> this is your existing code to close the userform
For Each sh In Worksheets
If sh.Name = "ACCEUIL" Then
else
If Sheets(sh.Name).Visible = True Then Sheets(sh.Name).Visible = False
end if
Next
end sub
在代码unloadclose用户表单后,上面的代码说。Loop through all the existing worksheets, If the sheet name is "ACCEUIL", do nothing other than ACCEUIL, if this other sheet is visible then hide it.
别忘了把我让你放在工作簿模块中的子(BeforeClose)去掉。