我有一个userform,并希望这是打开工作簿时向用户显示的第一件事,并隐藏此表单后面的工作表。
我理解以下是执行此操作的代码:
Private Sub Workbook_Open()
Application.Visible = False
UserForm1.Show vbModeless
End Sub
这会成功执行操作,但我的工作表会在隐藏并显示用户窗体之前闪烁一两秒钟。 这足以让某人截取屏幕截图或查看用户表单背后的有价值信息。
它看起来也不是很整洁!
有没有办法改变VBA中的任何内容来实现这一目标?
我发现可以使用批处理脚本或类似的东西,但我没有这方面的经验,并且不希望在已经复杂的表单中添加另一个维度。
答案 0 :(得分:1)
我选择隐藏所有敏感表的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
取消隐藏工作表。
我还建议探索UserForms,特别是:
With New UserForm1
.Show vbModeless
'do more with your form
End With
答案 1 :(得分:0)
根据设计,如果没有外部脚本或工具,则无法在不显示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