【问题标题】:Display userform before unhiding worksheets在取消隐藏工作表之前显示用户表单
【发布时间】:2019-12-13 00:18:28
【问题描述】:

我的代码显示了一个工作表,告诉用户打开宏,而其他工作表保持隐藏状态。重新打开工作簿后,将显示剩余的工作表,并隐藏告诉用户打开宏的工作表。

我想在显示隐藏的工作表之前显示一个用户表单。

Option Explicit
Const origsave As String = "C:\SDK Engineering\iMudCalc Software"
Const origwrkbksave As String = "C:\SDK Engineering\iMudCalc Software\iMudCalc.xlsm"

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet

'don't display workbook
Application.Visible = False

'Unhide the Starting Sheet
Sheets("Warning").Visible = xlSheetVisible

For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Warning" Then
        ws.Visible = xlVeryHidden
    End If
Next ws

If Len(Dir(origsave)) > 0 Then
    MkDir (origsave)
Else
    ActiveWorkbook.SaveCopyAs (origwrkbksave)
End If
End Sub

Private Sub WorkBook_Open()
Dim ws As Worksheet

Application.Visible = False

    For Each ws In ThisWorkbook.Worksheets
        ws.Visible = xlSheetVisible
    Next ws

    Sheets("Warning").Visible = xlVeryHidden

    'this is where I need the workbook to stay invisible and display a userform if macros are enabled...
    frmOnLoad.Show

End Sub

我正在使用 Excel 2013。

【问题讨论】:

  • 如果宏从一开始就被禁用,你希望你的宏在第一次运行时如何?如果我错了,请纠正我,但如果 Excel 宏安全设置默认设置为不允许宏,我很确定无论它们在 Excel 的第一个实例中做什么(打开/关闭宏),当他们完全退出 Excel,然后重新打开它,它会禁用宏。
  • @BruceWayne 我认为他的建议是您有一个启用宏的工作簿,并且您将其保存为隐藏的所有工作表,除了一张显示“您必须启用宏才能使用此工作簿”或其他内容的工作表。如果他们启用了宏,当它运行时,它会取消隐藏所有工作表并隐藏“您必须启用宏才能使用此工作簿”工作表。如前所述,它可以这样工作。

标签: excel vba


【解决方案1】:

我相信您正在寻找这样的东西。

根据需要修改。

置入ThisWorkbook

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Warning").Visible = xlSheetVisible
Dim ws
For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Warning" Then ws.Visible = xlVeryHidden
Next ws
ThisWorkbook.Save
End Sub
Private Sub Workbook_Open()
Dim ws
For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Warning" Then ws.Visible = xlSheetVisible
Next ws
Sheets("Warning").Visible = xlVeryHidden
End Sub

例子:

【讨论】:

  • 啊哈,干得好!有时我也可能不得不使用它。
  • 谢谢!是的,我不是很喜欢它,但我见过一些大型工作表使用这样的方法来确保启用宏。我可以肯定它很有用
  • 我的这部分工作正常。我需要知道的是,一旦“启用”宏,是否可以自动加载表单并从那里继续?我的软件的工作方式是显示一个“启动”屏幕,然后在使工作簿可见之前提出一个问题。工作簿是不可见的,除非宏被禁用。这有意义吗? TIA
  • @SDKEngineering 是的 - 绝对有可能 - 只需在 Workbook_Open() 例程中添加 UserForm.Show (如果/当启用宏时将运行,如上所示)。
  • 好的。看起来我现在可能已经正确了,哈哈。感谢大家的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多