保护Excel工作表只读,但启用外部数据刷新。

5
我有一个Excel 2010工作簿。其中一个工作表从外部数据连接(SQL查询)导入数据。我还在工作表中添加了额外的列来对数据进行计算和调整。该工作表是其他工作表中使用的原始数据的支柱。
我想保护工作表,使其只读(允许排序、筛选、数据透视表使用)。我知道如何使用保护工作表功能来实现这一点。但是当工作表被保护时,我无法使用刷新按钮从源刷新数据,而我希望用户能够这样做。我打算配置连接属性,在打开时自动刷新并允许手动刷新。
有没有人找到一种优雅的方法来启用保护工作表功能并启用外部数据刷新,而不允许用户自己更改单元格值?
4个回答

3

根据Pankaj的建议,我采取了以下措施(尽管我认为它不太优雅,仍然认为必须有更好的方法)。

我为工作簿创建了一个新的宏。

Sub RefreshData()
'
' RefreshData Macro
'
Application.ScreenUpdating = False
Sheets("sheetname").Unprotect Password:="password"
ActiveWorkbook.Connections("connection name").Refresh
Sheets("sheetname").Protect _
Password:="password", _
UserInterfaceOnly:=True, _
AllowFiltering:=True, _
AllowSorting:=True, _
AllowUsingPivotTables:=True
End Sub

然后我在VBA项目中打开了ThisWorkbook,并编辑了工作簿打开程序。

Private Sub Workbook_Open()
RefreshData
End Sub

关于保护选项的更多信息可以在这里找到:http://datapigtechnologies.com/blog/index.php/worksheet-protection-best-practice/

它起作用了;每次打开工作簿并执行数据刷新时,工作表都会被锁定。UserInterfaceOnly属性对于刷新数据的命令没有影响(尽管对于其他宏事件应该有影响)。您仍然需要明确解锁电子表格,执行数据刷新,然后再次锁定工作表。

我在另一个工作表上添加了一个表单按钮,并将其链接到我的RefreshData宏,以便在工作表被锁定的情况下可以手动刷新数据。

我在连接属性中做的另一件事是取消勾选背景刷新。


2

一种简单的方法是添加自定义按钮并编写宏。当用户按下工具栏自定义按钮时,其后面的宏将取消保护工作表并刷新外部数据,然后保护工作表(显然要将屏幕更新设置为false)。


1
我建议将外部查询添加到另一个工作表中,该工作表未被保护,但您需要将其隐藏。 受保护工作表上的数据只需引用未受保护的工作表即可。

0

我在一些未受保护的工作表中添加了数据连接,然后隐藏了这些工作表。不幸的是,即使工作簿的结构受到保护,这些连接也无法正常工作。

我无法相信我可能需要发布未受保护的代码,肯定有一个工业级别的解决方案可以解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接