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

Dom*_*nic 5 excel protection worksheet excel-2010

我有一个Excel 2010工作簿。一个工作表从外部数据连接(SQL查询)导入数据。我还向工作表中添加了其他列,以对数据进行计算并对其进行调整。该工作表构成了其他工作表中使用的原始数据的基础。

我想保护工作表使其为只读(允许排序,过滤器,数据透视表使用)。我知道如何使用保护工作表功能来做到这一点。但是,当工作表受到保护时,我不能使用“刷新”按钮来刷新源中的数据,我希望用户能够执行此操作。我打算将连接属性配置为在打开时自动刷新并允许手动刷新。

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

Dom*_*nic 4

根据 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
Run Code Online (Sandbox Code Playgroud)

然后我在 VBA 项目中打开ThisWorkbook并编辑 Workbook Open 例程。

Private Sub Workbook_Open()
RefreshData
End Sub
Run Code Online (Sandbox Code Playgroud)

有关保护选项的更多信息,请访问:http://datapigtechnologies.com/blog/index.php/worksheet-protection-best-practice/

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

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

我在连接属性中做的另一件事是删除后台刷新的勾号。