VBA如何“锁定”Excel表格

时间:2011-09-15 18:23:31

标签: excel excel-vba vba

当我的vba代码运行并修改excel表时,有没有办法锁定excel表不被用户更改?

2 个答案:

答案 0 :(得分:5)

如果您的代码处于活动状态,那么我不确定为什么用户可以同时修改数据 - 应该显示宏沙漏,使交互不可能

你能发布你的代码吗?

您可以考虑的选项包括

  1. 添加进度条让用户知道正在发生的事情(即代码运行时不播放),以及需要多长时间 这个来自Walkenbach的例子非常有用 http://spreadsheetpage.com/index.php/tip/displaying_a_progress_indicator/
  2. 在工作正在进行时使Excel应用程序不可见

    Application.Visible = False
    'code
    Application.Visible = True
    

答案 1 :(得分:2)

来自Excel 2003 ...在没有其他操作的情况下保护工作表将阻止用户输入 VBA操作。为了防止用户与锁定的单元格进行交互但仍然允许VBA,您可以使用UserInterfaceOnly属性。这只能通过VBA完成,无法以这种方式“手动”保护工作表。如果手动取消保护工作表,则会删除此属性。因此,最好在工作簿/工作表打开/激活事件上设置此属性,例如

Private Sub Workbook_Open()
Dim SH As Worksheet
    ' allow some non-destructive activities
    For Each SH In ActiveWorkbook.Worksheets
        SH.Protect DrawingObjects:=False, Contents:=True, UserInterfaceOnly:=True, _
                        AllowSorting:=True, AllowFiltering:=True, _
                        AllowUsingPivotTables:=True
    Next SH
End Sub