隐藏工作表完全有利于用户表单
我有一个用户窗体,并希望这是在打开工作簿时显示给用户的第一件事情,以及隐藏在此窗体后面的工作表。
我明白下面是这样做的代码:
Private Sub Workbook_Open() Application.Visible = False UserForm1.Show vbModeless End Sub
这将成功执行操作,但是我的工作表在被隐藏之前闪烁了一两秒钟,并出现了用户窗体。 这足以让某人截取屏幕截图或查看用户窗体背后的有价值信息。
它也不是很整洁!
有没有办法改变VBA中的任何内容来完成这个?
我已经发现批处理脚本或类似的东西是可能的,但我没有这方面的经验,并且不希望在已经复杂的表单中添加另一个维度。
按照devise,如果没有外部脚本或工具,打开没有显示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
并在closures事件的forms:
Private Sub UserForm_Terminate() If Workbooks.Count Then ThisWorkbook.Close True Else Application.Quit End Sub
我会select隐藏所有敏感表单的Workbook_BeforeClose
事件。 这样,您的数据在未启用macros的情况下对打开文件的人员保持隐藏状态。
这是一个新的标准模块
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
对用户进行身份validation后,可以使用参数False
隐藏表单。
我也build议探索用户窗体,特别是:
With New UserForm1 .Show vbModeless 'do more with your form End With