隐藏工作表完全有利于用户表单

我有一个用户窗体,并希望这是在打开工作簿时显示给用户的第一件事情,以及隐藏在此窗体后面的工作表。

我明白下面是这样做的代码:

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