如果用户没有启用宏
,是否有办法阻止Excel工作簿打开答案 0 :(得分:4)
执行此操作的标准方法是强制用户使用启动画面启用宏。
也可以通过写入注册表来修改VBA设置(例如使用VBS
- 虽然在公司设置中GPO可能会阻止此操作)。有关访问注册表的示例,请参阅http://blogs.msdn.com/b/cristib/archive/2012/02/29/vba-programmatically-enable-access-to-the-vba-object-model-using-macros.aspx。
启动画面方式
下面列出了两种具有此技术完整代码的链接
代码进入ThisWorkbook模块
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ws As Worksheet, wsSplash As Worksheet
Application.ScreenUpdating = False
Application.EnableEvents = False
Set wsSplash = Worksheets("Splash screen")
wsSplash.Visible = xlSheetVisible
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Splash screen" Then ws.Visible = xlSheetVeryHidden
Next ws
Cancel = True
ThisWorkbook.Save
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Splash screen" Then ws.Visible = xlSheetVisible
Next ws
wsSplash.Visible = xlSheetVeryHidden
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Workbook_Open()
Dim ws As Worksheet, wsSplash As Worksheet
Dim Pswd As String
Pswd="myPassword"
Application.ScreenUpdating = False
Set wsSplash = Worksheets("Splash screen")
wsSplash.Visible = xlSheetVisible
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Splash screen" Then
If ws.Name="Sheet1" Then
If InputBox("Please enter your password")=Pswd Then ws.Visible=xlSheetVisible
Else
ws.Visible = xlSheetVisible
End If
End If
Next ws
wsSplash.Visible = xlSheetVeryHidden
Application.ScreenUpdating = True
End Sub
代码进入ThisWorkbook模块
Option Explicit
Private Sub Workbook_Open()
With Application
'disable the ESC key
.EnableCancelKey = xlDisabled
.ScreenUpdating = False
Call UnhideSheets
.ScreenUpdating = True
're-enable ESC key
.EnableCancelKey = xlInterrupt
End With
End Sub
'
Private Sub UnhideSheets()
'
Dim Sheet As Object
'
For Each Sheet In Sheets
If Not Sheet.Name = "Prompt" Then
Sheet.Visible = xlSheetVisible
End If
Next
'
Sheets("Prompt").Visible = xlSheetVeryHidden
'
Application.Goto Worksheets(1).[A1], True '< Optional
'
Set Sheet = Nothing
ActiveWorkbook.Saved = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Application
.EnableCancelKey = xlDisabled
.ScreenUpdating = False
Call HideSheets
.ScreenUpdating = True
.EnableCancelKey = xlInterrupt
End With
End Sub
Private Sub HideSheets()
'
Dim Sheet As Object '< Includes worksheets and chartsheets
'
With Sheets("Prompt")
'
'the hiding of the sheets constitutes a change that generates
'an automatic "Save?" prompt, so IF the book has already
'been saved prior to this point, the next line and the lines
'relating to .[A100] below bypass the "Save?" dialog...
If ThisWorkbook.Saved = True Then .[A100] = "Saved"
'
.Visible = xlSheetVisible
'
For Each Sheet In Sheets
If Not Sheet.Name = "Prompt" Then
Sheet.Visible = xlSheetVeryHidden
End If
Next
'
If .[A100] = "Saved" Then
.[A100].ClearContents
ThisWorkbook.Save
End If
'
Set Sheet = Nothing
End With
'
End Sub
答案 1 :(得分:0)
使用以下vb脚本强制为我自动启用宏。希望对别人有帮助
Set objExcel = CreateObject("Excel.Application")
objExcel.Application.Visible = True
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "%{F11}"
WshShell.SendKeys "% n"
Set objWorkbook = objExcel.Workbooks.Open("C:\Macro File.xlsm")
答案 2 :(得分:0)
您可以使用密码保护电子表格。
可以在“审阅/保护工作簿”中找到。
当用户尝试打开电子表格时,将提示他们输入密码。如果他们不知道,则无法打开它。
这种方法不需要VBA(也不需要宏)。