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

我有一个Excel 2010工作簿。 一个工作表从外部数据连接(SQL查询)导入数据。 我还在工作表中添加了额外的列来对数据进行计算并对其进行一些处理。 工作表形成其他工作表中使用的原始数据的主干。

我想保护工作表,使其只读(允许sorting,filter,数据透视表使用)。 我知道如何使用保护工作表function。 但是,当工作表受到保护时,我无法使用“刷新”button来刷新源数据,我希望用户能够执行此操作。 我打算将连接属性configuration为在打开时自动刷新并允许手动刷新。

有没有人find一个优雅的方式来启用保护工作表function,并启用外部数据刷新,而不允许用户更改自己的单元格值?

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

根据Pankaj的build议,我做了以下工作(虽然我觉得这不是很优雅,还是认为应该有更好的方法)。

我为该工作簿创build了一个新的macros。

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并编辑了Workbook Open例程。

 Private Sub Workbook_Open() RefreshData End Sub 

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

有用; 每当打开工作簿并执行数据刷新时,工作表就被locking。 UserInterfaceOnly属性不会影响刷新数据的命令(尽pipe它应该是其他macros事件)。 您仍然需要特别解锁电子表格,执行数据刷新,然后再次locking表格。

我添加了一个表单button到其他表单之一,并将其​​链接到我的RefreshDatamacros,以便数据可以手动刷新,而表被locking。

我在连接属性中做的另一件事是删除背景刷新的时间。

我build议将外部查询添加到另一个工作表,不受保护,但你会隐藏。 受保护的表格上的数据将简单地引用未受保护的表格。

我将数据连接添加到一些不受保护的纸张,然后隐藏纸张。 不幸的是,即使工作簿的结构受到保护,连接也不起作用。

我不相信我可能需要释放我的代码不受保护,必须有一个工业强度的解决scheme