2017-04-05 95 views
2

我有一个问题,但不知道它是否可以工作。我正在使用Excel 2013,并且我有一些代码来强制宏被打开。它显示一个工作表,使用户打开宏并隐藏其他工作表。重新打开工作簿后,将显示其余工作表并隐藏宏表。我想要做的是显示宏表来告诉用户打开宏。一旦工作簿被重新打开,我想在打开工作簿之前显示一个用户窗体。我强迫用户打开宏的代码如下:强制打开宏,然后显示一次宏的用户表单

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 

任何人都可以帮助解决这个问题吗?希望我解释得很好。

+0

如果宏是从一开始就无效,你怎么能指望你的宏运行的第一次?纠正我,如果我错了,但如果Excel宏安全设置设置为默认情况下不允许宏,我敢肯定,不管他们在第一个Excel实例中(打开/关闭宏),当他们完全退出Excel,然后重新打开它,它将禁用宏。 – BruceWayne

+0

@BruceWayne我认为他的建议是你有一个启用宏的工作簿,并且除了一个表格“你必须启用宏来使用这个工作簿”或其他东西以外,所有表格都是隐藏的。如果它们启用了宏,但在运行时会取消隐藏所有工作表并隐藏“您必须启用宏以使用此工作簿”工作表。如上所述,它可以这样工作。 – user1274820

回答

2

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

根据需要进行修改。

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 

实例地点:

Demo

+1

啊哈,很好!我可能也必须在某个时候使用它。 – BruceWayne

+0

谢谢!是的,我并不是很喜欢它,但我看到一些使用这种方法的大型工作表来确保启用宏。我可以看到它确实有用 – user1274820

+0

我有这部分工作正常。我需要知道的是,如果有一种方法,一旦宏被“启用”,表单可以自动加载并从那里继续?我的软件的工作方式是显示“飞溅”屏幕,然后在使工作簿可见之前提出问题。工作簿是不可见的,除非宏被禁用。这有意义吗? TIA –