Vba 完全隐藏工作表以支持userform

Vba 完全隐藏工作表以支持userform,vba,excel,Vba,Excel,我有一个userform,希望它是打开工作簿时向用户显示的第一件事,并且隐藏此表单后面的工作表 我理解以下是执行此操作的代码: Private Sub Workbook_Open() Application.Visible = False UserForm1.Show vbModeless End Sub 这将成功执行操作,但我的工作表在隐藏并显示用户窗体之前会闪烁一两秒钟。 这足够长,可以让人截图或查看用户表单背后的有价值信息 它看起来也不太整洁 有没有办法改变VBA中的任何内容来实现这一点

我有一个userform,希望它是打开工作簿时向用户显示的第一件事,并且隐藏此表单后面的工作表

我理解以下是执行此操作的代码:

Private Sub Workbook_Open()
Application.Visible = False
UserForm1.Show vbModeless
End Sub
这将成功执行操作,但我的工作表在隐藏并显示用户窗体之前会闪烁一两秒钟。 这足够长,可以让人截图或查看用户表单背后的有价值信息

它看起来也不太整洁

有没有办法改变VBA中的任何内容来实现这一点


我发现可以使用批处理脚本或类似的东西,但我没有这方面的经验,我不希望在已经很复杂的表单中添加另一个维度。

我会选择在关闭之前隐藏所有敏感表单的
工作簿事件。这样,在未启用宏的情况下,打开文件的人仍可以隐藏数据

这是一个新的标准模块

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
对用户进行身份验证后,可以取消隐藏参数为
False
的工作表


我还建议探索用户表单,特别是:

With New UserForm1
    .Show vbModeless
    'do more with your form
End With

按照设计,如果没有外部脚本或工具,打开Excel文件而不显示Excel是不可能的

隐藏所有工作表的更简单方法是将文件另存为
.xla(m)
(或使用
thiswoolk.IsAddin=True

以关闭事件的形式:

Private Sub UserForm_Terminate()
    If Workbooks.Count Then ThisWorkbook.Close True Else Application.Quit
End Sub

您可以激活特定的空白工作表,这可能会更快。但更好的方法是在BeforeClose和BeforeSave事件中激活空白工作表,这样它将打开该工作表!;)
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