2017-03-02 41 views
1

我有一个用户表单,并且希望这是用户在打开工作簿时显示的第一个内容,以及隐藏在此表单后面的表单。完全支持用户表单的隐藏工作表

我明白下面是代码来做到这一点:

Private Sub Workbook_Open() 
Application.Visible = False 
UserForm1.Show vbModeless 
End Sub 

这成功地进行了手术,但我的工作表闪烁了一两秒钟之前,它是隐藏和显示窗体。 这是足够长,有人采取截图或看到后面UserForm有价值的信息。

它也不会显得很整洁!

有没有办法改变VBA内的任何东西来实现这个目标?

我发现它可能与批处理脚本或类似的东西,但我没有这方面的经验,宁愿不添加另一个维度已经复杂的形式。

+1

你可以激活特定的白纸,这可能会更快。但更好的方法是在BeforeClose和BeforeSave事件中激活该空白表单,这样它将打开该表单! ;) – R3uK

回答

0

我想选择隐藏所有敏感表的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 
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