隐藏多个工作表,只显示一个工作表vba。

问题描述 投票:0回答:1

我想保护我的工作簿,我有多个工作表,我需要隐藏,只留下一个工作表显示,该工作表有一个命令按钮(图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 "工作表,而不是上次我打开工作簿时的工作表。

excel vba
1个回答
0
投票

谢谢 @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

请在此输入图片描述


0
投票

请看一下这段代码,也许你可以根据你的需要来实现它。

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)去掉。

© www.soinside.com 2019 - 2024. All rights reserved.