完全支持用户表单的隐藏工作表
问题描述:
我有一个用户表单,并且希望这是用户在打开工作簿时显示的第一个内容,以及隐藏在此表单后面的表单。完全支持用户表单的隐藏工作表
我明白下面是代码来做到这一点:
Private Sub Workbook_Open()
Application.Visible = False
UserForm1.Show vbModeless
End Sub
这成功地进行了手术,但我的工作表闪烁了一两秒钟之前,它是隐藏和显示窗体。 这是足够长,有人采取截图或看到后面UserForm有价值的信息。
它也不会显得很整洁!
有没有办法改变VBA内的任何东西来实现这个目标?
我发现它可能与批处理脚本或类似的东西,但我没有这方面的经验,宁愿不添加另一个维度已经复杂的形式。
答
我想选择隐藏所有敏感表的Workbook_BeforeClose
事件。这样,您的数据在没有启用宏的情况下对打开文件的人员保持隐藏状态。
这又一个新的标准模块
Option Explicit
Option Private Module
Public Sub SheetsHidden(ByRef hidden As Boolean)
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.name <> "Home" And hidden Then 'your *safe* sheet name
ws.Visible = xlSheetVeryHidden
Else
ws.Visible = xlSheetVisible
End If
Next ws
End Sub
中,然后你可以从你的ThisWorkbook
模块
Private Sub Workbook_BeforeClose(Cancel As Boolean)
SheetsHidden True
End Sub
调用它一旦你已经验证过的用户,你可以用参数为取消隐藏表False
。
我也建议用户窗体探索,特别是:
With New UserForm1
.Show vbModeless
'do more with your form
End With
答
按照设计,打开Excel文件,而不Excel中显示出来,那是不可能的外部脚本或工具。
可以隐藏所有的表更简单的方法是将文件保存为.xla(m)
(或使用ThisWorkbook.IsAddin = True
)
Private Sub Workbook_Open()
ThisWorkbook.IsAddin = True ' True by default for .xla(m) Excel Add-In files
Application.Visible = Workbooks.Count
UserForm1.Show vbModeless
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not ThisWorkbook.IsAddin Then ThisWorkbook.IsAddin = True
If Not ThisWorkbook.Saved Then ThisWorkbook.Save
If Workbooks.Count Then Application.Visible = True Else Application.Quit
End Sub
,并在窗体关闭事件:
Private Sub UserForm_Terminate()
If Workbooks.Count Then ThisWorkbook.Close True Else Application.Quit
End Sub
你可以激活特定的白纸,这可能会更快。但更好的方法是在BeforeClose和BeforeSave事件中激活该空白表单,这样它将打开该表单! ;) – R3uK